我按照 iptable 日志记录的示例进行了操作https://help.ubuntu.com/community/IptablesHowTo#More_detailed_Logging
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=x.x.x.x DST=x.x.x.x 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=x.x.x.x DST=x.x.x.x 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=x.x.x.x DST=x.x.x.x 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=x.x.x.x DST=x.x.x.x 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 秒就会出现类似上述日志,似乎有大量流量被阻止。但我的问题是,如何根据上述日志条目确定哪种流量被阻止或丢弃?
DPT 是指目标端口吗?那么 DPT=22 表示 SSH 访问被阻止?而 DPT=80 表示 HTTP 流量被阻止?
我的 iptables 主要是默认值,除了我添加了一些额外的规则
-A INPUT -s z.z.z.z/32 -j DROP
-A INPUT -s y.y.y.y/32 -j DROP
-A INPUT -s a.a.a.a/32 -j DROP
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
日志文件中的任何 SRC ip 均不来自专门配置为丢弃所有流量的 iptables,但日志文件显示不同的 ip 地址,其中 DPT=80、DPT=22 被丢弃。
我的配置有问题吗?
答案1
以下是你的规则:
-A INPUT -s z.z.z.z/32 -j DROP
-A INPUT -s y.y.y.y/32 -j DROP
-A INPUT -s a.a.a.a/32 -j DROP
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
第一个规则会默默地丢弃与其匹配的任何数据包。第二个和第三个规则也是如此。当您达到“限制”规则时,您已经丢弃了与这些源 IP 地址匹配的所有数据包。现在您拥有了其余的流量。对于剩余的流量,您将每分钟记录五个数据包。您会误导性地将它们记录为被拒绝,而实际上它们并没有被拒绝。
相反,如果您想要记录和丢弃与多个源 IP 地址中的任一个匹配的数据包,最简单的方法是创建一个将记录和丢弃的新链。例如:
iptables -N LOG_AND_DROP
iptables -A LOG_AND_DROP -j LOG --log-prefix "Source host denied "
iptables -A LOG_AND_DROP -j DROP
现在您有了这个链,您想引导流量去记录并放到它上面:
iptables -A INPUT -s z.z.z.z/32 -j LOG_AND_DROP
iptables -A INPUT -s y.y.y.y/32 -j LOG_AND_DROP
iptables -A INPUT -s a.a.a.a/32 -j LOG_AND_DROP
这将获取与这些源地址匹配的任何数据包并将其发送到 LOG_AND_DROP 链。顾名思义,此链首先记录每个数据包,然后将其丢弃。如果您愿意,可以限制记录的速率,然后将其丢弃。由您决定,取决于我们讨论的流量大小。
笔记: 在添加上述规则之前,请确保刷新现有规则。否则,您仍然会遇到误导性的规则,即记录但不拒绝。