我在 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。
我怎么做?
弄清楚了。必须添加另一条规则,与 REJECT 或 DROP 规则相同,但它跳转到“非终止” LOG 目标。
查看这些连接的日志: