IPTables:为链引入一个策略,以便我可以维护删除策略/规则,而不必在需要添加新的接受规则时删除它?

IPTables:为链引入一个策略,以便我可以维护删除策略/规则,而不必在需要添加新的接受规则时删除它?

假设我有一个用 引入的链iptables -N SERVICES-VPN

但我希望这条链能放弃一切......所以iptables -A SERVICES-VPN -j DROP

这里的问题是,我可能需要稍后添加规则才能被接受。每次我需要添加它们时,我都必须手动删除丢弃规则(按行号排序很烦人,对吧?),然后引入新规则以接受该服务,然后再次重新引入丢弃规则iptables -A SERVICES-VPN -j DROP

这甚至可以看作是一个安全漏洞,僵尸网络可能正在等待我通过删除 DROP 规则来打开所有端口来执行某些操作,而最后一道防线——防火墙,才是保护相关机器的。

对于策略来说,这个问题不存在,策略iptables -P INPUT DROP仍然允许我添加新规则,如果不存在规则,它将断开连接。使用链实现此目的的最佳方法是什么?

答案1

这里的问题是,我可能需要稍后添加规则才能被接受。每次我需要添加它们时,我都必须手动删除丢弃规则(按行号排序很烦人,对吧?),然后引入新规则以接受该服务,然后再次引入丢弃规则 iptables -A SERVICES-VPN -j DROP。

或者,不要-A使用A附记,AAfter,在链中现有规则后面添加任何新规则,您可以使用该选项

-I插入新规则在(现有)链的开头,无需先删除所添加规则后面需要遵循的任何现有规则。

答案2

将链分成两部分,一部分是允许规则列表,另一部分是查找允许规则然后删除的链。

看起来像这样:

$ iptables -N SERVICES-VPN
$ iptables -N SERVICES-VPN-ACCEPT
$ iptables -A SERVICES-VPN -j SERVICES-VPN-ACCEPT
$ iptables -A SERVICES-VPN -j REJECT

希望您在启动时没有执行此操作的肮脏脚本,而是一个格式整齐的iptables-restore兼容文件,可使其成为原子文件,从而消除您提到的竞争条件。

希望你也转到nftablesnft在 CLI 上),因为它未被弃用并且更加灵活(这可以通过针对 VPN/非 VPN 的两个独立链来实现)。

编辑:iptables弃用可能会引起争议,但据我了解,虽然有一些工具可以简化从内核兼容模块iptablesnftables内核兼容模块的过渡,但我并不认为它们会永远存在,所以我将保留此内容,但您可以随意阅读下面@AB 的评论,了解不同的观点。关于这个问题的主要观点是它提供了更大的灵活性,这可能使解决方案更易于实现/维护。

相关内容