如何根据 iptables 日志确定正在丢弃/阻止的流量

for*_*own 8 iptables logging

我遵循了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
Run Code Online (Sandbox Code Playgroud)

我得到如下的日志条目

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 
Run Code Online (Sandbox Code Playgroud)

上面类似的日志每 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
Run Code Online (Sandbox Code Playgroud)

日志文件中的 SRC ip 都不是来自专门配置为丢弃所有流量的 iptables,但日志文件显示不同的 ip 地址,DPT=80,DPT=22 被丢弃。

我的配置有问题吗?

Edd*_*die 27

这里又是你的规则:

-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
Run Code Online (Sandbox Code Playgroud)

第一个将默默地丢弃任何与其匹配的数据包。第二个和第三个也一样。当您达到“限制”规则时,您已经丢弃了与这些源 IP 地址匹配的所有数据包。您现在拥有其余的流量。对于其余的流量,您将每分钟记录 5 个数据包。当它们实际上没有被拒绝时,您会误导性地将它们记录为已拒绝。

相反,如果您想记录和丢弃与多个源 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
Run Code Online (Sandbox Code Playgroud)

现在你有了这个链,你想引导流量记录并丢弃到它:

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
Run Code Online (Sandbox Code Playgroud)

这将获取与这些源地址匹配的任何数据包并将其发送到 LOG_AND_DROP 链。这个链,正如它的名字一样,首先记录每个数据包,然后丢弃它。如果您愿意,可以对日志进行速率限制,然后将其删除。由您决定,取决于我们谈论的流量有多少。

注意: 确保在添加上述规则之前刷新现有规则。否则,您仍然会有误导性规则,即记录但不否认。

  • 对于 ipv6,您需要使用 ip6tables。它是分开的。 (3认同)