使用firewalld记录“直接”iptables规则

使用firewalld记录“直接”iptables规则

我正在使用带有 iptables 后端的firewalld。我添加了用于限制 ssh 连接的“直接”规则:

sudo firewall-cmd --add-port=22/tcp

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --set \
  -m comment --comment "limit ssh connections per ip"

sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --update --seconds 61 --hitcount 4 --rttl \
  -j REJECT --reject-with tcp-reset \
  -m comment --comment "limit ssh connections per ip"

# ...similarly for ipv6

我还想记录拒绝和丢弃的情况,所以我运行

$ sudo firewall-cmd --set-log-denied all

这基本上是有效的 - 当我检查时,sudo journalctl --since today --identifier kernel我看到了那些连接......但不包括那些被我的直接规则所拒绝的人。

在仓库中已经被证实正如预期的行为,并且我必须添加更多直接规则来记录我的直接规则:

您必须使用 iptables 日志扩展,例如 -j LOG。... 不幸的是,您需要两个直接规则,因为 iptables 不支持 -j LOG -j ACCEPT。

我怎么做?

答案1

搞清楚了。必须添加另一条规则,与 REJECT 或 DROP 规则相同,但跳转到“非终止”LOG 目标

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --set \
  -m comment --comment "limit ssh connections per ip"

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 1 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --update --seconds 61 --hitcount 4 --rttl \
  -m limit --limit "5/min" \
  -j LOG --log-prefix "[REJECT SSH BRUTE FORCE] " --log-level 6 \    # <----------
  -m comment --comment "limit ssh connections per ip"

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 2 \
  -p tcp --dport 22 \
  -m state --state NEW \
  -m recent --name ssh --update --seconds 61 --hitcount 4 --rttl \
  -j REJECT --reject-with tcp-reset \
  -m comment --comment "limit ssh connections per ip"

# ...similarly for ipv6

要查看这些连接的日志:

# all rejected and dropped
$ sudo journalctl --grep 'kernel'

# or just just ssh brute force attempts
$ sudo journalctl --grep 'REJECT SSH BRUTE FORCE'

相关内容