amarillion Asked: 2009-05-12 03:05:16 +0800 CST2009-05-12 03:05:16 +0800 CST 2009-05-12 03:05:16 +0800 CST 存储 iptables 规则的规范方法是什么 772 iptables 是标准的 Linux 防火墙,不会在重启之间保存规则。你必须自己解决这个问题。有很多方法可以做到这一点。这样做的规范方法是什么?什么是最佳实践? 我会用我自己的解决方案来回答,但我对其他/更好的解决方案感兴趣。 linux iptables 7 个回答 Voted amarillion 2009-05-12T03:08:07+08:002009-05-12T03:08:07+08:00 以下是一些示例规则。将它们保存到 /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 Brent 2009-05-12T06:23:22+08:002009-05-12T06:23:22+08:00 我们使用了很多iptables 规则,因此为了简化管理,我们执行以下操作: 规则都是从脚本调用的 - 脚本是从 /etc/init.d/firewall 调用的(自定义脚本) 保存服务器名称/网络名称(IP 地址变量)的文件,并包含在每个 iptables 脚本中以保持一致性。 为每个子网(即私有/DMZ/VPN 等)保留单独的脚本,以便更容易找到。属于 2 个脚本的规则(例如限制通信 b/w 私有和 DMZ 的规则)放在更“安全”网络的脚本中 只要有可能,就会使用循环和嵌套循环来使脚本尽可能短。 每个新规则或更改都记录在脚本相应部分之前的注释中。 我不知道这是否是最好的方法,但它对我们来说效果很好。 jtimberman 2009-06-02T21:31:41+08:002009-06-02T21:31:41+08:00 虽然这确实取决于环境和平台,但我已经看到了两种好的方法,具体取决于平台: RHEL / CentOS:将所有规则存储在单个 /etc/sysconfig/iptables 文件中,该文件由 iptables 启动脚本读取。 Debian/Ubuntu:将所有规则存储在 /etc/iptables.d/ 目录中的单独服务特定文件中。例如,/etc/iptables.d/port_http、/etc/iptables.d/port_dns,其中 port_service 映射到 /etc/services 中的服务名称。 无论哪种情况,文件都由 Chef 或 Puppet 等配置工具管理,并由启动时运行的 iptables 的“主”启动脚本读取。 gimel 2009-05-12T04:01:19+08:002009-05-12T04:01:19+08:00 除了iptables-save(和iptables-restore)之外,复杂的防火墙方案最好使用专用程序来处理。例如,我们使用shorewall("iptables made easy") 来配置 iptables。 也可以使用更简单的工具,例如firestarter和kmyfirewall。 TrueDuality 2009-05-12T05:14:31+08:002009-05-12T05:14:31+08:00 这取决于您使用的发行版。一些发行版,尤其是那些基于 Red Hat 发行版的发行版会自动保留 iptables 规则,但会保存在自己的特殊目录中。我最熟悉 RHEL,iptables 规则可以在 /etc/sysconfig/iptables 中找到。开始熟悉 iptables 规则语法可能会很棘手,但一旦掌握了窍门就很容易了。 netfilter 网站上有很多关于 iptables 的文档,包括一些介绍。如果您愿意阅读一下,您可以在这里找到很多很好的信息:http: //www.netfilter.org/documentation/ Zoredache 2009-05-12T08:34:05+08:002009-05-12T08:34:05+08:00 这个问题非常接近4934的重复,并且与397有关。 我将firehol与我开发的用于管理配置文件的 Web 界面结合使用。 我真的很喜欢 firehol,它提供了比直接使用 iptables 更简单的语法。 您可以使用 firehol 调试命令来准确生成 iptables 命令 如果您的配置中有错误并启动防火墙,firehol 会检测到错误并恢复到以前的状态。 Firehol 有一个“尝试”命令,您可以使用它来远程启动防火墙,如果您的更改终止了您的连接,firehol 将恢复到以前的状态,如果您没有终止您的连接,那么它会要求您确认更改。 Firehol 有大量预定义的服务,因此您不必确切地记住您必须拥有哪些端口才能为某些晦涩的协议打开哪些端口。 Christian 2009-05-16T00:16:45+08:002009-05-16T00:16:45+08:00 当然,我们使用自定义的初始化脚本。我可以使用 for 循环遍历端口列表,解析其他配置文件,如 vpn 用户等。太棒了! 而 iptables-restore 无疑是最“规范”的保存方式。 我要补充的: 请注意,当前版本的 iptables 将在每次调用时要求内核将完整的链列表返回给它。然后它会做出你要求它做的一个改变。然后它将再次上传列表。 这很慢(O(n^2)),对我们来说需要 5 秒,这太长了 ;-) 如果您使用 iptables-restore,这一切都在一个快速操作中完成。
以下是一些示例规则。将它们保存到 /etc/iptables.rules
在 /etc/network/interfaces 末尾添加这一行
我们使用了很多iptables 规则,因此为了简化管理,我们执行以下操作:
我不知道这是否是最好的方法,但它对我们来说效果很好。
虽然这确实取决于环境和平台,但我已经看到了两种好的方法,具体取决于平台:
RHEL / CentOS:将所有规则存储在单个 /etc/sysconfig/iptables 文件中,该文件由 iptables 启动脚本读取。
Debian/Ubuntu:将所有规则存储在 /etc/iptables.d/ 目录中的单独服务特定文件中。例如,/etc/iptables.d/port_http、/etc/iptables.d/port_dns,其中 port_service 映射到 /etc/services 中的服务名称。
无论哪种情况,文件都由 Chef 或 Puppet 等配置工具管理,并由启动时运行的 iptables 的“主”启动脚本读取。
除了
iptables-save
(和iptables-restore
)之外,复杂的防火墙方案最好使用专用程序来处理。例如,我们使用shorewall
("iptables made easy") 来配置 iptables。也可以使用更简单的工具,例如firestarter和kmyfirewall。
这取决于您使用的发行版。一些发行版,尤其是那些基于 Red Hat 发行版的发行版会自动保留 iptables 规则,但会保存在自己的特殊目录中。我最熟悉 RHEL,iptables 规则可以在 /etc/sysconfig/iptables 中找到。开始熟悉 iptables 规则语法可能会很棘手,但一旦掌握了窍门就很容易了。
netfilter 网站上有很多关于 iptables 的文档,包括一些介绍。如果您愿意阅读一下,您可以在这里找到很多很好的信息:http: //www.netfilter.org/documentation/
这个问题非常接近4934的重复,并且与397有关。
我将firehol与我开发的用于管理配置文件的 Web 界面结合使用。
我真的很喜欢 firehol,它提供了比直接使用 iptables 更简单的语法。
当然,我们使用自定义的初始化脚本。我可以使用 for 循环遍历端口列表,解析其他配置文件,如 vpn 用户等。太棒了!
而 iptables-restore 无疑是最“规范”的保存方式。
我要补充的:
请注意,当前版本的 iptables 将在每次调用时要求内核将完整的链列表返回给它。然后它会做出你要求它做的一个改变。然后它将再次上传列表。
这很慢(O(n^2)),对我们来说需要 5 秒,这太长了 ;-)
如果您使用 iptables-restore,这一切都在一个快速操作中完成。