我们想使用 iptables 记录所有网络连接,除非连接地址是A.B.C.D
或连接地址是E.F.G.H
。如果没有包含我们想要包含的地址的范围,这两个地址就不能组合成一个 CIDR 范围。通过添加以下 iptables 规则,我可以部分实现:
-I INPUT ! -s A.B.D.E -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
但是,这仍然会记录来自E.F.G.H
. 有没有办法在不记录的情况下获取所有内容?
(这两个地址产生了很多连接,我们不需要记录它们。)
在您引用的特别允许 ABCD 或 EFGH 的行上方添加一两条规则,然后在其下方进行日志记录。
iptables
按照规则的顺序工作,因此允许较早通过是处理的结束。这也是您在大多数防火墙规则集的末尾添加通用“全部拒绝”的原因。如果您的上述规则未涵盖某些内容,请拒绝它,因为它是意料之外的并且可能是不受欢迎的。
示例(根据需要进行调整,不要只是复制粘贴):
您可以创建一个自定义链,可以命名为
LOG_UNLESS
,然后您可以执行以下操作:另一种选择是使用
ipset
.首先,创建正确的 IP 集:
然后,添加要排除的地址:
最后,在 iptables 日志记录规则上,添加一个否定匹配:
! --match-set DO_NOT_LOG src
意思是:“匹配源(src
)地址不在DO_NOT_LOG
集合中的数据包”