防火墙访问策略规则集,第3部分
作者:vadim@fwbuilder.org http://www.fwbuilder.org |
本文将继续关于Firewall Builder的一系列文章,这是一个图形化的防火墙配置和管理工具,它支持许多开源防火墙平台以及Cisco IOS访问列表和Cisco ASA(PIX)。 防火墙生成器早期在此站点上引入了防火墙生成器入门,在防火墙生成器中使用防火墙对象 。 防火墙访问策略规则集,第1部分 。 防火墙访问策略规则集,第2部分 。
本文继续介绍访问策略规则的示例,并演示了iptables , PF和Cisco PIX的生成配置 。
有关Firewall Builder,预构建的二进制包和源代码的更多信息,请参见项目网站http://www.fwbuilder.org/上的文档 。 “ Firewall Builder用户指南”中提供了许多iptables,pf和其他规则的示例 。 关注Firewall Builder项目博客 ,了解有关使用Firewall Builder的所有方面的公告和文章。
控制对防火墙的访问
假设我们需要允许SSH访问防火墙。 在最简单的情况下,我们只需在Destination中创建一个具有防火墙对象(fw)的规则,并在Service中创建服务对象SSH。 服务对象SSH可以在标准对象树中的Services / TCP下找到。 这是规则:
这个几乎平凡的规则根据所选择的目标防火墙平台编译完全不同的概念。 生成的iptables规则相当简单:
# Rule 0 (global) # $IPTABLES -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
生成的PF配置使用表格列出属于防火墙的所有IP地址:
table <tbl.r0.d> { 192.0.2.1 , 192.168.1.1 } # Rule 0 (global) # pass in quick inet proto tcp from any to <tbl.r0.d> port 22 keep state
Iptables具有在netfilter引擎内分离不同数据包流路径的链的概念,并且始终针对防火墙本身的数据包始终在INPUT链中处理。 这意味着可以优化生成的iptables脚本。 如果在INPUT链中进行比较,则脚本不必验证目标地址,以确保其属于防火墙,因为内核已经完成了此操作。 PF没有这样的机制,因此生成的PF配置必须将数据包的目标地址与防火墙的所有地址进行比较。 这可以使用PF表更优雅的方式完成,但是我们仍然使防火墙将数据包的目标地址与地址列表进行比较。
Ipfw为此提供了一个快捷方式,它被称为配置选项“我” 。 这里是如何生成的ipfw脚本看起来像是控制ssh访问防火墙的简单规则:
# Rule 0 (global) # "$IPFW" add 10 set 1 permit tcp from any to me 22 in setup keep-state || exit 1
这里的“我”表示属于防火墙的任何地址。
上述截图中的规则#0匹配了在PIX情况下具有特殊含义的服务ssh 。 在那里,使用特殊配置命令“ssh”和“telnet”来代替通用访问列表来配置防火墙对诸如ssh和telnet之类的协议的控制。 当我们为PIX编译完全相同的规则时,我们得到的是:
! Rule 0 (global) ! ssh 0.0.0.0 0.0.0.0 outside ssh 0.0.0.0 0.0.0.0 dmz50 ssh 0.0.0.0 0.0.0.0 inside
此示例中的规则将源地址“any”,这就是为什么生成的PIX命令匹配“0.0.0.0 0.0.0.0”。 同样的原因,Fwbuilder为PIX的所有接口生成了“ssh”命令。
显然,这个规则使我们的防火墙太开放,因为它允许从Internet上的任何主机SSH连接到它。 限制它是一个好主意,以便只允许从内部LAN连接。 这很容易,我们只是将对象“LAN”放在相应规则的源代码中:
所有受支持的防火墙平台的生成配置将遵循相同的模式,但添加数据包的源地址匹配以确保它来自本地LAN。 在PIX的情况下,只有一个“ssh”命令附加到内部接口,因为程序确定该规则的“源”中使用的网络对象仅与防火墙的这个接口相匹配:
! Rule 0 (global) ! ssh 192.168.1.0 255.255.255.0 inside
这更好,但是我们应该小心,不要允许比防火墙更多的协议比我们真正打算。 我们来看一下简单的规则,允许从内部局域网连接到互联网(下面的截图中的规则#0):
逻辑说,目标“任何”应该匹配任何地址,包括属于防火墙本身的地址。 在Firewall Builder中,实际上可以使用该复选框来更改 编译器 标签 防火墙设置 防火墙对象的对话框。 如果复选框 “假设防火墙是任何” 被检查,那么编译器会产生假设“any”与防火墙相匹配的规则。 因此,如果此选项处于打开状态,则该规则允许从内部LAN到防火墙的任何连接,无论协议如何! 以下是我们如何修改允许访问Internet的规则,从中排除防火墙:
我们现在在目的地使用否定; 该规则的含义是“允许从网络上的机器”LAN上的任何协议的连接到除防火墙之外的任何主机“。 我们仍然需要上述规则来允许ssh到防火墙,但允许从LAN访问到任何地方的规则不再打开对防火墙的额外访问。 我将演示生成的iptables和pf配置,以便稍后再进行否定。
但是有什么办法可以使它更加限制吗? 当然有。 将防火墙的访问限制为只有一台机器始终是一个好主意,并使用该机器来编译策略并管理防火墙。 我们把这台机器称为管理站“fw-mgmt”。 这是限制性更强的组合,允许ssh仅从fw-mgmt访问防火墙,允许从LAN访问任何协议上的防火墙,并阻止其他所有内容。 无论设置“假设防火墙是任何一个”的一部分,这种规则的组合都是一样的。
上述三个规则非常好地限制了除专用管理工作站之外的所有来源的防火墙访问。 他们的问题在于,防火墙策略从来不是简单而简单。 在添加更多规则时,您可以添加具有允许访问防火墙的副作用的规则。 这是许多管理员喜欢保留选项“假设防火墙属于任何一个”的原因之一。 无论如何,建立明确访问防火墙的规则可能是一个好主意,并将它们组合在一起。 它看起来像这样的东西:
我不包括生成的iptables,pf,pix代码,因为现在应该清楚它应该如何。 更重要的是,无论选择的目标防火墙平台如何,Firewall Builder GUI中的规则都会完全相同。
这些示例中演示的策略规则很好地限制了对防火墙的访问,同时可以通过ssh远程管理防火墙。 这些规则的问题是管理员必须小心,不要以任何方式破坏它们。 人们会认为在由两个规则组成的策略片段中出错是很难的,但是这种情况发生。 这两个规则只是一个更大的规则集的一小部分,可能不在其顶部的突出位置。 随着新规则被添加到策略中,在某些时候位于上面的一些规则可以阻止访问整个网络或意外地包括防火墙的管理地址的地址范围。 这意味着即使规则在那里,一旦上传和激活更新的策略,对防火墙的访问就会被阻止。 如果防火墙机器远离远程办公室或数据中心,这是非常糟糕的消息。
为了帮助避免这种糟糕(但是太熟悉)的情况,Firewall Builder提供了另一个功能。 要访问它,请在树中选择防火墙对象,然后在编辑器中打开它,然后单击“防火墙设置”按钮。 有关详细信息,请参阅在本网站上使用防火墙对象在防火墙生成器中。 在出现的对话框中,找到如下所示的控件:
输入单个IP,如输入字段中屏幕截图或子网定义所示,然后按“确定”,然后重新编译策略。 这是添加在生成的iptables脚本的顶部的内容:
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # backup ssh access # $IPTABLES -A INPUT -p tcp -m tcp -s 192.168.1.110/255.255.255.255 \ --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT $IPTABLES -A OUTPUT -p tcp -m tcp -d 192.168.1.110/255.255.255.255 \ --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
我在屏幕截图中包含了与“ESTABLISHED,RELATED”相匹配的规则,以证明ssh访问的自动规则是在他们之后添加的。 换句话说,在任何其他规则之前,ssh访问规则将在脚本的开始部分添加。 实际上有两个规则,一个允许链INPUT中的入站数据包,它匹配协议tcp,目标端口22和状态“NEW,ESTABLISHED”。 其他规则允许链OUTPUT中的出站数据包,协议tcp,源端口22和状态“ESTABLISHED,RELATED”。 这种复杂性的目的是确保不仅允许新建立的ssh会话,而且还可以在防火墙配置重新加载之前清除并重新安装iptables规则之前建立的“旧”会话。 这有助于确保用于激活更新的防火墙策略的ssh会话在策略更新过程中没有被阻塞和停止。
所有受支持的防火墙平台的“防火墙设置”对话框都提供了相同的选项。 防火墙生成器总是生成命令以允许ssh到防火墙,并使其成为访问控制规则集中的第一个。
所有管理员需要做的是在“防火墙设置”对话框中输入管理工作站或其所属地址块的IP地址,然后在防火墙上重新编译和更新生成的策略。 没有必要记住添加特殊规则以允许ssh到策略规则集中的防火墙,因为此规则现在自动生成。 生成的规则始终位于所有其他规则之上,因此策略规则集中的任何错误将永远不会阻止对防火墙的ssh访问。 这是减少将自己锁定在自己的防火墙之外的风险的好方法。 强烈建议使用此功能。