如何编写iptables自动测试?


13

我正在使用配置Linux路由器iptables。我想为断言这样的配置编写验收测试:

  • 互联网上某人的流量不会转发,并且
  • 从公司LAN上的主机转发到DMZ中Web服务器上端口80的TCP。

古老的FAQ暗示了一个iptables -C选项,该选项允许人们询问诸如“从X到Z端口的Y的数据包,它会被接受还是丢弃?”。尽管FAQ暗示它的工作原理是这样的,iptables但对于(但可能不如ipchains示例中所使用的那样),该-C选项似乎不是模拟运行所有规则的测试数据包,而是检查是否存在完全匹配的规则。作为测试,这没有什么价值。我想断言规则具有预期的效果,而不仅仅是它们的存在。

我考虑过创建更多的测试VM和虚拟网络,然后使用诸如nmap效果之类的工具进行探测。但是,由于创建所有这些其他虚拟机非常复杂,因此我避免使用此解决方案,这实际上是生成某些测试流量的一种繁重的方法。拥有一种自动测试方法也可以在生产中的真实服务器上运行也很好。

我还能怎么解决这个问题?我是否可以使用某种机制来生成或模拟任意流量,然后知道它是否被(或将被)丢弃或接受iptables



1
@dawud我不认为这些都是重复的。我知道如何运行端口扫描:这不是一个很好的测试,因为我仅限于在可以控制的目标和源之间进行测试。我的关注还不是将自己锁定在服务器之外。我想自动测试防火墙规则实际上是否具有我设计的效果。
菲尔·弗罗斯特

Answers:


2

如果您准备进行一些编码,则可以尝试以下操作:

  • 通过使用系统调用的CLONE_NEWNET标志clone或使用ip netns addip netns exec命令来创建新的网络名称空间。
  • 在此命名空间中,使用tun驱动程序或来创建一组虚拟网络接口ip link add
  • 使用以下方式加载配置 iptables-restore
  • 通过tunveth设备向规则提供大量数据包
  • 观察您从tunveth设备中获得了正确的数据包

这种方法可能最适合测试转发数据包的规则。与使用iptables的机器之间的连接需要花费更多的精力,但也应该可以通过这种方式进行测试。

这是可以使用的一系列命令示例:

ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host

ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host

ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0

ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2

ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1

ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2

ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host

这将创建三个用于测试的网络名称空间,并在其中一个中加载一组iptables规则。另外两个充当Internet上某个人的角色,而LAN上充当主机的角色。

在上面的示例中,第一个telnet命令获取test-iptables-lan-host名称空间的连接被拒绝,telnet如果规则集丢弃了数据包,第二个命令获取超时。

这不会影响初始的网络名称空间,这是您的所有生产将默认使用的名称空间。与生产产生更多分离的唯一方法是在单独的主机(物理或虚拟)上运行它。


0

专业领域借助两家公司提供的硬件/软件来做到这一点。

www.ixiacom.com

www.spirent.com

在第一种情况下,您可以使用Ixia 400T机箱+ Ixload。

在第二种情况下,Smartbits或Testcenter系列及其相应的应用程序

这些设备可以(除其他外)模仿许多客户端在您选择的目标服务器上执行不同类型的请求。他们可以随时测试您的服务器安全性,包括一组预定义的攻击测试,而且您始终可以定义自己的一套。它们还具有许多其他功能,例如负载压力测试等。

不便宜的选择。


这是令人惊讶地看到无知怎么朴实可以静静降级有效的答案...
帕特
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.