在防火墙生成器中使用IP和MAC地址对象
作者:vadim@fwbuilder.org http://www.fwbuilder.org |
本文继续关于Fireall Builder的一系列文章,一个支持许多开源防火墙平台以及Cisco IOS访问列表和Cisco ASA(PIX)的图形化防火墙配置和管理工具。 防火墙生成器早期在此站点上引入, 使用 防火墙生成器入门,在防火墙生成器中使用内置版本控制,在防火墙生成器中使用内置策略安装程序 , 在防火墙生成器中使用防火墙对象 。 本文演示如何在Firewall Builder中使用IPv4 , IPv6和MAC地址对象。
有关Firewall Builder,预构建的二进制包和源代码,文档和Firewall Builder Cookbook的更多信息 ,请访问项目网站www.fwbuilder.org 。 观看项目博客 ,了解使用Firewall Builder的所有方面的公告和文章。
IP和MAC地址对象
IPv4地址对象
常规地址对象描述单个IPv4地址。 它可以是一个接口对象的子代,在这种情况下,它表示其IP地址和网络掩码,或者它可以用作独立对象。 在后一种情况下,它没有网络掩码,位于对象树的对象/地址分支中。
IPv4地址对象用作接口地址时
在这种情况下,此对象位于接口对象的正下方。 这可以是主机或防火墙对象的接口。 要创建此类地址,请使用与界面关联的上下文菜单(鼠标右键单击树中的Interface对象以打开菜单)。
其对话框提供以下输入字段:
- 名称 - 这是对象的名称。 使用描述性名称,因为在flrewall策略中使用地址对象时,会使用此名称进行标记。 如果他们的名字相似,可能很难从另一个地址中分辨一个地址。
- 地址 - 这是一个IP地址。 GUI小部件为在八位字节字段中输入的值提供语法控制。 (保存对象时,此语法控件会激活。)
注意:典型的错误是将该对象解释为主机或flrewall的接口所属的子网的地址。 该对象表示接口的地址,而不是网络地址。 (所以,192.168.1.1,不是192.168.1.0)
- 网络掩码 - 这是分配给该接口的网络掩码。 您可以使用传统方法(255.255.255.0)或使用网络位长度符号(“24”)输入网络掩码。 位长度类型的网络掩码由Firewall Builder转换为传统的网络掩码。
- DNS查找 - 如果父主机或防火墙对象与实际机器名称相同,则单击此按钮将生成一个填充接口IP地址和子网的DNS查询。 只有父主机或防火墙对象的名称用于DNS查询,父接口的名称被忽略,可以是任何东西。
- 评论 - 这是一个自由格式的文本字段的评论。
考虑规则,如下面的截图所示,我们使用上面的屏幕截图显示的IPv4地址(记住,它属于接口):
如果iptables Firewall Builder从此规则生成以下命令:
$IPTABLES -A INPUT -p tcp -m tcp -d 172.16.22.1 --dport 22 -m state --state NEW -j ACCEPT
请注意,即使Address对象具有网络掩码,生成的命令将其地址与主机地址相匹配。 这是因为网络掩码仅用于描述接口连接到的子网。 当这个地址对象在一个规则中使用时,应该理解的目的是匹配它所属接口的地址而不是子网上的任何地址。 如果需要匹配整个子网,请使用网络对象。
这个iptables规则被放置在INPUT链中,因为“Destination”中的对象是防火墙接口的地址。 在处理iptables目标防火墙平台的策略时,Firewall Builder将规则的源和目标地址与防火墙所有接口的地址进行比较,以查找控制访问和从防火墙访问的规则,并将其置于INPUT或OUTPUT链。 这只适用于iptables。
用作独立对象时的IPv4地址对象
在这种情况下,此对象位于对象树的“ 对象/地址”部分,并且没有网络掩码输入字段。 要创建此类地址,请使用主“ 新建对象 ”菜单项“ 新建地址”或“树”中与“ 地址”文件夹关联的上下文菜单(鼠标右键单击树中的“接口”对象以打开菜单)。
对话框字段名称 , 地址和注释具有与用于描述接口地址的Address对象相同的用途和属性。
DNS查找按钮可用于使用DNS查询自动填充地址字段。 程序为“A”记录运行DNS查询,其名称为Address对象。 如果您不打算使用此功能并可手动填充该地址,该名称不必与任何DNS记录相匹配。 DNS查询功能只是一个方便,但要使用它,对象的名称必须与DNS记录一致。
IPv6地址对象
IPv6地址对象与IPv4地址对象类似。 就像IPv4地址一样,它既可以作为接口对象的子对象,也可以独立使用。
用作接口地址的IPv6地址对象
如果用于描述接口的IPv6地址,则其具有表示为位长度的网络掩码。 与IPv4地址对象不同,IPv6的网络掩码从不表示为完全冒号分隔的八位字节字符串。
用作独立对象时的IPv6地址对象
在这种情况下,此对象位于对象树的对象/地址部分(与独立IPv4地址相同的位置),并且没有网络掩码输入字段。 要创建此类地址,请使用主新建对象菜单项New Address IPv6或与树中Addresses文件夹关联的上下文菜单(鼠标右键单击树中的Interface对象以打开菜单)。
策略编译器根据与IPv4规则相同的算法处理策略规则中的IPv6地址。 例如,就像IPv4一样,iptables的编译器会检查地址是否匹配防火墙任何接口的地址,以确定该规则是否应放在INPUT或OUTPUT链中。
考虑规则,如下面的截图所示,我们使用两个IPv6地址对象。 一个对象属于防火墙内的接口,另一个对象属于项目网站的IPv6地址。
对于iptables,Firewall Builder会根据此规则生成以下命令:
$IP6TABLES -A INPUT -p tcp -m tcp -d fe80::21d:9ff:fe8b:8e94 --dport 80 -m state --state NEW -j ACCEPT
$IP6TABLES -A FORWARD -p tcp -m tcp -d 2001:470:1f0e:162::2 --dport 80 -m state --state NEW -j ACCEPT
匹配由对象guardian-2:eth1:ipv6描述的地址的规则进入INPUT链,因为编译器检测到该规则与为防火墙本身而前往的数据包匹配,iptables在INPUT链中进行检查。 匹配由对象ipv6.fwbuilder.org描述的地址的规则转到FORWARD链,因为这些数据包通过防火墙。
物理地址对象
物理地址对象描述硬件或媒体地址。 对于以太网,这将是接口的MAC地址。 目前只支持以太网MAC地址,但将来可能会添加对其他类型的支持。 物理地址对象只能是接口的子节点,它不能作为独立对象存在。 要创建这种地址对象,请使用与接口对象相关联的上下文菜单项“添加MAC地址” 。 每个接口只允许一个物理地址对象,该程序强制执行此限制。 如果使用SNMP发现创建防火墙或主机对象,则所有接口将自动填充其MAC地址。
- 名称 - 这是对象的名称。 该字段使用主机自动填充:interface:创建对象时的addressType描述性名称,但可以稍后进行更改。 如果您更改名称,请使用描述性的内容,因为在防火墙策略中使用地址对象时,会使用该名称进行标记。 如果他们的名字相似,可能很难从另一个地址中分辨一个地址。
- 地址 - 这是物理或媒体地址的字符串表示形式。 对于许多类型的媒体,这将是二进制表示。 例如,以太网地址将被表示为6个八位字节的字符串。
- 评论 - 这是一个自由格式的文本字段的评论。
在策略规则中使用物理地址对象
只有少数平板平台真正支持物理地址转换。 Netfllter / iptables目前是唯一可以做到并由Firewall Builder支持的平台。
如果在策略或NAT规则元素(源或目标)中使用具有多个地址和物理地址子对象的Interface对象,则策略编译器将尝试使用其中的所有规则生成规则。 编译器实际上是通过依次使用每个地址生成多个规则来实现的。 这大致对应于在这些地址上使用逻辑运算“OR”:如果我们的接口有两个地址Address1和Address2,那么生成的规则将匹配,如果数据包中的地址是Address1 OR Address2。 物理地址的情况是不同的。 如果接口具有物理地址,则编译器将尝试构建一组与每个IP地址及其MAC地址组合匹配的规则。 这个变化的原因如下:
假设我们在网络上有一个非常重要的主机。 我们创建一个Host对象,然后添加一个接口。 接口应该具有Address和Physical Address对象,如下面的屏幕截图所示(这两个子对象在接口eth0下的树中可见):
请注意,主机对象对话框中的 “MAC匹配”复选框将被选中,这使得编译器使用该主机接口的MAC地址。
因为这是一个非常重要的主机,我们希望确保源IP是这个主机的数据包真的来自它,而不是欺骗。 实现此目标的最佳方法是使用强身份验证,例如使用IPSEC协议。 使用IPSEC不在本文档的范围之内; 我们现在的目标是显示检查分组的MAC地址可以提高安全性。
来自该主机的真实分组和欺骗的分组都具有该主机的接口的源IP地址,但是如果spooflng正在进行,则源MAC地址将是不同的。 我们可以使用它来捕获和丢弃欺骗的数据包。 在这种情况下,有三种可能的方式来构建安全策略:
在规则元素中仅使用Address对象。 这意味着flrewall只会检查IP地址,并忽略报文的MAC地址。
Firewall Builder为此规则生成以下简单的iptables命令:
$IPTABLES -A FORWARD -s 10.3.14.44 -m state --state NEW -j ACCEPT
仅使用Physical Address对象。 以这种方式构建的规则允许来自可信主机的所有种类的流量即使其IP地址发生变化。
对于此规则,将生成以下iptables命令:
$IPTABLES -A FORWARD -m mac --mac-source 00:1D:09:8B:8E:94 -m state --state NEW -j ACCEPT
使用主机或接口对象。 这样我们就可以得到一个匹配IP地址和MAC地址的规则。 这可能被用作一个复杂的反欺骗规则。
对于此规则,将生成以下iptables命令:
$IPTABLES -A FORWARD -m mac --mac-source 00:1D:09:8B:8E:94 -s 10.3.14.44 -m state --state NEW -j ACCEPT
在规则中使用地址和物理地址对象与使用这些地址和物理地址所属的主机或接口对象不同。 如果我们把代表IP地址和MAC地址的对象放在规则中,会发生什么:
对于此规则,将生成以下iptables命令:
$IPTABLES -A FORWARD -s 10.3.14.44 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -m mac --mac-source 00:1D:09:8B:8E:94 -m state --state NEW -j ACCEPT
在规则元素中使用多个对象就像使用逻辑运算OR将它们捆绑在一起。 如果将地址和物理地址放在上面的屏幕截图中,我们最终得到源地址为10.3.14.44或MAC地址00:1D:09:8B:8E:94的策略匹配数据包,但不一定都在同一时间。 任何设法假装拥有IP地址10.3.14.44的主机即使MAC地址不同,也能通过我们的flrewall发送数据包。 为了实现我们的目标,确保源IP 10.3.14.44的数据包真的属于我们的重要主机,我们应该同时检查其IP地址和MAC地址,只有在IP地址和MAC地址为我们期望他们成为。 这就是为什么Firewall Builder不同地处理物理地址,并生成检查IP地址和物理地址的flrewall代码。
防火墙生成器生成flrewall代码,以检查MAC地址,只有主机对象使用选项“MAC地址转换”打开。 如果此选项关闭,即使物理地址对象存在于主机对象的接口中也将被忽略。 这是因为使用Network Discovery Druid创建的主机对象可以通过SNMP查询可以获得IP地址和MAC地址信息,但很少需要检查MAC地址。 您可以使用Host对象中的MAC地址flltering选项来指定要为主机验证MAC地址。
目标防火墙对与MAC地址匹配的鲁棒设置了一定限制,例如只有源MAC地址可以匹配。 防火墙生成器知道这些限制,如果在导致不可能的iptables命令的规则中使用Physical Address对象,策略编译器将发出错误。