Come utilizzare Docker con un firewall UFW

0
59

Sorprendentemente, Docker non funziona immediatamente con ’Universal Firewall di Linux,” o UFW. Entrambi modificano la stessa configurazione di iptables e questo può portare a configurazioni errate che espongono contenitori che non avrebbero dovuto essere pubblici. Ecco come risolverlo.

Perché Docker non funziona con UFW?

UFW è previsto essere un firewall molto semplice. Il problema è che sia UFW che Docker tentano di modificare le stesse regole del firewall sottostanti e questo conflitto richiede una configurazione aggiuntiva per essere risolto se si desidera eseguire UFW e Docker insieme.

Se configuri un firewall UFW di base per negare per impostazione predefinita e consentire HTTP e SSH, questo apparirà sicuro, ma non impedirà a Docker di avviare container collegati ad altre porte. Questo problema può essere difficile da rilevare, poiché UFW e Docker sono sistemi separati. UFW ti sta mentendo inconsapevolmente e non mostrerà le porte aperte dai container Docker.

Questo può essere un grosso problema se non lo prendi. Ad esempio, forse volevi eseguire un pannello di amministrazione interno sulla porta 8000 e inserire nella whitelist il tuo indirizzo IP. Sebbene questa non sia la configurazione più sicura per cominciare, di solito va bene, soprattutto se il pannello ha un'autenticazione aggiuntiva.

Tuttavia, UFW mostrerà la regola del firewall come correttamente autorizzata, e ovviamente sarà visibile a te dalla tua posizione nella whitelist. Ma, se viene eseguito tramite Docker, sarà visibile sulla porta 8000 da qualsiasi luogo per impostazione predefinita.

Correzione della configurazione di Docker

Esiste una soluzione fornita da Docker, modificando /etc/default/docker o /etc/docker/daemon.json e semplicemente disattivando del tutto la funzionalità iptables di Docker:

DOCKER_OPTS=”–iptables=false”

Funziona, tuttavia, questa è solo una mezza soluzione. Disabilita la capacità di Docker di gestire la propria rete e può impedire ai container di accedere a Internet immediatamente. Questo può ancora funzionare, ma dovrai mantenere manualmente le regole di iptables per i container Docker e le reti personalizzate, il che è complicato, fastidioso e vanifica lo scopo della semplicità di UFW.

La vera soluzione è complicata, ma fortunatamente è abbastanza comune che esiste un utile repository Github che descrive in dettaglio il problema e i passaggi per risolverlo. In sostanza, devi modificare la configurazione di UFW in /etc/ufw/after.rules per aggiungere il seguente blocco alla fine:

# BEGIN UFW E DOCKER *filter :ufw-user-forward – [0:0] :ufw-docker-logging-deny – [0:0] :DOCKER-USER – [0:0] -A DOCKER-USER -j ufw-user-forward -A DOCKER-USER -j RETURN -s 10.0.0.0/8 -A DOCKER-USER -j RETURN -s 172.16.0.0/12 -A DOCKER-USER -j RETURN -s 192.168.0.0/16 -A DOCKER-USER -p udp -m udp –sport 53 –dport 1024:65535 -j RETURN -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN ,SYN,RST,ACK SYN -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -d 10.0 .0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 -A DOCKER-USER – j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 172.16.0.0/12 -A DOCKER-USER -j RETURN -A ufw-docker-logging-deny -m limit –limit 3/min –limit- burst 10 -j LOG –log-prefix “[UFW DOCKER BLOCK] ” -A ufw-docker-logging-deny -j DROP COMMIT # FINE UFW E DOCKER

Puoi farlo manualmente, ma c'è anche una bella utility fornita in questo repository che lo automatizza e fornisce alcuni comandi utili per controllare lo stato reale del firewall. Puoi scaricarlo da questo repository:

sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker sudo chmod + x /usr/local/bin/ufw-docker

Quindi, installa la configurazione e riavvia UFW.

ufw-docker install sudo systemctl restart ufw

Una volta riavviato, le modifiche dovrebbero essere applicate automaticamente, ma se non lo fanno, potrebbe essere necessario riavviare Docker o la macchina in generale. Una volta abilitato, le porte dovrebbero essere tutte correttamente bloccate.

Autorizzazione di porte container Docker con UFW

Questa soluzione richiede una configurazione leggermente diversa della porta. L'utilità ufw-docker ha un comando che inserisce nella whitelist selettiva le porte per contenitori Docker specifici.

ufw-docker consente httpd 80

Tuttavia, se desideri utilizzare una regola più avanzata, come la whitelist basata su IP,& #8217;dovrò usare ufw route allow

ufw route allow proto tcp da 1.2.3.4 a qualsiasi porta 9443 LEGGI SUCCESSIVO

  • › Quanto lontano può arrivare un'auto elettrica con una sola carica?
  • › Quanto costa ricaricare una batteria?
  • › Questi gadget scacciano le zanzare
  • › I 10 migliori film originali Netflix del 2022
  • › Comprare un Mac? Probabilmente tutto ciò di cui hai bisogno è un chip M1 o M2 di base
  • › “Atari era molto, molto difficile” Nolan Bushnell su Atari, 50 anni dopo