Я хочу с помощью 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)