Назад | Перейти на главную страницу

многопортовый iptables и отрицание

Я хочу с помощью iptables регистрировать все, что может показаться флудом, кроме Интернета и портов IRC. Так я и сделал:

iptables -A INPUT -p tcp -m multiport ! --dports 80,443,6667,6697 -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j LOG --log-prefix "[IP FLOOD ALL]"
iptables -A INPUT -p udp -m multiport ! --dports 80,443,6667,6697 -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j LOG --log-prefix "[IP FLOOD ALL]"
iptables -A INPUT -p icmp -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j LOG --log-prefix "[IP FLOOD ALL]"

Но когда я смотрю в журналы, я получаю (MAC и IP запутаны):

Aug  3 16:49:00 server kernel: [IP FLOOD ALL]IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=107 TOS=0x00 PREC=0x00 TTL=61 ID=6765 DF PROTO=TCP SPT=6667 DPT=40605 WINDOW=10818 RES=0x00 ACK PSH URGP=0
Aug  3 16:49:00 server kernel: [IP FLOOD ALL]IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=104 TOS=0x00 PREC=0x00 TTL=61 ID=54214 DF PROTO=TCP SPT=6667 DPT=49484 WINDOW=10815 RES=0x00 ACK PSH URGP=0
Aug  3 16:50:00 server kernel: [IP FLOOD ALL]IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=60 ID=9024 DF PROTO=TCP SPT=80 DPT=36729 WINDOW=123 RES=0x00 ACK FIN URGP=0

Вы можете видеть, что SPT имеет значения, которые я обычно защищаю (6667 и 80).

Кто-нибудь знает об этой проблеме?

Эти пакеты возвращаются из подключений к внешним серверам IRC (они приходят с порта источника 6667). Ваша настройка направлена ​​на снятие ограничений только для входящих IRC-соединений (входящий порт назначения 6667 и т. Д.).

Ответ: Все пакеты, которые вы видите в файле журнала, идеально соответствуют правилам вашего брандмауэра. Ваши правила никогда не пытаются сопоставить источник порты.

Итак, что вам сообщает файл журнала? Либо ваша машина поддерживает допустимые соединения с другими серверами, либо кто-то отправляет на вашу машину поддельные пакеты. Как предполагается в других комментариях, весьма вероятно, что ваш компьютер установил исходящие соединения с другими серверами irc, и зарегистрированные пакеты являются ответами с этих серверов.

Вот как я получил ответ: Я просто свалил ваши правила в фффуу и немного вручную настроил вывод. Я переписал твой LOG действия по ACCEPT и политика по умолчанию для DROP чтобы увидеть, что будет принято (т.е. LOGред) после упрощения.

Вот результат после того, как набор правил был упрощен, и все отрицательные совпадения на портах были переписаны в неотрицательные совпадения. Из-за моей предыдущей замены LOG по ACCEPT, все, что принимает брандмауэр, также будет регистрироваться нашим исходным набором правил:

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 0:79
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 81:442
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 444:6666
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 6668:6696
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0    dports: 6698:65535
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0    dports: 0:79
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0    dports: 81:442
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0    dports: 444:6666
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0    dports: 6668:6696
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0    dports: 6698:65535
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0    
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Теперь вы можете легко сопоставить пакеты из вашего файла журнала с этим упрощенным межсетевым экраном. Все они совпадают.

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


Воспроизводимость

Вот что я сделал подробно, на случай, если вы захотите воспроизвести:

Я переписал LOG действия по ACCEPT, используемый iptables-save отформатировал и сохранил в foo.txt:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p tcp -m multiport ! --dports 80,443,6667,6697 -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j ACCEPT
-A INPUT -p udp -m multiport ! --dports 80,443,6667,6697 -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j ACCEPT
-A INPUT -p icmp -m hashlimit --hashlimit-above 10/sec --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name aflood --hashlimit-srcmask 8 -j ACCEPT
COMMIT

Тогда я просто побежал fffuu --chain INPUT foo.txt чтобы получить результат сверху.

(fffuu все еще находится в разработке, для этого комментария я использую снимок разработки репо fb858bcf95268451772ca9156a04b9fc229d3578)