概括
我正在尝试了解如何将规则保持在 IPtables 中的链顶部。我想将我的自定义链(作为规则)保持在 INPUT 链的顶部,即作为链中的第一个规则。
设置
- 自定义链(我想将其保留在 INPUT 链之上)
- fail2ban 根据禁令状态生成(我认为是创建和删除)链
当前行为:
在设置我的自定义链时,我可以将其设置为规则 1。但是,随着时间的推移,随着 fail2ban 的变化,自定义链最终被移至 INPUT 链的下方。
感谢您的帮助!如果这个问题已经得到解答,我深感抱歉。遗憾的是,我在建议的问题中找不到它。
答案1
由于这行(例如在 中iptables-multiport
)将在链中的第一个位置添加规则INPUT
,该规则通常会插入到此行(例如简单的 sshd jail、IPv4 等):
# <iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
iptables -I INPUT -p tcp -m multiport --dports ssh -j f2b-sshd
因此,您有两种可能的方法可以做到这一点:
- 要么你创建另一个链(例如
F2B
),将其添加到 INPUT 中的第一个链之后,并在 fail2ban 配置中指定其名称而不是 INPUT。例如,创建新的/etc/fail2ban/action.d/iptables-common.local并使用chain
你自己的规则覆盖所有 fail2ban 链:
[Init]
chain = F2B
或者在 中指定其名称jail.local
,例如在默认部分或每个监狱中:
[DEFAULT]
banaction = %(known/banaction)s[chain=F2B]
banaction_allports = %(known/banaction_allports)s[chain=F2B]
- 在链中指定自己的规则编号(默认为 1)。因此,不要将链设置为
F2B
,而是在本地通用配置中使用chain = INPUT 2
,或者像这里一样jail.local
:
[DEFAULT]
banaction = %(known/banaction)s[chain="INPUT 2"]
banaction_allports = %(known/banaction_allports)s[chain="INPUT 2"]
在这种情况下,fail2ban 将插入上述添加规则(针对 sshd jail),如下所示:
- iptables -I INPUT -p tcp -m multiport --dports ssh -j f2b-sshd
+ iptables -I INPUT 2 -p tcp -m multiport --dports ssh -j f2b-sshd
在这两种情况下,请确保(例如使用服务依赖项)链F2B
和您自己的链已经添加到 iptables 中(fail2ban 将在您完成更改后启动)。