Se você estiver preparado para fazer um pouco de codificação, tente isso:
- Crie um novo namespace de rede usando o sinalizador
CLONE_NEWNET
para a chamada de sistemaclone
ou usando os comandosip netns add
eip netns exec
. - Nesse namespace, crie um conjunto de interfaces de rede virtual usando o
tun
driver ouip link add
. - Carregue a configuração usando
iptables-restore
- Alimente vários pacotes com as regras por meio dos dispositivos
tun
ouveth
- Observe que você obtém os pacotes corretos dos dispositivos
tun
ouveth
Essa abordagem provavelmente funcionará melhor para testar regras para pacotes encaminhados. Conexões para / da máquina onde o iptables é usado requer um pouco mais de esforço, mas deve ser viável para testar dessa forma também.
Aqui está um exemplo de uma seqüência de comandos que podem ser usados:
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
Isso criaria três namespaces de rede para testar e carregar um conjunto de regras de iptables em um deles. Os outros dois servem como o papel de um cara na internet e um host na LAN.
No exemplo acima, o primeiro comando telnet
obtém conexão recusada do namespace test-iptables-lan-host
, o segundo comando telnet
obtém um tempo limite se o conjunto de regras descartar o pacote.
Isso não afeta o namespace inicial da rede, que é o padrão em que toda a sua produção estará acontecendo. A única maneira de obter mais separação de sua produção é executá-lo em um host separado (físico ou virtual).