我已经从https://help.ubuntu.com/community/IptablesHowTo#More_detailed_Logging按照iptable日志的例子
sudo iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
我得到如下的日志条目
Oct 20 03:45:50 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=xxxx DST=xxxx LEN=1059 TOS=0x00 PREC=0x00 TTL=115 ID=31368 DF PROTO=TCP SPT=17992 DPT=80 WINDOW=16477 RES=0x00 ACK PSH URGP=0 Oct 20 03:46:02 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=xxxx DST=xxxx LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=763 DF PROTO=TCP SPT=20229 DPT=22 WINDOW=15588 RES=0x00 ACK URGP=0 Oct 20 03:46:14 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=xxxx DST=xxxx LEN=324 TOS=0x00 PREC=0x00 TTL=49 ID=64245 PROTO=TCP SPT=47237 DPT=80 WINDOW=470 RES=0x00 ACK PSH URGP=0 Oct 20 03:46:26 hostname kernel: iptables denied: IN=eth0 OUT= MAC=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx SRC=xxxx DST=xxxx LEN=52 TOS=0x00 PREC=0x00 TTL=45 ID=2010 PROTO=TCP SPT=48322 DPT=80 WINDOW=380 RES=0x00 ACK URGP=0
上面类似的日志每2到3秒出现一次,似乎有很多stream量被阻塞。 但我的问题是,如何根据上面的日志条目来确定哪些stream量被阻止或丢弃?
DPT是指目的港? 所以DPT = 22意味着SSH访问被阻止? 和DPT = 80意味着HTTPstream量被阻止?
我的iptables主要是默认值,除了我添加了一些额外的规则
-A INPUT -s zzzz/32 -j DROP -A INPUT -s yyyy/32 -j DROP -A INPUT -s aaaa/32 -j DROP -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
日志文件中的SRC ip都不是来自专门configuration为丢弃所有通信的iptables,而是显示具有DPT = 80,DPT = 22的不同IP地址的日志文件被丢弃。
我的configuration有问题吗?
这是你的规则了:
-A INPUT -s zzzz/32 -j DROP -A INPUT -s yyyy/32 -j DROP -A INPUT -s aaaa/32 -j DROP -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
第一个将会默默地删除任何匹配它的数据包。 第二和第三。 当您点击“限制”规则时,您已经丢弃了与这些源IP地址匹配的所有数据包。 你现在有剩余的交通。 对于其余的stream量,您将每分钟logging五个数据包。 当他们没有被拒绝时,你会误导他们被拒绝。
相反,如果您想logging和丢弃与几个源IP地址中的任何一个匹配的数据包,最简单的方法就是创build一个将logging和丢弃的新链。 例如:
iptables -N LOG_AND_DROP iptables -A LOG_AND_DROP -j LOG --log-prefix "Source host denied " iptables -A LOG_AND_DROP -j DROP
现在你有了这个链,你要引导stream量logging下来:
iptables -A INPUT -s zzzz/32 -j LOG_AND_DROP iptables -A INPUT -s yyyy/32 -j LOG_AND_DROP iptables -A INPUT -s aaaa/32 -j LOG_AND_DROP
这将采取任何匹配这些源地址的数据包,并将其发送到LOG_AND_DROP链。 这个链,因为它被命名,首先logging每一个数据包,然后丢弃它。 如果你愿意,你可以限制日志logging,然后删除它。 取决于你,并取决于我们在谈论多lessstream量。
注意:确保在添加上述规则之前清空现有规则。 否则,你仍然会有logging但不否认的误导规则。