Bry*_*yan 3 firewall iptables linux-networking
我已经输入了 iptables 规则来记录我们服务器上的特定连接,但它似乎并没有像我想要的那样工作。以下是规则:
1 LOG tcp -- !10.51.0.0/16 0.0.0.0/0 state NEW tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: '
2 LOG tcp -- !192.168.0.0/16 0.0.0.0/0 state NEW tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: '
Run Code Online (Sandbox Code Playgroud)
iptables 应该只记录不在指定网络中的 IP 连接,但它会记录来自所有 IP 地址的所有连接。
问题是您不能在单个 iptables 规则中引用多个 IP 范围,但使用多个规则间接导致分离(逻辑 OR):如果连接匹配您的第一个规则或第二个规则,则将记录它们。
你想要的是一个联合行为(逻辑与):来自 的新连接10.51.0.0/16
,也不192.168.0.0/16
需要记录。
这就是为什么您找不到想要的简单解决方案的原因。没有。
但是你可以通过稍微复杂一点的方法来解决这个问题。您可以创建一个新链:
iptables -N logger
iptables -A INPUT -j logger
iptables -A logger -s 192.168.0.0/16 -j RETURN
iptables -A logger -s 10.51.0.0/16 -j RETURN
iptables -A logger -j LOG
Run Code Online (Sandbox Code Playgroud)
这些命令的作用:
logger
。192.168.0.0/16
和10.51.0.0/16
)。如果是,则一切正常(RETURN
目标将控制权交还给原始表)。作为副作用,您以后也可以将此新表用于其他任务 - 例如,拒绝数据包或任何其他目的。在我看来,最好将 iptables 视为一种简单的编程语言。
传入的连接总是会匹配这些规则之一,不是吗?
10.51.0.1
例如,来自第一个规则的连接不会被记录,但会命中第二个规则。
你不需要等效的!10.51.0.0/16 && !192.168.0.0/16
(可能不是有效的语法但逻辑上正确)。