IPtables 链号持久性 - 我怎样才能将第一条规则保持在最前面?

IPtables 链号持久性 - 我怎样才能将第一条规则保持在最前面?

概括

我正在尝试了解如何将规则保持在 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

因此,您有两种可能的方法可以做到这一点:

  1. 要么你创建另一个链(例如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. 在链中指定自己的规则编号(默认为 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 将在您完成更改后启动)。

相关内容