iptables多端口和否定

我想用iptableslogging一切,似乎是洪水,除了在networking和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等)。

:您在日志文件中看到的所有数据包完全符合您的防火墙规则。 您的规则永远不会尝试在端口上进行任何匹配。

那么,日志文件告诉你什么? 您的计算机或者与其他服务器保持有效连接,或者有人正在向您的计算机发送欺骗数据包。 正如其他评论所build议的那样,您的计算机很可能与其他irc服务器build立了传出连接,并且logging的数据包是来自这些服务器的答案。

下面是我如何得到答案 :我只是把你的规则倒入fffuu,并稍微手动调整输出。 我将LOG动作重写为ACCEPT ,将默认策略重写为DROP以查看简化后将接受的内容(即LOG )。

这是规则集简化后的输出,而端口上的所有否定匹配被重写为非否定匹配。 由于我之前用ACCEPTreplace了LOG ,下面的防火墙所接受的所有内容都会被我们的原始规则集logging下来:

 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 

现在,您可以轻松地将日志文件中的数据包与简化的防火墙进行匹配。 他们都匹配。

免责声明 :我是fffuu的作者,我的观点可能有偏见, fffuu也不完美(尚未)。 但是,嘿,它是免费的,免费的,我希望它可以帮助:-)


再生性

以下是我所做的细节,如果您想重现:

我将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还在开发中,我正在使用fffuu fb858bcf95268451772ca9156a04b9fc229d3578的回购开发快照进行此评论)