我可以在一条 iptables 规则中记录和丢弃数据包吗?

我可以在一条 iptables 规则中记录和丢弃数据包吗?

我目前有以下内容傀儡防火墙设置:

firewall { '100 drop insecure outgoing HTTP traffic':
  chain  => 'OUTPUT',
  dport  => 80,
  proto  => tcp,
  action => reject,
}

导致以下规则:

$ sudo iptables --list-rules OUTPUT | grep ^-A
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "100 drop insecure outgoing HTTP traffic" -j REJECT --reject-with icmp-port-unreachable

日志数据包的常见解决方案似乎是为每个源链创建单独的日志链并跳转到它们,但这至少会使该规则集的复杂性增加一倍,并使遵循逻辑变得更加困难。因此:是否可以将数据包记录在丢弃数据包的同一规则中?

答案1

有一个使用 iptables“LOG”扩展的解决方法。从man 8 iptables-extensions

这是一个“非终止目标”,即规则遍历在下一个规则处继续。因此,如果您想记录您拒绝的数据包,请使用两个具有相同匹配条件的单独规则,首先使用目标 LOG,然后使用 DROP(或 REJECT)。

在木偶中:

firewall { '100 log insecure outgoing HTTP traffic':
  chain => 'OUTPUT',
  dport => 80,
  proto => tcp,
  jump  => 'LOG',
} ->
firewall { '101 drop insecure outgoing HTTP traffic':
  chain  => 'OUTPUT',
  dport  => 80,
  proto  => tcp,
  action => reject,
}

或者简单的iptables

$ sudo iptables --list-rules OUTPUT | grep ^-A
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "100 log insecure outgoing HTTP traffic" -j LOG
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "101 drop insecure outgoing HTTP traffic" -j REJECT --reject-with icmp-port-unreachable

不是超级干净,但至少很简单。

相关内容