我正在使用 CentOS 上的一个产品,偶尔需要自动在 iptables 配置中添加和删除规则。例如,在更新期间,我们希望明确拒绝入站服务流量,直到更新完成。目前,更新代码中使用的方法是使用sed
其他文本处理实用程序注释掉配置文件中的相关行,iptables
使用新配置文件重新启动服务,然后在更新结束时反转该过程,然后再次重新启动服务。
在我看来,更好的方法是iptables -D table rule-specification
在进程开始时使用该命令,然后iptables -A table rule-specification
在更新结束时使用该命令。
我看到自动操作配置文件的最大问题是脆弱性:有系统工具可以重写配置文件,并且可能重新排序参数等,可能会破坏文本解析(service iptables save
是一个例子)。
从代码中进行此类系统配置更改的推荐方法是什么?为什么?
答案1
大多数遇到这种情况的人都会用一些抽象的方法来处理它。
例如。与其使用包含规则集的单个文件,为什么不构建包含规则的一组文件并将它们连接在一起。
例如,您可以将单独的规则添加到这样命名的文件中。
/etc/iptables-rules/00_flush_drop
/etc/iptables-rules/20_permitotherstuff
/etc/iptables-rules/10_permitssh
/etc/iptables-rules/99_drop
然后只需运行规则集即可run-parts /etc/iptables-rules
。如果需要添加另一组规则,只需临时插入添加一个文件即可。然后根据需要删除。
您还应该强烈关注在配置中设置和使用 CHAINS。链有点像子例程。例如,您可以在防火墙的最顶部添加一条规则以跳入一条链。链有一个默认的 RETURN 策略。因此,当您需要添加临时规则时,只需将其插入该链中即可。当您不再需要它时,只需刷新该特定链条即可。