标准的Linux防火墙iptables不会在重启之间保存规则。 你必须自己照顾这个。 有很多方法可以做到这一点。 什么是规范的方式来做到这一点? 什么是最佳实践?
我会用我自己的解决scheme回答,但我对其他/更好的解决scheme感兴趣。
以下是一些示例规则。 将它们保存到/etc/iptables.rules
# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007 *filter :INPUT ACCEPT [89458:132056082] :FORWARD DROP [0:0] :OUTPUT ACCEPT [263904:15667452] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j DROP COMMIT # Completed on Wed Oct 24 17:07:29 2007
在/ etc / network / interfaces的最后加上这一行
pre-up iptables-restore < /etc/iptables.rules
我们使用了很多的iptables规则 ,所以为了简化pipe理,我们做了以下工作:
我不知道这是否是这样做的最好方法,但对我们来说运作良好。
虽然这是事实,这是依赖于环境和平台,我已经看到了两个很好的方法,取决于平台:
RHEL / CentOS:将所有规则存储在由iptables启动脚本读入的单个/ etc / sysconfig / iptables文件中。
Debian / Ubuntu:将所有规则存储在/etc/iptables.d/目录中独立的服务特定文件中。 例如,/etc/iptables.d/port_http,/etc/iptables.d/port_dns,其中port_service映射到/ etc / services中的服务名称。
在任何一种情况下,文件或文件都由像Chef或Puppet这样的configuration工具进行pipe理,并通过“主”启动脚本读入在启动时运行的iptables。
除了iptables-save (和iptables-restore ),复杂的防火墙scheme可以更好地处理专用程序。 例如,我们使用了shorewall (“iptables made easy”)来configurationiptables。
还有更简单的工具,比如firestarter和kmyfirewall 。
这取决于您使用的分配。 有些发行版,尤其是基于Red Hat发行版的发行版,会自动保留iptables规则,但在自己的专用目录中。 我对RHEL最熟悉,iptables规则可以在/ etc / sysconfig / iptables中find。 熟悉iptables规则的语法起初可能比较棘手,但是一旦掌握了它就很容易了。
netfilter网站有很多关于iptables的文档,包括一些介绍。 如果你想阅读一下,你可以在这里find很多很好的信息: http : //www.netfilter.org/documentation/
这个问题非常接近于4934的重复 ,与397有关。
我使用firehol结合我开发的Web界面来pipe理configuration文件。
我真的很喜欢firehol,它提供了一个简单的语法,然后直接使用iptables。
当然,我们使用一个自定义的init脚本。 我可以使用for-loops迭代一个端口列表,parsing其他configuration文件,如vpn-users等。非常好!
而iptables-restore无疑是最“保守”的挽救方式。
我想补充的是:
请注意,当前版本的iptables会针对每一个调用请求内核将其链接完整列表。 那么它会使你要求做的一个改变。 然后它会再次上传列表。
这很慢(O(n ^ 2)),对我们来说需要5秒,这太长了;-)
如果你使用iptables-restore,这一切都可以通过一个快速的操作来完成。