URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5033
[ Назад ]

Исходное сообщение
"IPTABLES рубит пакеты завершения соединения"

Отправлено bgInner , 30-Апр-12 02:00 
Здравствуйте.
Дистрибутив Fedora 16 (russian remix), iptables установлены из дистрибутива
На ПЭВМ имеются адаптеры eth1 (смотрит в локалку), eth0 (IP-адрес 192.168.1.1, подключен к ADSL-модему, модем подключен к интернету).

Все пользователи локальной сети ходят в интернет через прокси-сервер Squid.

Периодически в «/var/log/messages» появляются следующие строки:

Apr 20 13:05:50 kernel: [249988.812792] IPT LOGDROP packet died: IN= OUT=eth0 SRC=192.168.1.1 DST=XXX.XXX.XXX.XXX LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=58776 DF PROTO=TCP SPT=44494 DPT=80 WINDOW=980 RES=0x00 ACK FIN URGP=0
Apr 20 13:05:50 kernel: [249989.065047] IPT LOGDROP packet died: IN= OUT=eth0 SRC=192.168.1.1 DST=XXX.XXX.XXX.XXX LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=58777 DF PROTO=TCP SPT=44494 DPT=80 WINDOW=980 RES=0x00 ACK PSH FIN URGP=0
Apr 20 13:05:50 kernel: [249989.572041] IPT LOGDROP packet died: IN= OUT=eth0 SRC=192.168.1.1 DST=XXX.XXX.XXX.XXX LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=58778 DF PROTO=TCP SPT=44494 DPT=80 WINDOW=980 RES=0x00 ACK PSH FIN URGP=0

Не могу понять: почему рубятся пакеты завершения соединения? Ведь, по логике, они должны рассматриваться как пакеты ESTABLISHED?

Вот кусок правил, относящихся к TCP-протоколу:

########################################
#адаптер, подключенный к ADSL-модему
INET_IFACE="eth0"    

# адаптер, подключенный к локальной сети
LAN_IFACE="eth1"

# LOOPBACK
LO_IFACE="lo"

#IP-адрес адаптера, подключенного к ADSL-модему
INET_IP=”192.168.1.1”

IPTABLES="/sbin/iptables"
       # set default policies

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# Create chain for packets to be logged and than dropped
$IPTABLES -N logdrop
$IPTABLES -A logdrop -j LOG -m limit --limit 3/minute --limit-burst 3 --log-level 7 --log-prefix "IPT LOGDROP packet died: "
$IPTABLES -A logdrop -j DROP

iptables -N bad_tcp_packets
iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "New packet without syn:"
iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -N tcp_packets_in
$IPTABLES -N tcp_packets_out

#
# TCP rules
#

# allow incoming to $LAN_IFACE requests from LAN,
# allow incoming replies from anywhere (from LAN and Internet)
$IPTABLES -A tcp_packets_in -p TCP -i $INET_IFACE -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A tcp_packets_in -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE -d $LAN_IP -m multiport --dports $SQUIDPORT,$SSHPORT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A tcp_packets_in -j logdrop

# allow outgoing requests to anywhere
# allow outgoing replies from squid to LAN users only

$IPTABLES -A tcp_packets_out -p TCP -o $INET_IFACE -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A tcp_packets_out -p TCP -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A tcp_packets_out -j logdrop

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -j tcp_packets_in
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT INPUT packet died: "

$IPTABLES -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -p TCP -j tcp_packets_out
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT OUTPUT packet died: "

########################################

P.S. Эти пакеты почему-то часто появляются, если я захожу на kp.ru или aif.ru.

Подскажите, пожалуйста, где я мог ошибиться?



Содержание

Сообщения в этом обсуждении
"IPTABLES рубит пакеты завершения соединения"
Отправлено JohnProfic , 30-Апр-12 03:40 
> Подскажите, пожалуйста, где я мог ошибиться?

Перед протоколированием попробовать добавить:
... -m state --state INVALID -j DROP


"IPTABLES рубит пакеты завершения соединения"
Отправлено reader , 30-Апр-12 11:14 
>> Подскажите, пожалуйста, где я мог ошибиться?
> Перед протоколированием попробовать добавить:
> ... -m state --state INVALID -j DROP

эти пакеты не попадают под статус ESTABLISHED и для них лучше проверить флаги и сделать REJECT


"IPTABLES рубит пакеты завершения соединения"
Отправлено bgInner , 30-Апр-12 18:50 
>>> Подскажите, пожалуйста, где я мог ошибиться?
>> Перед протоколированием попробовать добавить:
>> ... -m state --state INVALID -j DROP
> эти пакеты не попадают под статус ESTABLISHED и для них лучше проверить
> флаги и сделать REJECT

Reader, поясните, пожалуйста: почему не попадают под статус ESTABLISHED? Ведь пакеты до этого система "видела" в обоих направлениях.
Какем флаги надо прверить и почему сделать REJECT? Ведь это же легальные пакеты, завершающие соединение с сервером.



"IPTABLES рубит пакеты завершения соединения"
Отправлено Andrey Mitrofanov , 01-Май-12 10:57 
>>>> Подскажите, пожалуйста, где я мог ошибиться?
>>> Перед протоколированием попробовать добавить:
>>> ... -m state --state INVALID -j DROP
>> эти пакеты не попадают под статус ESTABLISHED и для них лучше проверить
>> флаги и сделать REJECT
> Reader, поясните, пожалуйста: почему не попадают под статус ESTABLISHED? Ведь пакеты до
> этого система "видела" в обоих направлениях.

Патамучта коннект заэкспаирился, выкинулся из коннтрака, а "ACK FIN" пришёл уже после этого. См.:

$ grep . /proc/sys/net/netfilter/*conntr*tcp*time*
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close:10
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_close_wait:60
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established:432000
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_fin_wait:120
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_last_ack:30
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_max_retrans:300
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_recv:60
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_syn_sent:120
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_time_wait:120
/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_unacknowledged:300
$ _

Четвёртая (или пятая?) строка, наверное.

Я у себя в аналогичной ситуации понял таймауты (все, что меньше, до кучи) до 300-600, и мусор в логах уменьшился (нет, не исчез совсем, но меньше в десятки раз, как помнится).


"IPTABLES рубит пакеты завершения соединения"
Отправлено reader , 01-Май-12 15:23 
>>>> Подскажите, пожалуйста, где я мог ошибиться?
>>> Перед протоколированием попробовать добавить:
>>> ... -m state --state INVALID -j DROP
>> эти пакеты не попадают под статус ESTABLISHED и для них лучше проверить
>> флаги и сделать REJECT
> Reader, поясните, пожалуйста: почему не попадают под статус ESTABLISHED? Ведь пакеты до
> этого система "видела" в обоих направлениях.
> Какем флаги надо прверить и почему сделать REJECT? Ведь это же легальные
> пакеты, завершающие соединение с сервером.

почему статус стал не ESTABLISHED из приведенного не видно, если интересно разобраться запустите tcpdump при этом лучше чтобы были видны пакеты на обоих интерфейсах и с учетом таймаутов как показал Андрей. Как уже сказали эти пакеты уже со статусом INVALID, но если их просто дропнуть, то вы будите получать повторы , как и видите в логах (2 и 3 строки в вашем примере), поэтому лучше REJECT, и клиенту легче жить будет

про флаги это уже философия и соответственно кому как нравится, у вас есть с ACK FIN и с ACK PSH FIN, второй вариант можно наверняка, первый конечно спорный , получится грубый обрыв но если будет REJECT, то с уведомлением отправителя, если пропустить все с такими флагами, то какие то могут получится со статусом INVALID, а пакеты с этим статусом не натятся и идут в сеть провайдера как есть

http://www.opennet.me/openforum/vsluhforumID1/88674.html


"IPTABLES рубит пакеты завершения соединения"
Отправлено bgInner , 30-Апр-12 18:52 
>> Подскажите, пожалуйста, где я мог ошибиться?
> Перед протоколированием попробовать добавить:
> ... -m state --state INVALID -j DROP

Прежде, чем просто дропать, хотелось бы разобраться, почему вс-таки эти пакеты появляются в логах


"IPTABLES рубит пакеты завершения соединения"
Отправлено JohnProfic , 30-Апр-12 21:40 
>>> Подскажите, пожалуйста, где я мог ошибиться?
>> Перед протоколированием попробовать добавить:
>> ... -m state --state INVALID -j DROP
> Прежде, чем просто дропать, хотелось бы разобраться, почему вс-таки эти пакеты появляются
> в логах

У меня такое было из-за дубликатов пакетов, правда пакеты были входящими, а не исходящими. Появлялись они по причине очень узкого (128 kbit/s) и забитого (25 человек хотели всё и сразу) канала.