Docker e Shorewall

Sto utilizzando Shorewall sul mio server come semplice firewall autonomo e vorrei anche usare Docker .

Utilizzando un contenitore Docker e il suo dock di reindirizzamento della port imposta le proprie regole / catene iptables che verranno uccisi se viene riavviato shorewall. Così il contenitore diventerà irraggiungibile .

Qualcuno ha riuscito a salvare / ripristinare le regole del docker su un riavvio di shorewall o qualcuno ha un'altra soluzione?

Guarda anche:

  • Shorewall Mailinglist con una domanda simile
  • GitHub Numero # 2801 @ dotcloud / docker

7 Solutions collect form web for “Docker e Shorewall”

Le seguenti modifiche di configuration dovrebbero garantire il stream di traffico tra Docker e l'host Shorewall. Testato su Shorewall 4.5.21.9 ma dovrebbe applicarsi alle versioni più recenti:

/etc/shorewall/shorewall.conf

Assicurarsi che l'inoltro IP sia abilitato (la maggior parte degli elementi di configuration sono Sì / No, ma questo è "On"):

IP_FORWARDING=On 

/ etc / shorewall / masq

Abilita la mascheratura (NAT) per la tua networking privata Docker (se utilizzi una networking diversa, vale a dire lanciate il --bip=#.#.#.#/# con --bip=#.#.#.#/# , Quindi cambiate di conseguenza). Cambiare eth0 su qualsiasi interface della macchina host con connettività esterna:

 #INTERFACE:DEST SOURCE eth0 172.17.0.0/16 

/ etc / shorewall / interfaces

Aggiungere una voce di interface in modo che Shorewall conosca quale interface la zona dock si riferisce a:

 #ZONE INTERFACE OPTIONS dock docker0 

/ etc / shorewall / zone

Crea una nuova zona; nota, il docker è troppo lungo e causerà un errore "nome di zona non valida".

 #ZONE INTERFACE dock ipv4 

/ etc / shorewall / Politica

Probabilmente si desidera consentire ai container Docker di parlare con la macchina host e con Internet, quindi questo è un buon punto di partenza:

 #SOURCE DEST POLICY # ...(other policies)... dock all ACCEPT # ...(other policies, catch-all)... 

Potresti anche avere bisogno di una politica analoga ACCEPT per il traffico da fw a dock , se non l'hai già aperto con fw a all .

È ansible rafforzare ulteriormente i file delle regole o delle regole secondo necessità. Ad esempio, quanto sopra non consente esplicitamente il traffico esterno per raggiungere i container Docker; controlla le tue altre zone / politiche / regole per questo.

Dato che Docker ha introdotto la propria funzionalità di isolamento di networking, le altre soluzioni qui elencate non sono più sufficienti se si desidera utilizzare reti personalizzate. Shorewall 5.0.6 introduce il supporto per Docker incluse le reti Docker. Questo:

  • Consente a shorewall e docker di essere avviato / arrestato / riavviato in qualsiasi ordine
  • Evita la necessità di mantenere uno script di estensione

L'ho appena capito sulla mia scatola. Assicurarsi che /etc/shorewall.conf abbia:

IP_FORWARDING=Yes

Docker si basa sull'inoltro e ho distanziato quel "burattino" che lo imposta su "No" su tutti i miei server.

Aggiornamento: Probabilmente hai anche bisogno di travolgere il traffico proveniente dall'accoppiare l'interface WAN.

Modifica /etc/shorewall/masq e avrai bisogno di una row simile a:

br0 172.17.0.0/12

In questo caso, l'interface WAN è in realtà br0 (un ponte), ma il tuo sarà probabilmente qualcosa come eth0. (Utilizzare ifconfig per visualizzare le interfacce e gli indirizzi IP). Sul mio banchina macchina usa 172.17.0.0/24 che è una gamma di indirizzi privati ​​RFC1918. Ciò può differire in altri sisthemes, ma è ansible vedere l'intervallo utilizzando nuovamente ifconfig per cercare l'interface docker0 .

È ansible assicurarsi che le regole di Docker sopravvivano a un riavvio di shorewall creando script di estensione che salvino la catena DOCKER prima del riavvio e quindi ripristinati successivamente. Ho appena messo un post con un esempio di come farlo , anche se sono sicuro che è lontano dall'unico metodo ansible.

Il servizio docker può essere riavviato senza influenzare i contenitori in esecuzione e può essere eseguito dopo un riavvio Shorewall per ricaricare le regole specifiche del docker. Ci sarà ovviamente un breve periodo in cui il networking al contenitore (s) è interrotto.

Questo vale alless per le mie poche installazioni di Archlinux.

L'azione di aggiornamento non purgate l'iptable in modo che se si desidera aggiornare le regole o le politiche, è sufficiente eseguire l'aggiornamento invece di riavviare:

 sudo shorewall refresh 

Ovviamente, il problema rimane se si ha veramente bisogno di riavviare lo shorewall. Quindi, è necessario riavviare l'imbarcazione e ritriggersre i container.

Una ansible opzione è quella di eseguire Docker con l'opzione –net = host, per consentire la connessione hostizzata di applicazioni host senza l'inoltro di ip e NAT.

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