Come posso scrivere test automatici per iptables?


13

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

  • il traffico di un ragazzo su Internet non viene inoltrato, e
  • Il TCP alla porta 80 sul server Web nella DMZ dagli host sulla LAN aziendale viene inoltrato.

Un'antica FAQ fa riferimento a iptables -Cun'opzione che consente di chiedere qualcosa del tipo, "dato un pacchetto da X, a Y, sulla porta Z, sarebbe accettato o eliminato?" Sebbene le FAQ suggeriscano che funzioni in questo modo, per iptables(ma forse non ipchainscome usa negli esempi) l' -Copzione sembra non simulare un pacchetto di test che attraversa tutte le regole, ma piuttosto controlla l'esistenza per una regola esattamente corrispondente. Questo ha poco valore come test. Voglio affermare che le regole hanno l'effetto desiderato, non solo che esistono.

Ho pensato di creare ancora più VM di prova e una rete virtuale, quindi di sondare con strumenti come nmapper gli effetti. Tuttavia, sto evitando questa soluzione a causa della complessità della creazione di tutte quelle macchine virtuali aggiuntive, che è davvero un modo piuttosto pesante per generare traffico di test. Sarebbe anche bello avere una metodologia di test automatizzata che può funzionare anche su un vero server in produzione.

In quale altro modo potrei risolvere questo problema? Esiste un meccanismo che potrei usare per generare o simulare il traffico arbitrario, quindi sapere se è stato (o sarebbe) eliminato o accettato da iptables?


Anche questo potrebbe essere interessante: security.stackexchange.com/questions/31957/…
dawud,

1
@dawud Non credo che nessuno dei due sia un duplicato. So eseguire una scansione delle porte: non è un buon test perché sono limitato a test da e verso destinazioni e fonti che posso controllare. La mia preoccupazione non è nemmeno quella di bloccarmi fuori dal server. Voglio verificare automaticamente che le regole del firewall abbiano effettivamente gli effetti che le ho progettate.
Phil Frost,

Risposte:


2

Se sei pronto a scrivere un po 'di codice, puoi provare questo:

  • Creare un nuovo spazio dei nomi di rete utilizzando il CLONE_NEWNETflag per la clonechiamata di sistema o utilizzando i comandi ip netns adde ip netns exec.
  • In questo spazio dei nomi è presente una serie di interfacce di rete virtuale che utilizzano il tundriver o ip link add.
  • Caricare la configurazione utilizzando iptables-restore
  • Alimenta un numero di pacchetti alle regole tramite i dispositivi tunoveth
  • Osservare che si ottengono i pacchetti corretti dai dispositivi tunoveth

Questo approccio probabilmente funzionerà meglio per testare le regole per i pacchetti inoltrati. Le connessioni da / verso la macchina in cui viene utilizzato iptables richiedono un po 'più di sforzo, ma dovrebbero essere fattibili per 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 dei nomi di rete per i test e caricherà un insieme di regole iptables in uno di essi. Gli altri due svolgono il ruolo di un ragazzo su Internet e un host sulla LAN.

Nell'esempio sopra il primo telnetcomando ottiene la connessione rifiutata dallo test-iptables-lan-hostspazio dei nomi, il secondo telnetcomando ottiene un timeout se il set di regole rilascia il pacchetto.

Questo non tocca lo spazio dei nomi di rete iniziale, che è quello in cui accadrà la tua produzione per impostazione predefinita. L'unico modo per ottenere una maggiore separazione dalla produzione è eseguirlo su un host separato (fisico o virtuale).


0

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

www.ixiacom.com

www.spirent.com

Nel primo caso puoi usare qualcosa come uno chassis Ixia 400T + Ixload.

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

Questi dispositivi possono (tra le altre cose) emulare molti client che eseguono diversi tipi di richieste sul server di destinazione selezionato. Sono pronti per testare la sicurezza dei server, incluso un set predefinito di test di attacco e puoi sempre definire il tuo set. Hanno anche molte altre funzionalità come prove di stress di carico e simili.

Non è un'opzione economica.


è sorprendente vedere come la semplice ignoranza possa tranquillamente declassare le risposte valide ...
Pat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.