iptables 不允许多个 -d 标志

Tom*_*ald 9 iptables

我正在尝试使用 iptables 将所有出站连接记录到一个文件中。

这是我的规则:

-A OUTPUT ! -o lo ! --destination 127.0.0.1  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加另一个 IP 目的地(多播),那么我的规则变为:

-A OUTPUT ! -o lo ! --destination 127.0.0.1 ! --destination 239.192.0.0 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

multiple -d flags not allowed
Run Code Online (Sandbox Code Playgroud)

我的问题不是错误是什么意思,而是如何在我的规则中排除多个 IP 地址?两个条件

! --destination 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

! --destination 239.192.0.0
Run Code Online (Sandbox Code Playgroud)

是相互排斥的,因此拥有两个规则实际上就像根本没有它们一样(更糟糕的是,因为我会得到将近两倍的日志)

那么有“and”运算符吗?

And*_*ese 11

对于此类问题,您可以定义新链并在它们之间跳转。例如,您可以添加一个链,LOGGING并在该链的开头匹配那些您不想使用以下操作记录的数据包RETURN

$ iptables -N LOGGING
$ iptables -A LOGGING -d 127.0.0.0/8 -j RETURN
$ iptables -A LOGGING -d 239.192.0.0/16 -j RETURN
$ iptables -A LOGGING -j LOG 
$ iptables -A OUTPUT -j LOGGING
Run Code Online (Sandbox Code Playgroud)

这样,所有通过OUTPUT链的数据包将首先通过LOGGING链,所有不为127.0.0.0/8和的239.192.0.0/16都将被记录,然后控制将返回到OUTPUT.