使用 arp 表查找的 iptables 阻止脚本

使用 arp 表查找的 iptables 阻止脚本

我需要阻止 LAN 上的某些主机(多操作系统)访问互联网。我决定尝试通过 iptables 通过 mac 地址阻止某些主机,但我无法使用工作站的 mac 地址,因为它会遍历 L3 交换机,并且框架会使用交换机的接口 mac 重建。我已经使用 wireshark 的tshark实用程序确认了这一点。

我知道我可以通过 IP 地址进行阻止,但我无法控制用户是否更改其 IP,从而绕过阻止。我认为可以使用执行以下操作的脚本来实现解决方案:

  1. 使用 fping 更新 arp 表:fping -c 1 -g 10.10.10.0/24
  2. 使用 grep arp 表从 mac 地址列表中获取 IP,例如在文件中:arp -n | grep "00:11:22:aa:bb:cc" | awk '{print $1}'
  3. 构建哈希或数组,并使用需要阻止的 IP 地址动态更新 iptables。我可能会使用文件并执行类似操作iptables-restore < ips_to_deny
  4. 每 5 分钟左右运行一次此脚本。(不太确定时间)

那么...问题是。您认为这种方法有什么缺陷吗?或者有什么改进方法?

  • 我想到的是 Mac 欺骗,但主机用户没有管理员访问权限。

如果这很重要的话,我会在脚本中使用 perl 或 ruby​​。

答案1

在组织大型局域网聚会(>500 名用户)时,我不得不处理类似的情况,在这种情况下您无法控制工作站,这非常有趣。

如果您的 L3 交换机(从技术上讲是路由器)等级相当高,那么它可能可以通过 SNMP 进行管理,并且您可以读取其相应子网(直接连接到站点的子网)的 ARP 表,以检索有效的 mac/ip 映射。

但是,如果您担心机器会在未经您同意的情况下更改 IP,那么您可能还应该担心机器会更改 MAC。如果您相信机器不会更改 MAC,我们使用的另一个选项是解析 DHCP 服务器的日志。作为奖励,您还可以关联 DHCP 日志和 ARP 表来检测欺骗者。

如果您的交换机支持,您还可以使用 802.1x 身份验证。在此模式下,机器在开始实际交换数据包之前必须通过 Radius 向交换机进行身份验证,并且对于每次身份验证,Radius 服务器都会收到站点的身份、物理位置和 MAC。

答案2

在我看来,这一切似乎过于复杂,而且很容易成为那些“定制”解决方案之一,而这些解决方案往往会在未来成为问题(即“某某在离开公司之前很久就设置了这个,但没有人知道如何更改它”)。所以,我个人会考虑一些更基于标准的东西。

除非您需要将具有 Internet 访问权限和不具有 Internet 访问权限的设备放在同一个 L2 网络段上,否则我会实施 802.1X MAC 身份验证绕过 (MAB)。您可以这样做,以便将经过身份验证的设备分配到一个 VLAN,而将无法进行身份验证的设备放置在第二个 VLAN 中。

如果您的交换机不支持仅 MAB(即 MAB 仅在 IEEE 802.1X 身份验证失败后才生效),您可以将 IEEE 身份验证的重试和超时值减少到最小值。由于您不关心 IEEE 身份验证,而且它会很快失败,因此除非您选择这样做,否则您不需要配置任何类型的请求者。

为了更加安全,您可以为所有应具有 Internet 访问权限的设备配置 MAC 地址,仅允许这些设备进行身份验证并放入提供 Internet 访问权限的 VLAN 中。但是,如果您只想限制某些设备(并让新设备自动连接到 Internet),则可以对其进行配置,以便将失败的身份验证放入具有 Internet 访问权限的 VLAN 中,而将成功的身份验证放入没有访问权限的 VLAN 中。

您没有说明为什么要这样做,但如果有任何理由的话,这也将提供轻松限制两组主机之间访问的机会。

相关内容