存储iptables规则的规范方法是什么


8

iptables(标准Linux防火墙)在两次重新引导之间不会保存规则。您必须自己照顾这一点。有很多方法可以做到这一点。规范的做法是什么?什么是最佳做法?

我将使用自己的解决方案进行回答,但是我对其他/更好的解决方案感兴趣。


Answers:


6

以下是一些示例规则。将它们保存到/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

1
我会指出这是Ubuntu特有的。对于Red Hat和Fedora变体,您将改用/ etc / sysconfig / iptables。
esm

您的意思不是/etc/iptables.rules?那不是由Ubuntu确定的,我自己选择了。
amarillion

4
我指的是对/ etc / network / interfaces的添加;抱歉,我应该更加清楚。Fedora和RHEL具有一个初始化脚本(统称为“ iptables”;),如果启用,它实际上会执行/ etc / sysconfig / iptables的iptables-restore。
esm,2009年

3

我们使用许多iptables规则,因此为了简化管理,我们执行以下操作:

  • 规则全部从脚本调用-脚本从/etc/init.d/firewall(自定义脚本)调用
  • 服务器名称/网络名称(IP地址变量)的文件将保留,并包含在每个iptables脚本中以保持一致性。
  • 每个子网都会保留单独的脚本(例如,私有/ DMZ / VPN等),以使查找变得更容易。属于2个脚本的规则(例如那些限制通信b / w private和DMZ的规则)被放在更“安全”的网络脚本中
  • 尽可能使用循环和嵌套循环来使脚本尽可能短。
  • 每个新规则或更改都在脚本的适当部分之前带有注释,以文档形式记录。

我不知道这是否是执行此操作的最佳方法,但对我们来说效果很好。


3

的确,这取决于环境和平台,但根据平台,我看到了两种不错的方法:

  • 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。


2
对于您在Debian / Ubuntu示例中的命名,我会非常小心。这是您要在规则名称前加上00、04、22等前缀的地方。有很多iptables规则与顺序相关,如果以错误的顺序加载它们,您将拥有坏东西。我建议将它们存储在一个文件中,除非您真的知道自己在做什么。
Christopher Cashell

1

除了iptables-save(和iptables-restore)之外,使用专用程序还可以更好地处理复杂的防火墙方案。例如,我们使用了shorewall“使iptables变得简单”来配置iptables。

也可以使用更简单的工具,例如firestarterkmyfirewall


6
我不同意。简单的情况可以通过专用程序轻松处理,但是对于复杂的规则,我想不出比iptables更清晰的内容(更清晰的含义是明确的,对初学者没有必要)
Mikeage

2
取决于您为什么要简化规则。我认为iptables.rules文件可以完全可读。重要的是要利用注释参数来使这一切有意义。
Spoulson

我不同意你的不同意见。如果您专注于使iptables命令更具可读性,则不会对其进行排序或使用链,因此规则将尽可能高效。
Zoredache

1
Zoredache-我认为Mikeage在这里比对是错。iptables规则可能非常明确,即使它们(对于像我这样的技能不强的人)很难阅读。我不认为Mikeage易于阅读。
迈克尔·科恩

1

这取决于您使用的分发。某些发行版,尤其是基于Red Hat发行版的发行版,会自动保留iptables规则,但会在其自己的特殊目录中。我最熟悉RHEL,可以在/ etc / sysconfig / iptables中找到iptables规则。刚开始熟悉iptables规则语法可能会很棘手,但是一旦掌握了它,就很容易。

netfilter网站上有很多关于iptables的文档,包括一些介绍。如果您愿意阅读,可以在这里找到很多很好的信息:http : //www.netfilter.org/documentation/


在redhat上,您可能还想保持/ etc / sysconfig / system-config-securitylevel的最新状态。这是在启动时从system-config-securitylevel-tui获取其规则的地方。如果不保持/ etc / sysconfig / system-config-securitylevel的最新状态,则如果有人运行system-config-securitylevel-tui,则可能会丢失规则存储在/ etc / sysconfig / iptables中。
贾森·谭

1

这个问题非常接近4934的重复,它与397有关。

我将firehol与我开发的用于管理配置文件的Web界面结合使用。

我真的很喜欢firehol,它提供了比直接使用iptables更简单的语法。

  • 您可以使用firehol debug命令准确地生成什么iptables命令
  • 如果您的配置中有错误,并且启动了防火墙,firehol将检测到该错误并恢复为先前的状态。
  • Firehol有一个“ try”命令,您可以使用该命令远程启动防火墙,如果您的更改终止了您的连接,firehol将恢复到以前的状态,如果您没有终止连接,则将要求您确认更改。
  • Firehol有大量预定义的服务,因此您不必确切记住要为某些晦涩的协议打开哪些端口。

1

当然,我们使用自定义的初始化脚本。我可以使用for循环遍历端口列表,解析其他配置文件,例如vpn-users等。太好了!

iptables-restore当然是保存它的最“规范”方法。

我要添加的内容:

请注意,当前的iptables版本会在每次调用时要求内核将其完整的链表返回给它。然后,它将进行您要求执行的一项更改。然后它将再次上传列表。

这很慢(O(n ^ 2)),对我们来说需要5秒,这太长了;-)

如果您使用iptables-restore,则所有操作都可以快速完成。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.