Come posso scrivere test automatizzati per iptables?

Sto configurando un router Linux con iptables . Voglio scrivere test di accettazione per la configuration che affermano cose come:

  • il traffico di un ragazzo su Internet non viene inoltrato, e
  • Viene inoltrato TCP alla port 80 sul server web del DMZ da host sulla LAN aziendale.

Un'antica FAQ allude ad un'opzione iptables -C che permette di chiedere qualcosa di simile: "dato un pacchetto da X a Y, sulla port Z, sarebbe stato accettato o abbandonato?" Sebbene le FAQ suggeriscano che funziona in questo modo, per iptables (ma forse non ipchains come utilizza negli esempi) l'opzione -C sembra non simulare un pacchetto di test che esegue tutte le regole, ma controlla l'esistenza di una corrispondenza esattamente regola. Questo ha poco valore come prova. Voglio affermare che le regole hanno l'effetto desiderato, non solo perché esistono.

  • ipset - metodo consigliato per ricaricare le regole dopo il riavvio
  • Errore di richiesta DHCP. Send_packet non è consentito, Come eseguire il debug, cosa significa
  • iptables, bloccando un gran numero di indirizzi IP
  • Come posso consentire le connessioni in output tramite iptables?
  • Imansible accedere al server EC2 tramite indirizzo IP
  • ponte di contenitori LXC per ospitare la networking con differenti intervalli IP
  • Ho preso in considerazione la creazione di ulteriori test VMs e una networking virtuale, quindi sondaggio con strumenti come nmap per gli effetti. Tuttavia, eviterò questa soluzione a causa della complessità della creazione di tutte quelle macchine virtuali aggiuntive, che è veramente un modo pesante per generare un certo traffico di prova. Sarebbe anche bello avere una metodologia di test automatizzata che possa anche lavorare su un vero server in produzione.

    Come potrei risolvere questo problema? C'è qualche meccanismo che potrei utilizzare per generare o simulare traffico arbitrario, quindi sapere se è stato (o sarebbe) caduto o accettato da iptables ?

  • Il firewall mi blocca fuori di ssh
  • Iptables si blocca quando elenca le regole
  • iptables asincroni NAT. i pacchetti cadono dopo la tabella di prerouting
  • È ansible (come?) Per indirizzare i pacchetti UDP in arrivo con un IP di destinazione a un IP di destinazione risolto tramite una query DNS per un URL statico?
  • Iptables: bloccare il traffico in output a exception di alcuni indirizzi IP
  • Devo pregiudicare la mia sicurezza se consentire tutte le connessioni da localhost tramite iptables?
  • 2 Solutions collect form web for “Come posso scrivere test automatizzati per iptables?”

    Se sei disposto a fare un po 'di codifica, puoi provare questo:

    • Creare un nuovo spazio dei nomi di networking utilizzando la bandiera CLONE_NEWNET per la chiamata del sistema clone o utilizzando i ip netns add e ip netns exec .
    • In questa cassa degli spazi dei nomi si ip link add un insieme di interfacce di networking virtuale utilizzando il driver tun o il ip link add .
    • Caricare la configuration utilizzando il iptables-restore
    • Feed un numero di pacchetti alle regole tramite i dispositivi tun o veth
    • Osservate che i pacchetti corretti veth dispositivi tun o veth

    Questo approccio probabilmente funziona meglio per le regole di test per i pacchetti inoltrati. Le connessioni da / per la macchina in cui si utilizza iptables richiedono un po 'più impegno, ma dovrebbe essere ansible testare anche in questo modo.

    Ecco un esempio di una sequenza di comandi che potrebbero essere utilizzati:

     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 

    Ciò creerebbe tre spazi di nomi di networking per il test e caricare un insieme di regole iptables in una di esse. Gli altri due servono come ruolo di qualche ragazzo su internet e un host sulla LAN.

    Nell'esempio precedente il primo command telnet ottiene la connessione rifiutata dal namespace test-iptables-lan-host , il secondo command telnet ottiene un timeout se il ruleset scompone il pacchetto.

    Ciò non tocca lo spazio dei nomi di networking iniziale, che è quello per cui la vostra produzione accadrà per impostazione predefinita. L'unico modo per get più separazione dalla produzione è quello di eseguirlo su un host separato (fisico o virtuale).

    il mondo professionale lo fa con l'aiuto di hardware / software forniti da 2 aziende.

    http://www.ixiacom.com

    http://www.spirent.com

    Nel primo caso è ansible utilizzare qualcosa come un canvasio Ixia 400T + Ixload.

    Nel secondo caso la linea Smartbits o Testcenter con le relative applicazioni

    Questi dispositivi possono (tra l'altro) emulare un sacco di client che eseguono tipi diversi di richieste sul server di destinazione selezionato. Sono pronti a testare la sicurezza dei server, inclusi un set prestabilito di test di attacco più potrai sempre definire il proprio set. Hanno anche molte altre funzionalità come i test di stress per il carico e simili.

    Non è un'opzione economica.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.