Estou configurando um roteador Linux com iptables
. Quero escrever testes de aceitação para a configuração que afirma coisas como:
- o tráfego de alguém na internet não é encaminhado e
- O TCP para a porta 80 no servidor da Web na DMZ dos hosts na LAN corporativa é encaminhado.
Um FAQ antigo faz alusão a uma iptables -C
opção que permite perguntar algo como "dado um pacote de X a Y, na porta Z, ele seria aceito ou descartado?" Embora o FAQ sugira que funcione assim, para iptables
(mas talvez não ipchains
como é usado nos exemplos) a -C
opção parece não simular um pacote de teste executando todas as regras, mas verifica a existência de uma regra exatamente correspondente. Isso tem pouco valor como teste. Quero afirmar que as regras têm o efeito desejado, não apenas que elas existem.
Eu considerei criar ainda mais VMs de teste e uma rede virtual e, em seguida, pesquisar com ferramentas como nmap
efeitos. No entanto, estou evitando esta solução devido à complexidade de criar todas essas máquinas virtuais adicionais, o que é realmente uma maneira bastante pesada de gerar algum tráfego de teste. Também seria bom ter uma metodologia de teste automatizada que também possa funcionar em um servidor real em produção.
De que outra forma eu poderia resolver esse problema? Existe algum mecanismo que eu possa usar para gerar ou simular tráfego arbitrário e saber se foi (ou seria) descartado ou aceito por iptables
?
fonte
Respostas:
Se você estiver preparado para codificar um pouco, tente o seguinte:
CLONE_NEWNET
sinalizador para aclone
chamada do sistema ou usando os comandosip netns add
eip netns exec
.tun
driver ouip link add
.iptables-restore
tun
ouveth
tun
ouveth
Essa abordagem provavelmente funcionará melhor para testar regras para pacotes encaminhados. As conexões de / para a máquina em que o iptables é usado exigem um pouco mais de esforço, mas também devem ser possíveis de serem testados dessa maneira.
Aqui está um exemplo de uma sequência de comandos que pode ser usada:
Isso criaria três namespaces de rede para testar e carregar um conjunto de regras do 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
telnet
comando obtém a conexão recusada dotest-iptables-lan-host
espaço para nome, o segundotelnet
comando obtém um tempo limite se o conjunto de regras descarta o pacote.Isso não toca no 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á-la em um host separado (físico ou virtual).
fonte
o mundo profissional faz isso com a ajuda do hardware / software fornecido por duas empresas.
www.ixiacom.com
www.spirent.com
No primeiro caso, você pode usar algo como um chassi Ixia 400T + Ixload.
No segundo caso, a linha Smartbits ou Testcenter com seus aplicativos correspondentes
Esses dispositivos podem (entre outras coisas) emular muitos clientes executando diferentes tipos de solicitações no servidor de destino selecionado. Eles estão prontos para testar a segurança de seus servidores, incluindo um conjunto predefinido de testes de ataque, e você sempre pode definir seu próprio conjunto. Eles também têm muitos outros recursos, como testes de estresse de carga e similares.
Não é uma opção barata.
fonte