Gestire regole parallele per iptav ipv4 e ipv6?


10

Di recente abbiamo iniziato a sperimentare IPv6 e uno dei primi problemi che dobbiamo affrontare è quello di gestire un insieme completamente separato di regole firewall (iptables / ip6ables Linux) per i due stack di protocollo. La nostra logica firewall si basa in gran parte su una serie di reti specifiche per scopi (ad es. 10.0.0.0/24 è la rete di workstation del personale, 10.1.0.0/24 è la rete del database, 10.2.0.0/24 è la rete del server Web, ecc. ) e la logica per IPv6 e IPv4 sarà sostanzialmente la stessa, modulo prefissi di rete diversi.

Cosa fanno le persone a gestire questo tipo di situazione? Idealmente, vorrei essere in grado di generare sia set di regole iptatable che ip6table dallo stesso file sorgente. Ho già messo insieme qualcosa usando bash, ma non è necessariamente carino e sospetto che una soluzione migliore debba esistere da qualche parte là fuori.

Sarei particolarmente interessato a una soluzione basata su Puppet che faccia buon uso dei meccanismi di dipendenza di Puppet per implementare l'ordinamento relativo delle regole (o gruppi di regole).

Risposte:


5

Firewall Builder ha esattamente ciò di cui hai bisogno. È possibile creare un set di regole, contrassegnarlo come "combinato ipv4 + ipv6" e posizionare le reti ipv4 e ipv6 assegnate allo stesso segmento (come "rete di database" ecc.) Nella stessa regola. Il programma quindi genera due configurazioni iptables separate una per ipv4 e un'altra per ipv6. Questo capitolo della Guida per l'utente lo illustra, sebbene utilizzi come esempio gli elenchi di accesso ai router Cisco. Funziona esattamente allo stesso modo per iptables.

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html


4

Di recente mi sono anche confrontato con la creazione di regole iptables per entrambi, IPv4 e IPv6. Dopo alcune ricerche ho finito per usare il ramo IPH6 FireHOL di Phil Whineray .

FireHOL è un generatore di firewall iptables che produce firewall con filtraggio di pacchetti iptables con stato, su host e router Linux con un numero qualsiasi di interfacce di rete, un numero qualsiasi di rotte, un numero qualsiasi di servizi serviti, un numero qualsiasi di complessità tra le variazioni dei servizi (incluso positivo e negativo espressioni). (Fonte: sito Web FireHOL)

Purtroppo la versione ufficiale non supporta IPv6. Ma Phil Whineray ha aggiunto il supporto in un ramo non ufficiale.

Alcuni esempi di come appare la configurazione:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

Puoi dare un'occhiata a questo ramo di firehol a:

git clone git://repo.or.cz/fireholvi.git

Ulteriore documentazione è disponibile nella documentazione ufficiale di FireHOL o nel file Leggimi aggiuntivo su IPv6 .

Personalmente probabilmente sarei cauto quando lo uso su una macchina di produzione in cui è importante avere un firewall affidabile al 100%. Ma vale comunque la pena dare un'occhiata.


3

Nell'interesse dell'evangelizzazione continua della causa, suggerisco di fare leva su Puppet per risolverlo. Al momento non esiste un buon script per la gestione delle regole di iptables 4 e 6, ma non sarebbe una vera sfida scriverne uno neanche una volta che ti sarai adattato alla lingua.

Il repository git pubblico di Mediawiki è una fantastica miniera di schemi di configurazione e include una classe iptables che fornirà una buona base per iniziare. Puoi modificarlo per applicare le regole a entrambi gli stack contemporaneamente per impostazione predefinita e avere un flag per regole diverse quando stai basando le cose su regole IPv4 o IPv6.

Il vantaggio finale alla fine di questo è che le regole del firewall per un servizio possono essere scritte nella definizione del servizio e distribuite e rimosse automaticamente quando un servizio viene distribuito o rimosso.


Darò un'occhiata. Finora non sono rimasto molto impressionato dalle soluzioni tipiche basate su Puppet per la gestione di iptables. In particolare, sembrano tutti implementare esplicitamente l'ordinamento, sia attraverso nomi di file di file di frammenti o tramite indici espliciti forniti nelle regole Puppet, piuttosto che usare i meccanismi di risoluzione delle dipendenze di Puppet, che è quello che voglio davvero. Se la soluzione collegata qui evita questi problemi, sono tutto per questo.
Larks

@larsks Sono d'accordo e sono stato ugualmente frustrato dal fatto che non sia stata rilasciata una buona soluzione generica ... ma forse è tempo che io lo faccia da solo. Puppet consentirà di utilizzare before => Resource['declared_name']su qualsiasi definizione, quindi puoi ordinarli usando un'implementazione che non tenti di ordinare le cose con frammenti. Un buon uso di Augueas per la struttura eviterebbe anche questo problema: fai i tuoi commenti sull'albero superiore e il tuo ordine sotto quello che desideri.
Jeff Ferland,

I miei tentativi di risolvere questo problema non sono andati molto lontano. Quello che ho fatto per ora è (a) installare frammenti in una sottodirectory e poi (b) usare rcorder per metterli in ordine di dipendenza. Funziona, ma poiché si basa esclusivamente sulla gestione di file di frammenti, non si presta a un ambiente misto ipv4 / ipv6. Non ho davvero esaminato attentamente l'utilizzo di Augeas per aiutare a risolvere il problema. Sarei curioso di sapere se hai qualche prototipo di codice là fuori.
Larks

2

Rispondendo alla mia domanda qui, ma ho pensato che queste informazioni potrebbero essere di interesse generale:

Mentre esaminavo questa domanda, mi sono imbattuto in ufw ( Firewall semplice) dalla gente di Ubuntu. Con IPV6 abilitato nella configurazione ufw, ufw gestirà in parallelo le regole iptables e ip6tables. Ciò significa che puoi fare qualcosa del genere:

# ufw allow ssh/tcp

E finiamo con:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

Il che si traduce in regole iptables / ip6tables che assomigliano a questo:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

Ufw supporta anche i profili delle applicazioni, che consentono di creare gruppi di porte con nome. Puoi farlo:

# ufw allow 'WWW Full'

E finiscono per aprire entrambe le porte 80 e 443 (sia per IPv4 che per IPv6).

Ho appena iniziato a guardarlo, ma sembra essere abbastanza ben messo insieme.


0

Poiché non è ancora presente nell'elenco: Shorewall è uno strumento di configurazione del filtro pacchetti ricco di funzionalità ampiamente adottato e regolarmente aggiornato. Aveva il supporto IPv6 per un po 'di tempo.


1
La mia comprensione è che "shorewall" è solo ipv4 e "shorewall6" è solo ipv6, uno deve usare entrambi per coprire entrambi i protocolli. Possono condividere una configurazione comune?
Larks
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.