Конфигурации iptables

Разместите здесь пожалуйста конфигурации или скрипты настройки iptables, которые используются у вас на домашних компютерах.

#!/bin/bash

#!/bin/bash 

IPTABLES='/sbin/iptables'
EXTIF='eth0'
INTIF1='eth1'
EXTIP='192.168.55.214'
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
#$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE 
$IPTABLES -t nat -A POSTROUTING -o eth0 -s 10.0.0.10/16 -j SNAT --to-source 192.168.111.74
#$IPTABLES -t nat -A POSTROUTING -o eth0 -s 10.0.0.1 -j SNAT --to-source 192.168.55.214 
$IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
#$IPTABLES  -t nat -A PREROUTING -p tcp -d $EXTIP --dport 8167 -j DNAT --to-destination 10.0.0.2:8167 
#$IPTABLES  -A FORWARD -i eth0 -d 10.0.0.2 -p tcp --dport 8167 -j ACCEPT 
########################################################################################### 
# Создаём политики по-умолчанию 
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
# SMB 
$IPTABLES  -A INPUT -p tcp --dport 137:139 -j ACCEPT
$IPTABLES  -A INPUT -p udp --dport 137:139 -j ACCEPT
$IPTABLES  -A INPUT -p tcp --dport 445 -j ACCEPT
$IPTABLES  -A INPUT -p udp --dport 445 -j ACCEPT
#раздача торрентов  
$IPTABLES  -A INPUT -p tcp --dport 6881:6889 -j ACCEPT
# Мои сервисы 
$IPTABLES -A INPUT --protocol tcp --dport 21 -j ACCEPT # ftp 
$IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT # ssh 
$IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT # apache 
$IPTABLES -A INPUT --protocol tcp --dport 8001 -j ACCEPT # icecast 
$IPTABLES -A INPUT --protocol tcp --dport 8112 -j ACCEPT #deluge 
$IPTABLES -A INPUT --protocol tcp --dport rsync -j ACCEPT # gentoo rsync 
$IPTABLES -A INPUT --protocol tcp --dport 1666 -j ACCEPT # test 
$IPTABLES -A INPUT --protocol tcp --dport 8080 -j ACCEPT # test  


# Разрешаем пакеты из установившихся и связаных соединений 
$IPTABLES  -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES  -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES  -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#DC++ 
#$IPTABLES  -A INPUT -p tcp --dport 10100 -j ACCEPT 
#$IPTABLES  -A INPUT -p udp --dport 10100 -j ACCEPT 
# ICMP 
$IPTABLES -A INPUT -p icmp -j ACCEPT

на моём домашнем сервачке =) NAT + фаер от ломака в локалке

а зачем?

а зачем?

Просто

Просто я хотел посмотреть у кого какие рабочие скрипты под iptables. Может себе взял за основу. А то у меня с нуля не получается настроить.

так очень

так очень трудно сделать, нужно читать доки с обьяснениями какие команды за что отвечают.
В первую очередь нужно искать документацию по своему дистрибутиву, восновном она лежит на
gentoo.org/doc/
gentoo-wiki.com
ru.gentoo-wiki.com
то что тебе нужно лежит тут, так-же есть русская версия - но она немного устарела и лучше смотреть на английскую и что непонятно подсматривать на русской.

Мой конфиг,

Мой конфиг, создан на основе статей в вики:

#!/bin/bash

IPTABLES="/sbin/iptables"
POLICY="DROP"		# политика по умолчанию (ACCEPT/DROP)

#######################################################################################################
# Настройки интерфейсов ----- Interfaces Settings
#######################################################################################################

WAN1_IF="ppp0"		# внешний интерфейс

LAN="192.168.0.0/24"	# внутренняя сеть
LAN1_IF="eth0"		# внутренний интерфейс
LAN1_IP="192.168.0.1"	# адрес на внутреннем интерфейсе

LO_IF="lo"		# loopback-интерфейс
LO_IP="127.0.0.1"	# loopback-адрес
LOOPBACK="127.0.0.0/8"	# loopback-петля

PROXY_PORT="8080"	# порт прокси сервера

DNS1="213.158.0.3"	# DNS-провайдера
DNS2="213.158.0.6"

/bin/echo 1 > /proc/sys/net/ipv4/ip_forward	#ядро должно знать что оно может продвигать пакеты
/bin/echo 1 > /proc/sys/net/ipv4/ip_dynaddr


#######################################################################################################
# Созданеи цепочек фильтрации пакетов
#######################################################################################################

#default_settings
#Сброс и устновка правил по умолчанию
	$IPTABLES -F
	$IPTABLES -X
	$IPTABLES -t nat -F
	$IPTABLES -t mangle -F

	$IPTABLES -P INPUT $POLICY
	$IPTABLES -P FORWARD $POLICY
	$IPTABLES -P OUTPUT $POLICY


#common-check
#Базовая проверка пакетов
	$IPTABLES -N common-check
	$IPTABLES -F common-check

	# Отбрасываем невалидные пакты
	$IPTABLES -A common-check -m state --state INVALID -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
	$IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
	$IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP


#ssh-in
#Правила для входящего ssh
	$IPTABLES -N ssh-in
	$IPTABLES -F ssh-in

	$IPTABLES -A ssh-in -p tcp --dport 22 -j ACCEPT

	$IPTABLES -A ssh-in -m limit --limit 3/minute -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT
	$IPTABLES -A ssh-in -m limit --limit 3/minute -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT
	$IPTABLES -A ssh-in -m limit --limit 3/minute -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT

	$IPTABLES -A ssh-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT


#lan-in
#Правила для входящего трафика с внутренней сети
	$IPTABLES -N lan-in
	$IPTABLES -F lan-in

	$IPTABLES -A lan-in -j ACCEPT # можно всё :)


#icmp_in
#Входящие icmp запросы (пинг etc)
	$IPTABLES -N icmp_in
	$IPTABLES -F icmp_in

	$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
	$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
	$IPTABLES -A icmp_in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT


#icmp-out
#Исходящие icmp запросы (пинг etc)
	$IPTABLES -N icmp-out
	$IPTABLES -F icmp-out

	# Разрешаем icmp-reply во все сети в ответ на icmp-request'ы с сетей
	$IPTABLES -A icmp-out -p icmp --icmp-type 8 -j ACCEPT
	$IPTABLES -A icmp-out -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
	$IPTABLES -A icmp-out -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT


#statefull
#Разрешает пакеты с уже установленный соединений
	$IPTABLES -N statefull
	$IPTABLES -F statefull

	$IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT


#######################################################################################################
# Распределение пакетов по цепочкам
#######################################################################################################

#input
#Задание правил для входящего траффика
	# Проверяем пакеты.
	$IPTABLES -A INPUT -j common-check
	# Переправляем входящие по SSH
	$IPTABLES -A INPUT -p tcp --dport 22 -j ssh-in
	# Переправляем входящие соединения с локалки
	$IPTABLES -A INPUT -s $LAN -j lan-in
	# Переправляем входящие по icmp
	$IPTABLES -A INPUT -p icmp -j icmp_in
	# Переправляем входящие на петлю, при его включении заметно улучшение отклика при ssh-авторизации
	$IPTABLES -A INPUT -i $LO_IF -d $LOOPBACK -j ACCEPT
	# Ну, и разрешаем statefull-пекеты.
	$IPTABLES -A INPUT -j statefull

#output
#Задание правил для исходящего траффика
	$IPTABLES -A OUTPUT -j common-check
	$IPTABLES -A OUTPUT -s $LAN -j ACCEPT
	$IPTABLES -A OUTPUT -p icmp -j icmp-out
	$IPTABLES -A OUTPUT -o $LO_IF -j ACCEPT
	$IPTABLES -A OUTPUT -o $WAN1_IF -j ACCEPT
	$IPTABLES -A OUTPUT -j statefull

#forward
#Задание правил для сквазного траффика, нужно когда ваща машина распределяет инет по внутренней сети
	# Отбрасываем плохие пакеты
	$IPTABLES -A FORWARD -j common-check
	# Разрешаем весь исходящий трафик с локалки
	$IPTABLES -A FORWARD -s $LAN -j ACCEPT
	# Разрешаем входящие пакеты, являющиеся частью установленного соединения
	$IPTABLES -A FORWARD -j statefull
	#prerouting
	$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
	#postrouting
	$IPTABLES -t nat -A POSTROUTING -o $WAN1_IF -j MASQUERADE

а вот вместо echo

а вот вместо echo 1 >> нужно использовать /etc/sysctl.conf

имхо

использование такого метода - дыра в маршрутизаторе, все равно считаю лучше ставить еденицу только тогд акогда она там действительно нужна. в процедуре останова фаера я указываю 0 >> , ибо на практике знаю что правила сбрасываются, а пересылка пакетов остается, и считаю это излишнем в плане безопасности, во как завернул :-)

а что это за

а что это за "процедура останова фаера"?
/etc/init.d/iptables stop кто-то уже отменил?
а если ты воспользуешся этой командой - то правил разрешающих пересылку небудет, как и самой пересылки.
да и зачем его отключать?

процедурка

дык так и делаю инит-скрипте есть такая, у меня так выглядит
stop() {
ebegin "Stopping firewall"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -P INPUT $POLICY
$IPTABLES -P FORWARD $POLICY
$IPTABLES -P OUTPUT $POLICY
echo "0" > /proc/sys/net/ipv4/ip_forward
eend $?
}

вобще я параноик...

А как прописать

А как прописать правила iptables для dc++?
Прописал

iptables -A OUTPUT -p tcp --dport 411 -j ACCEPT 
iptables -A INPUT -p tcp --dport 9176 -j ACCEPT 
iptables -A INPUT -p udp --dport 9176 -j ACCEPT 
iptables -A OUTPUT -p tcp --sport 9176 -j ACCEPT 
iptables -A OUTPUT -p udp --sport 9176 -j ACCEPT 

Соединяется нормально и даже скачивает. НО не работает поиск файлов :(
Как он осуществляется? что надо прописать?

Надо

Надо ESTABLISHED,RELATED пакеты разрешить

.

MrSmith написал(а):
Не совсем: пробелы нельзя :)

не понял

Eveler написал(а):
Надо ESTABLISHED,RELATED пакеты разрешить

они разрешены
(раньше стоят правила)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Тогда

Тогда логируйте DROPED/REJECTED пакеты, запускайте DC++ на поиск, и смотрите, что там куда не пускает

.

Eveler написал(а):
Тогда логируйте DROPED/REJECTED пакеты, запускайте DC++ на поиск, и смотрите, что там куда не пускает

У меня политика DROP, а правила только разрешающие, т.е. поиск dc++ попадает под политику. Пробую логировать все пакеты (они есть, список внушительный), но в логах не пишется какое действие было предпринято по отношению к данному пакету.

Как логировать пакеты, которые дропаются политикой, а не правилами?

Добавлено:
В конец всех правил добавить?

iptables -A INPUT -j LOG --log-ip-options --log-tcp-options --log-prefix "INPUT DROP policy packets "
iptables -A OUTPUT -j LOG --log-ip-options --log-tcp-options --log-prefix "OUTPUT DROP policy packets "

тока что-то оно

тока что-то оно не логирует ничего, а поиск продолжает не работать

Нет. В начало.

Нет. В начало. Цепочки просматриваются по порядку и сравнение останавливается при первом совпадении, если там управляющее правило (accept,drop,forward etc)! Это очень важный нюанс. Внимательно читайте документацию.
Я делал так (в самом начале):

$IPT -N DROPl
$IPT -A DROPl -j LOG --log-prefix 'firewall drop: '
$IPT -A DROPl -j DROP
$IPT -P INPUT DROPl

Или можно после всех правил:

$IPT -A INPUT -j DROPl
$IPT -A OUTPUT -j DROPl
$IPT -A FORWARD -j DROPl

Да, да я это

Да, да я это понимаю.
Я думал так, правила у меня пропускающие, следовательно то, что дропается проходит через них (не соответствует ни одно му из них) и встречает правило LOG (далее сбрасывается - применяется политика).

Пробую твой пример ($IPT заменено iptables):

$IPT -N DROPl
$IPT -A DROPl -j LOG --log-prefix 'firewall drop: '
$IPT -A DROPl -j DROP
$IPT -P INPUT DROPl

пишет

iptables: Bad policy name

А вот втрой пример сработал.

$IPT -A INPUT -j DROPl
$IPT -A OUTPUT -j DROPl
$IPT -A FORWARD -j DROPl

Спасибо.

Вот у меня

sspphheerraa написал(а):
А как прописать правила iptables для dc++?

Соединяется нормально и даже скачивает. НО не работает поиск файлов :(
Как он осуществляется? что надо прописать?

Вот у меня с такими правилами всё работает как надо.

        /sbin/iptables -A OUTPUT -p tcp --dport :411 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp --dport :9176 -j ACCEPT
        /sbin/iptables -A INPUT -p udp --dport :9176 -j ACCEPT
        /sbin/iptables -A OUTPUT -p tcp --sport :9176 -j ACCEPT
        /sbin/iptables -A OUTPUT -p udp --sport :9176 -j ACCEPT
        /sbin/iptables -A INPUT -p tcp --sport :19176  -j ACCEPT

А вот таких правил нет.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Если что, есть

Если что, есть команда такая - sysctl. Используй в скрипте в любом месте. Синтаксис - как в файле /etc/sysctl.conf.
_______________________
From Siberia with Love!

Не совсем:

Не совсем: пробелы нельзя :)

А что нужно добавить в

А что нужно добавить в правила http://www.gentoo.org/doc/ru/home-router-howto.xml чтобы открыть порты для Samba?

Глянь

спасибо за новодку, нашел

спасибо за новодку, нашел правила для samba
http://linuxforum.ru/index.php?showtopic=9454&st=90
Но, когда ввожу все правила остаются открытыми только три порта:

Starting Nmap 4.76 ( http://nmap.org ) at 2008-10-26 17:15 EET
Interesting ports on localhost (127.0.0.1):
Not shown: 997 closed ports
PORT STATE SERVICE
111/tcp open rpcbind
631/tcp open ipp
901/tcp open samba-swat

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds

Понимаю, что вопрос может быть не в той ветке, но все же....

Понимаю, что вопрос может быть не в той ветке, но все же....

Вот мой конфиг iptables

#!/bin/bash

#MAIN
IPT=/sbin/iptables

FILTER_INPUT_TCP_DPORTS="22,80,1024:65535"
FILTER_INPUT_TCP_SPORTS="0"
FILTER_INPUT_TCP_NEW_LIMIT_VALUE="5/sec"
FILTER_INPUT_TCP_NEW_LIMIT_BURST="10"
FILTER_INPUT_UDP_DPORTS="68,3757"
FILTER_INPUT_UDP_SPORTS="0"
FILTER_INPUT_UDP_NEW_LIMIT_VALUE="5/sec"
FILTER_INPUT_UDP_NEW_LIMIT_BURST="10"
FILTER_INPUT_ICMP_LIMIT_VALUE="5/sec"
FILTER_INPUT_ICMP_LIMIT_BURST="10"

FILTER_OUTPUT_TCP_DPORTS="21,80,873,1024:65535"
FILTER_OUTPUT_TCP_SPORTS="15806"
FILTER_OUTPUT_TCP_NEW_LIMIT_VALUE="10/sec"
FILTER_OUTPUT_TCP_NEW_LIMIT_BURST="100"
FILTER_OUTPUT_UDP_DPORTS="53,123,1024:65535"
FILTER_OUTPUT_UDP_SPORTS="68,3757"
FILTER_OUTPUT_UDP_NEW_LIMIT_VALUE="10/sec"
FILTER_OUTPUT_UDP_NEW_LIMIT_BURST="100"
FILTER_OUTPUT_ICMP_LIMIT_VALUE="10/sec"
FILTER_OUTPUT_ICMP_LIMIT_BURST="100"
#/MAIN

#FILTER
$IPT -t filter -F
$IPT -t filter -X

#FILTER_INPUT
$IPT -t filter -P INPUT ACCEPT
FILTER_INPUT="$IPT -t filter -A INPUT"

$IPT -N FILTER_INPUT_TCP
$IPT -N FILTER_INPUT_UDP
$IPT -N FILTER_INPUT_ICMP

$FILTER_INPUT -p tcp -j FILTER_INPUT_TCP
$FILTER_INPUT -p udp -j FILTER_INPUT_UDP
$FILTER_INPUT -p icmp -j FILTER_INPUT_ICMP
#FILTER_INPUT_TCP
FILTER_INPUT_TCP="$IPT -t filter -A FILTER_INPUT_TCP -p tcp"

$IPT -t filter -N FILTER_INPUT_TCP_NEW
$IPT -t filter -N FILTER_INPUT_TCP_ESTABLISHED
$IPT -t filter -N FILTER_INPUT_TCP_RELATED
$IPT -t filter -N FILTER_INPUT_TCP_INVALID

$FILTER_INPUT_TCP -m state --state NEW -j FILTER_INPUT_TCP_NEW
$FILTER_INPUT_TCP -m state --state ESTABLISHED -j FILTER_INPUT_TCP_ESTABLISHED
$FILTER_INPUT_TCP -m state --state RELATED -j FILTER_INPUT_TCP_RELATED
$FILTER_INPUT_TCP -m state --state INVALID -j FILTER_INPUT_TCP_INVALID
#FILTER_INPUT_TCP_NEW
FILTER_INPUT_TCP_NEW="$IPT -t filter -A FILTER_INPUT_TCP_NEW -p tcp"

$IPT -t filter -N FILTER_INPUT_TCP_NEW_LIMIT

$FILTER_INPUT_TCP_NEW -j FILTER_INPUT_TCP_NEW_LIMIT
$FILTER_INPUT_TCP_NEW -m multiport --destination-port $FILTER_INPUT_TCP_DPORTS --tcp-flags ALL SYN -j RETURN
$FILTER_INPUT_TCP_NEW -m multiport --source-port $FILTER_INPUT_TCP_SPORTS --tcp-flags ALL SYN -j RETURN
$FILTER_INPUT_TCP_NEW -j LOG --log-level info --log-prefix "IPT FITN " --log-tcp-options --log-ip-options
$FILTER_INPUT_TCP_NEW -j REJECT --reject-with tcp-reset
#FILTER_INPUT_TCP_NEW_LIMIT
FILTER_INPUT_TCP_NEW_LIMIT="$IPT -t filter -A FILTER_INPUT_TCP_NEW_LIMIT -p tcp"

$FILTER_INPUT_TCP_NEW_LIMIT -m limit --limit $FILTER_INPUT_TCP_NEW_LIMIT_VALUE --limit-burst $FILTER_INPUT_TCP_NEW_LIMIT_BURST -j RETURN
$FILTER_INPUT_TCP_NEW_LIMIT -j LOG --log-level info --log-prefix "IPT FITNL " --log-tcp-options --log-ip-options
$FILTER_INPUT_TCP_NEW_LIMIT -j REJECT --reject-with icmp-port-unreachable
#/FILTER_INPUT_TCP_NEW_LIMIT
#/FILTER_INPUT_TCP_NEW
#FILTER_INPUT_TCP_ESTABLISHED
FILTER_INPUT_TCP_ESTABLISHED="$IPT -t filter -A FILTER_INPUT_TCP_ESTABLISHED -p tcp"

$FILTER_INPUT_TCP_ESTABLISHED -j RETURN
$FILTER_INPUT_TCP_ESTABLISHED -j LOG --log-level info --log-prefix "IPT FITE " --log-tcp-options --log-ip-options
$FILTER_INPUT_TCP_ESTABLISHED -j REJECT --reject-with tcp-reset
#/FILTER_INPUT_TCP_ESTABLISHED
#FILTER_INPUT_TCP_RELATED
FILTER_INPUT_TCP_RELATED="$IPT -t filter -A FILTER_INPUT_TCP_RELATED -p tcp"

$FILTER_INPUT_TCP_RELATED -j RETURN
$FILTER_INPUT_TCP_RELATED -j LOG --log-level info --log-prefix "IPT FITR " --log-tcp-options --log-ip-options
$FILTER_INPUT_TCP_RELATED -j REJECT --reject-with tcp-reset
#/FILTER_INPUT_TCP_RELATED
#FILTER_INPUT_TCP_INVALID
FILTER_INPUT_TCP_INVALID="$IPT -t filter -A FILTER_INPUT_TCP_INVALID -p tcp"

$FILTER_INPUT_TCP_INVALID --tcp-flags ALL RST -j RETURN
$FILTER_INPUT_TCP_INVALID --tcp-flags ALL FIN,ACK -j RETURN
$FILTER_INPUT_TCP_INVALID -j LOG --log-level info --log-prefix "IPT FITI " --log-tcp-options --log-ip-options
$FILTER_INPUT_TCP_INVALID -j REJECT --reject-with tcp-reset
#/FILTER_INPUT TCP_INVALID
#/FILTER_INPUT_TCP
#FILTER_INPUT_UDP
FILTER_INPUT_UDP="$IPT -t filter -A FILTER_INPUT_UDP -p udp"

$IPT -N FILTER_INPUT_UDP_NEW
$IPT -N FILTER_INPUT_UDP_ESTABLISHED
$IPT -N FILTER_INPUT_UDP_RELATED
$IPT -N FILTER_INPUT_UDP_INVALID

$FILTER_INPUT_UDP -m state --state NEW -j FILTER_INPUT_UDP_NEW
$FILTER_INPUT_UDP -m state --state ESTABLISHED -j FILTER_INPUT_UDP_ESTABLISHED
$FILTER_INPUT_UDP -m state --state RELATED -j FILTER_INPUT_UDP_RELATED
$FILTER_INPUT_UDP -m state --state INVALID -j FILTER_INPUT_UDP_INVALID
#FILTER_INPUT_UDP_NEW
FILTER_INPUT_UDP_NEW="$IPT -t filter -A FILTER_INPUT_UDP_NEW -p udp"

$IPT -t filter -N FILTER_INPUT_UDP_NEW_LIMIT

$FILTER_INPUT_UDP_NEW -j FILTER_INPUT_UDP_NEW_LIMIT
$FILTER_INPUT_UDP_NEW -m multiport --destination-port $FILTER_INPUT_UDP_DPORTS -j RETURN
$FILTER_INPUT_UDP_NEW -m multiport --source-port $FILTER_INPUT_UDP_SPORTS -j RETURN
$FILTER_INPUT_UDP_NEW -j LOG --log-level info --log-prefix "IPT FIUN " --log-ip-options
$FILTER_INPUT_UDP_NEW -j REJECT --reject-with icmp-port-unreachable
#FILTER_INPUT_UDP_NEW_LIMIT
FILTER_INPUT_UDP_NEW_LIMIT="$IPT -t filter -A FILTER_INPUT_UDP_NEW_LIMIT -p udp"

$FILTER_INPUT_UDP_NEW_LIMIT -m limit --limit $FILTER_INPUT_UDP_NEW_LIMIT_VALUE --limit-burst $FILTER_INPUT_UDP_NEW_LIMIT_BURST -j RETURN
$FILTER_INPUT_UDP_NEW_LIMIT -j LOG --log-level info --log-prefix "IPT FIUNL " --log-ip-options
$FILTER_INPUT_UDP_NEW_LIMIT -j REJECT --reject-with icmp-port-unreachable
#/FILTER_INPUT_TCP_NEW_LIMIT
#/FILTER_INPUT_UDP_NEW
#FILTER_INPUT_UDP_ESTABLISHED
FILTER_INPUT_UDP_ESTABLISHED="$IPT -t filter -A FILTER_INPUT_UDP_ESTABLISHED -p udp"

$FILTER_INPUT_UDP_ESTABLISHED -j RETURN
$FILTER_INPUT_UDP_ESTABLISHED -j LOG --log-level info --log-prefix "IPT FIUE " --log-ip-options
$FILTER_INPUT_UDP_ESTABLISHED -j REJECT --reject-with icmp-port-unreachable
#/FILTER_INPUT_UDP_ESTABLISHED
#FILTER_INPUT_UDP_RELATED
FILTER_INPUT_UDP_RELATED="$IPT -t filter -A FILTER_INPUT_UDP_RELATED -p udp"

$FILTER_INPUT_UDP_RELATED -j LOG --log-level info --log-prefix "IPT FIUR " --log-ip-options
$FILTER_INPUT_UDP_RELATED -j REJECT --reject-with icmp-port-unreachable
#/FILTER_INPUT_UDP_RELATED
#FILTER_INPUT_UDP_INVALID
FILTER_INPUT_UDP_INVALID="$IPT -t filter -A FILTER_INPUT_UDP_INVALID -p udp"

$FILTER_INPUT_UDP_INVALID -j LOG --log-level info --log-prefix "IPT FIUI " --log-ip-options
$FILTER_INPUT_UDP_INVALID -j REJECT --reject-with icmp-port-unreachable
#/FILTER_INPUT_UDP_INVALID
#/FILTER_INPUT_UDP
#FILTER_INPUT_ICMP
FILTER_INPUT_ICMP="$IPT -t filter -A FILTER_INPUT_ICMP -p icmp"

$IPT -N FILTER_INPUT_ICMP_LIMIT

$FILTER_INPUT_ICMP -j FILTER_INPUT_ICMP_LIMIT
$FILTER_INPUT_ICMP --icmp-type 0 -j RETURN
$FILTER_INPUT_ICMP --icmp-type 3 -j RETURN
$FILTER_INPUT_ICMP --icmp-type 8 -j RETURN
$FILTER_INPUT_ICMP --icmp-type 11 -j RETURN
$FILTER_INPUT_ICMP -j LOG --log-level info --log-prefix "IPT FII " --log-ip-options
$FILTER_INPUT_ICMP -j DROP
#FILTER_INPUT_ICMP_LIMIT
FILTER_INPUT_ICMP_LIMIT="$IPT -A FILTER_INPUT_ICMP_LIMIT -p icmp"

$FILTER_INPUT_ICMP_LIMIT -m limit --limit $FILTER_INPUT_ICMP_LIMIT_VALUE --limit-burst $FILTER_INPUT_ICMP_LIMIT_BURST -j RETURN
$FILTER_INPUT_ICMP_LIMIT -j LOG --log-level info --log-prefix "IPT FIIL " --log-ip-options
$FILTER_INPUT_ICMP_LIMIT -j DROP
#/FILTER_INPUT_ICMP_LIMIT
#/FILTER_INPUT_ICMP
#/FILTER_INPUT
#FILTER_OUTPUT
$IPT -t filter -P OUTPUT ACCEPT
FILTER_OUTPUT="$IPT -t filter -A OUTPUT"

$IPT -N FILTER_OUTPUT_TCP
$IPT -N FILTER_OUTPUT_UDP
$IPT -N FILTER_OUTPUT_ICMP

$FILTER_OUTPUT -p tcp -j FILTER_OUTPUT_TCP
$FILTER_OUTPUT -p udp -j FILTER_OUTPUT_UDP
$FILTER_OUTPUT -p icmp -j FILTER_OUTPUT_ICMP
#FILTER_OUTPUT_TCP
FILTER_OUTPUT_TCP="$IPT -t filter -A FILTER_OUTPUT_TCP -p tcp"

$IPT -t filter -N FILTER_OUTPUT_TCP_NEW
$IPT -t filter -N FILTER_OUTPUT_TCP_ESTABLISHED
$IPT -t filter -N FILTER_OUTPUT_TCP_RELATED
$IPT -t filter -N FILTER_OUTPUT_TCP_INVALID

$FILTER_OUTPUT_TCP -m state --state NEW -j FILTER_OUTPUT_TCP_NEW
$FILTER_OUTPUT_TCP -m state --state ESTABLISHED -j FILTER_OUTPUT_TCP_ESTABLISHED
$FILTER_OUTPUT_TCP -m state --state RELATED -j FILTER_OUTPUT_TCP_RELATED
$FILTER_OUTPUT_TCP -m state --state INVALID -j FILTER_OUTPUT_TCP_INVALID
#FILTER_OUTPUT_TCP_NEW
FILTER_OUTPUT_TCP_NEW="$IPT -t filter -A FILTER_OUTPUT_TCP_NEW -p tcp"

$IPT -t filter -N FILTER_OUTPUT_TCP_NEW_LIMIT

$FILTER_OUTPUT_TCP_NEW -j FILTER_OUTPUT_TCP_NEW_LIMIT
$FILTER_OUTPUT_TCP_NEW -m multiport --destination-port $FILTER_OUTPUT_TCP_DPORTS --tcp-flags ALL SYN  -j RETURN
$FILTER_OUTPUT_TCP_NEW -m multiport --source-port $FILTER_OUTPUT_TCP_SPORTS --tcp-flags ALL SYN  -j RETURN
$FILTER_OUTPUT_TCP_NEW -j LOG --log-level info --log-prefix "IPT FOTN " --log-tcp-options --log-ip-options
$FILTER_OUTPUT_TCP_NEW -j REJECT --reject-with icmp-port-unreachable
#FILTER_OUTPUT_TCP_NEW_LIMIT
FILTER_OUTPUT_TCP_NEW_LIMIT="$IPT -t filter -A FILTER_OUTPUT_TCP_NEW_LIMIT -p udp"

$FILTER_OUTPUT_TCP_NEW_LIMIT -m limit --limit $FILTER_OUTPUT_TCP_NEW_LIMIT_VALUE --limit-burst $FILTER_OUTPUT_TCP_NEW_LIMIT_BURST -j RETURN
$FILTER_OUTPUT_TCP_NEW_LIMIT -j LOG --log-level info --log-prefix "IPT FOTNL " --log-tcp-options --log-ip-options
$FILTER_OUTPUT_TCP_NEW_LIMIT -j REJECT --reject-with icmp-port-unreachable
#/FILTER_OUTPUT_TCP_NEW_LIMIT
#/FILTER_OUTPUT_TCP_NEW
#FILTER_OUTPUT_TCP_ESTABLISHED
FILTER_OUTPUT_TCP_ESTABLISHED="$IPT -t filter -A FILTER_OUTPUT_TCP_ESTABLISHED -p tcp"

$FILTER_OUTPUT_TCP_ESTABLISHED -j RETURN
$FILTER_OUTPUT_TCP_ESTABLISHED -j LOG --log-level info --log-prefix "IPT FOTE " --log-tcp-options --log-ip-options
$FILTER_OUTPUT_TCP_ESTABLISHED -j REJECT --reject-with tcp-reset
#/FILTER_OUTPUT_TCP_ESTABLISHED
#FILTER_OUTPUT_TCP_RELATED
FILTER_OUTPUT_TCP_RELATED="$IPT -t filter -A FILTER_OUTPUT_TCP_RELATED -p tcp"

$FILTER_OUTPUT_TCP_RELATED -j RETURN
$FILTER_OUTPUT_TCP_RELATED -j LOG --log-level info --log-prefix "IPT FOTR " --log-tcp-options --log-ip-options
$FILTER_OUTPUT_TCP_RELATED -j REJECT --reject-with tcp-reset
#/FILTER_OUTPUT_TCP_RELATED
#FILTER_OUTPUT_TCP_INVALID
FILTER_OUTPUT_TCP_INVALID="$IPT -t filter -A FILTER_OUTPUT_TCP_INVALID -p tcp"

$FILTER_OUTPUT_TCP_INVALID --tcp-flags ALL RST -j RETURN
$FILTER_OUTPUT_TCP_INVALID --tcp-flags ALL FIN,ACK -j RETURN
$FILTER_OUTPUT_TCP_INVALID -j LOG --log-level info --log-prefix "IPT FOTI " --log-tcp-options --log-ip-options
$FILTER_OUTPUT_TCP_INVALID -j REJECT --reject-with tcp-reset
#/FILTER_OUTPUT TCP_INVALID
#/FILTER_OUTPUT_TCP
#FILTER_OUTPUT_UDP
FILTER_OUTPUT_UDP="$IPT -t filter -A FILTER_OUTPUT_UDP -p udp"

$IPT -N FILTER_OUTPUT_UDP_NEW
$IPT -N FILTER_OUTPUT_UDP_ESTABLISHED
$IPT -N FILTER_OUTPUT_UDP_RELATED
$IPT -N FILTER_OUTPUT_UDP_INVALID

$FILTER_OUTPUT_UDP -m state --state NEW -j FILTER_OUTPUT_UDP_NEW
$FILTER_OUTPUT_UDP -m state --state ESTABLISHED -j FILTER_OUTPUT_UDP_ESTABLISHED
$FILTER_OUTPUT_UDP -m state --state RELATED -j FILTER_OUTPUT_UDP_RELATED
$FILTER_OUTPUT_UDP -m state --state INVALID -j FILTER_OUTPUT_UDP_INVALID
#FILTER_OUTPUT_UDP_NEW
FILTER_OUTPUT_UDP_NEW="$IPT -t filter -A FILTER_OUTPUT_UDP_NEW -p udp"

$IPT -t filter -N FILTER_OUTPUT_UDP_NEW_LIMIT

$FILTER_OUTPUT_UDP_NEW -j FILTER_OUTPUT_UDP_NEW_LIMIT
$FILTER_OUTPUT_UDP_NEW -m multiport --destination-port $FILTER_OUTPUT_UDP_DPORTS -j RETURN
$FILTER_OUTPUT_UDP_NEW -m multiport --source-port $FILTER_OUTPUT_UDP_SPORTS -j RETURN
$FILTER_OUTPUT_UDP_NEW -j LOG --log-level info --log-prefix "IPT FOUN " --log-ip-options
$FILTER_OUTPUT_UDP_NEW -j REJECT --reject-with icmp-port-unreachable
#FILTER_OUTPUT_UDP_NEW_LIMIT
FILTER_OUTPUT_UDP_NEW_LIMIT="$IPT -t filter -A FILTER_OUTPUT_UDP_NEW_LIMIT -p udp"

$FILTER_OUTPUT_UDP_NEW_LIMIT -m limit --limit $FILTER_OUTPUT_UDP_NEW_LIMIT_VALUE --limit-burst $FILTER_OUTPUT_UDP_NEW_LIMIT_BURST -j RETURN
$FILTER_OUTPUT_UDP_NEW_LIMIT -j LOG --log-level info --log-prefix "IPT FOUNL " --log-ip-options
$FILTER_OUTPUT_UDP_NEW_LIMIT -j REJECT --reject-with icmp-port-unreachable
#/FILTER_OUTPUT_UDP_NEW_LIMIT
#/FILTER_OUTPUT_UDP_NEW
#FILTER_OUTPUT_UDP_ESTABLISHED
FILTER_OUTPUT_UDP_ESTABLISHED="$IPT -t filter -A FILTER_OUTPUT_UDP_ESTABLISHED -p udp"

$FILTER_OUTPUT_UDP_ESTABLISHED -j RETURN
$FILTER_OUTPUT_UDP_ESTABLISHED -j LOG --log-level info --log-prefix "IPT FOUE " --log-ip-options
$FILTER_OUTPUT_UDP_ESTABLISHED -j REJECT --reject-with icmp-port-unreachable
#/FILTER_OUTPUT_UDP_ESTABLISHED
#FILTER_OUTPUT_UDP_RELATED
FILTER_OUTPUT_UDP_RELATED="$IPT -t filter -A FILTER_OUTPUT_UDP_RELATED -p udp"

$FILTER_OUTPUT_UDP_RELATED -j LOG --log-level info --log-prefix "IPT FOUR " --log-ip-options
$FILTER_OUTPUT_UDP_RELATED -j REJECT --reject-with icmp-port-unreachable
#/FILTER_OUTPUT_UDP_RELATED
#FILTER_OUTPUT_UDP_INVALID
FILTER_OUTPUT_UDP_INVALID="$IPT -t filter -A FILTER_OUTPUT_UDP_INVALID -p udp"

$FILTER_OUTPUT_UDP_INVALID -j LOG --log-level info --log-prefix "IPT FOUI " --log-ip-options
$FILTER_OUTPUT_UDP_INVALID -j REJECT --reject-with icmp-port-unreachable
#/FILTER_OUTPUT_UDP_INVALID
#/FILTER_OUTPUT_UDP
#FILTER_OUTPUT_ICMP
FILTER_OUTPUT_ICMP="$IPT -t filter -A FILTER_OUTPUT_ICMP -p icmp"

$IPT -N FILTER_OUTPUT_ICMP_LIMIT

$FILTER_OUTPUT_ICMP -j FILTER_OUTPUT_ICMP_LIMIT
$FILTER_OUTPUT_ICMP -j RETURN
$FILTER_OUTPUT_ICMP -j LOG --log-level info --log-prefix "IPT FOI " --log-ip-options
$FILTER_OUTPUT_ICMP -j DROP
#FILTER_OUTPUT_ICMP_LIMIT
FILTER_OUTPUT_ICMP_LIMIT="$IPT -A FILTER_OUTPUT_ICMP_LIMIT -p icmp"

$FILTER_OUTPUT_ICMP_LIMIT -m limit --limit $FILTER_OUTPUT_ICMP_LIMIT_VALUE --limit-burst $FILTER_OUTPUT_ICMP_LIMIT_BURST -j RETURN
$FILTER_OUTPUT_ICMP_LIMIT -j LOG --log-level info --log-prefix "IPT FOIL " --log-ip-options
$FILTER_OUTPUT_ICMP_LIMIT -j DROP
#/FILTER_INPUT_ICMP_LIMIT
#/FILTER_OUTPUT_ICMP
#/FILTER_OUTPUT
#FILTER_FORWARD
$IPT -t filter -P FORWARD DROP
#/FILTER_FORWARD
#/FILTER
#MANGLE
$IPT -t mangle -F
$IPT -t mangle -X
#/MANGLE
#NAT
$IPT -t nat -F
$IPT -t nat -X
#/NAT

Конфиг еще очень сырой, но сейчас нет времени дописывать (((

Вопрос собственно в следующем:

Считается ли ответный ACK пакет при установке TCP соединения, как ESTABLISHED, или нет?

судя по картинке

(взято с opennet.ru) ответный ACK должен рассматриваться как ESTABLISHED, но перед картинкой написано:

Цитата:
TCP соединение всегда устанавливается передачей трех пакетов, которые инициализируют и устанавливают соединение, через которое в дальнейшем будут передаваться данные. Сессия начинается с передачи SYN пакета, в ответ на который передается SYN/ACK пакет и подтверждает установление соединения пакет ACK. После этого соединение считается установленным и готовым к передаче данных.

Т.е. ответный ACK - это еще NEW

То же самое нашел тут :

Цитата:
TCP/IP является протоколом, в котором соединение устанавливается в 3 фазы. Если компьютер А пытается установить соединение с компьютером Б они обмениваются специальными TCP пакетами.
A: SYN пакет (првыед Б!)
Б: ACK пакет, SYN пакет (Ога!, как оно?)
A: ACK пакет (дык, ничего)

После чего соединение считается установленным (ESTABLISHED).

Проблема в том, что в лог падают входящие соединения к mldonkey

Например:

Цитата:
Jan 11 11:37:41 blow IPT FITN IN=eth0 OUT= MAC=00:0e:2e:95:c1:73:00:1b:11:77:99:61:08:00 SRC=217.10.38.211 DST=192.168.1.2 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=36862 DF PROTO=TCP SPT=61943 DPT=15806 WINDOW=1024 RES=0x00 ACK URGP=0

Явно видно, что отклоняется в правиле FILTER_INPUT_TCP_NEW (FITN) из-за ACK

Вот такая вот непонятка выходит (((

Либо это действительно удаленный сервер пытается подключиться без начального SYN

Никто не сталкивался?

P.S.

Только что просмотрел логи и нашел запись:

Цитата:
Jan 11 12:30:14 blow IPT FOTN IN= OUT=eth0 SRC=192.168.1.2 DST=79.179.108.116 LEN=52 TOS=0x08 PREC=0x00 TTL=64 ID=29089 DF PROTO=TCP SPT=33244 DPT=4662 WINDOW=183 RES=0x00 ACK URGP=0 OPT (0101080A000B307A003DD478)

Т.е. с моего компьютер точно так же идут ACK пакеты как NEW. и таких записей не одна/две, но добавляются явно не при каждом новом соединении (((

Много букв конечно, но

Много букв конечно, но:
$FILTER_INPUT_TCP_NEW -m multiport --destination-port $FILTER_INPUT_TCP_DPORTS --tcp-flags ALL SYN -j RETURN, т.е. пакеты только с единственным SYN пропускаются. Второй шаг и пакет с ACK отбрасывается. Почему не каждое соединение затрудняюсь сказать, непонятно даже про какой протокол речь идет - осел? Мало ли, может оно частично по UDP работает ;P

Хотя нет. Сейчас проверил ACK

Хотя нет. Сейчас проверил ACK пакеты на стадии согласования уже в состоянии ESTABLISHED. Да и как написано в описании iptables в состоянии NEW находятся пакеты, которые не связанны с соединенем в обе стороны. Как я понимаю при входящем TCP ответный SYN ACK пакет от тоже уже будет в состоянии ESTABLISHED, т.к. часто в примерах скриптов встречается такая конструкция для защиты от SYN флуда:
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

Да вот в том и проблема....

Storm написал(а):
Хотя нет. Сейчас проверил ACK пакеты на стадии согласования уже в состоянии ESTABLISHED. Да и как написано в описании iptables в состоянии NEW находятся пакеты, которые не связанны с соединенем в обе стороны. Как я понимаю при входящем TCP ответный SYN ACK пакет от тоже уже будет в состоянии ESTABLISHED, т.к. часто в примерах скриптов встречается такая конструкция для защиты от SYN флуда:
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

Да вот в том и проблема, что исходящие (ответные) SYN/ACK файрвол нормально пропускает, в логах я их не вижу.

А вот попадающие под правило -m state --state=NEW пакеты с установленным ACK (единственным) правилом - для меня загадка.

И если посмотреть на правило защиты от SYN флуда, которое ты привел, опять таки подтверждается мысль, что iptables этот входящий (ответный) ACK считает как NEW, ведь это правлило отбрасывает те пакеты, в которых установлены оба флага и SYN и ACK, помеченные как NEW

Т.е. получается, что это нормально (то, что ответный ACK - это NEW) и мне стоит точно так же отбрасывать пакеты с SYN и ACK и не заморачиваться???? Ну не зря же для проверки NEW очень часто стоит процитированное правило!

p.s.
Протокол TCP

Да, на самом деле в mldonkey часть соединений идет через UDP, но для iptables это же совершенно разные соединения )))

А зачем эта заморочка на

А зачем эта заморочка на домашнем компе - проще комп за роутером поставить

Наоборот..

TheMixa написал(а):
А зачем эта заморочка на домашнем компе - проще комп за роутером поставить

Наоборот, ни каких заморочек настроил и оно рабоатет. А роутер мало того что скорость урезает, да и ещё для другого дела предназначен и для одной машины он совершенно ни к чему. Если действительно нужен роутер то тогда лучше взять какой нибудь старый залежалый компьютер, и зделать его роутером. И мы ведь не ищем лёгких путей.

Ты в терминах хотя бы

Ты в терминах хотя бы разберись для начала, прежде чем такие советы давать.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".