iptables 规则与 ! 特点

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 地址的所有连接。

pet*_*erh 9

问题是您不能在单个 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)

这些命令的作用:

  1. 他们创建了一个名为 的新表logger
  2. 我们为每个连接设置了 iptables 来尝试他的表。
  3. 此记录器表检查您的数据包是否来自受信任的网络(192.168.0.0/1610.51.0.0/16)。如果是,则一切正常(RETURN目标将控制权交还给原始表)。
  4. 如果不是,则连接被记录(并且,正如我们在表的末尾一样,控件也返回到原点)。

作为副作用,您以后也可以将此新表用于其他任务 - 例如,拒绝数据包或任何其他目的。在我看来,最好将 iptables 视为一种简单的编程语言。


Pau*_*ane 6

传入的连接总是会匹配这些规则之一,不是吗?

10.51.0.1例如,来自第一个规则的连接不会被记录,但会命中第二个规则。

你不需要等效的!10.51.0.0/16 && !192.168.0.0/16(可能不是有效的语法但逻辑上正确)。