Uncomplicated Firewall (UFW) non blocca nulla quando si usa Docker

24

Questa è la prima volta che configuro un Ubuntu Server (14.04 LTS) e ho problemi a configurare il firewall (UFW).

Ho solo bisogno di ssh e http , quindi sto facendo questo:

sudo ufw disable

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp

sudo ufw enable
sudo reboot

Ma posso ancora connettermi ai database su altre porte di questa macchina . Qualche idea su cosa sto sbagliando?

EDIT : questi database si trovano sui contenitori Docker. Potrebbe essere correlato? sta sovrascrivendo la mia configurazione ufw?

EDIT2 : output di sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
    
posta ESala 25.07.2015 - 12:00

7 risposte

35

Il problema stava usando il flag -p sui container.

Risulta che Docker apporta modifiche direttamente sul tuo iptables , che non sono mostrate con ufw status .

Le possibili soluzioni sono:

  1. Interrompi l'utilizzo del flag -p . Utilizza invece linker docker o reti docker .

  2. Associa i contenitori localmente in modo che non siano esposti all'esterno della tua macchina:

    docker run -p 127.0.0.1:8080:8080 ...

  3. Se insisti a utilizzare il flag -p , comunica a docker di non toccare iptables disabilitandoli in /etc/docker/daemon.json e riavviando:

    { "iptables" : false }

Raccomando l'opzione 1 o 2. Attenzione l'opzione 3 ha effetti collaterali , come se i contenitori non fossero in grado di connettersi a Internet.

    
risposta data ESala 25.07.2015 - 12:50
8

16.04 presenta nuove sfide. Ho fatto tutti i passaggi come mostrato Esecuzione di Docker dietro il firewall ufw MA NON ho potuto ottenere docker più UFW lavorare il 16.04. In altre parole, indipendentemente da ciò che ho fatto, tutte le porte docker sono state esposte a Internet a livello globale. Fino a quando ho trovato questo: Come impostare Docker 1.12+ per NON interferire con IPTABLES / FirewallD

Ho dovuto creare il file /etc/docker/daemon.json e inserire quanto segue in:

{
    "iptables": false
}

Ho quindi emesso sudo service docker stop e sudo service docker start FINALMENTE la finestra mobile sta semplicemente seguendo le regole appropriate in UFW.

Dati aggiuntivi: Docker esegue l'override UFW!

    
risposta data Hal Jordan 06.12.2016 - 22:50
5

Se stai utilizzando il sistema init di systemd (Ubuntu 15.10 e versioni successive) modifica /etc/docker/daemon.json (potrebbe essere necessario crearlo se non esiste), assicurati che abbia% key% key_de configurato:

{   "iptables" : false }

EDIT : potresti perdere la connessione a Internet dai contenitori

Se hai abilitato UFW, verifica di poter accedere a Internet dai contenitori. in caso contrario, devi definire iptables come DEFAULT_FORWARD_POLICY su ACCEPT e applicare il trucco descritto qui: link

    
risposta data orshachar 05.10.2016 - 14:11
4

Uso di /etc/docker/daemon.json con contenuto

{
  "iptables": false
}

potrebbe sembrare una soluzione , ma funziona solo fino al prossimo riavvio . Dopodiché potresti notare che nessuno dei tuoi contenitori ha accesso a Internet, quindi non puoi ad esempio eseguire il ping di qualsiasi sito web. Potrebbe essere un comportamento indesiderato.

Lo stesso vale per l'associazione di un contenitore a un IP specifico. Potresti non volerlo fare. L'ultima opzione è creare un contenitore e averlo dietro UFW, non importa cosa succede e come si crea questo contenitore, quindi c'è una soluzione:

Dopo aver creato il file /etc/docker/daemon.json , richiama:

sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
ufw reload

quindi imposti il ​​criterio di inoltro predefinito in UFW per accettare e utilizza:

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

Se stai per usare docker-compose, allora l'IP dal comando precedente dovrebbe essere sostituito con l'IP della docker di rete: quando viene eseguito comporre crea con docker-compose up .

Ho descritto il problema e la soluzione in modo più completo in questo articolo

Spero che ti aiuti!

    
risposta data mkubaczyk 08.09.2017 - 21:47
1

Una soluzione veloce è quando si esegue Docker e si esegue la mappatura delle porte. Puoi sempre fare

docker run ...-p 127.0.0.1:<ext pot>:<internal port> ...

per impedire l'accesso al Docker dall'esterno.

    
risposta data kimy82 16.08.2017 - 16:01
0

Usa --network = host quando avvii il container in modo che la finestra mobile esegua il mapping della porta su una rete isolata solo per host invece della rete bridge predefinita. Non vedo alcun modo legale per bloccare la rete a ponte. In alternativa è possibile utilizzare la rete personalizzata definita dall'utente con isolamento.

    
risposta data thecoder 11.03.2017 - 22:10
0
  1. Accedi alla tua console mobile:

      

    sudo docker exec -i -t nome_immagine_armer / bin / bash

  2. E poi all'interno della tua console mobile:

    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 22
    
  3. Aggiungi le tue regole ufw e abilita ufw

      

    sudo ufw enable

    • L'immagine Docker deve essere avviata con --cap-add = NET_ADMIN

Per abilitare l'opzione Docker "NET_ADMIN":

1.Stop Container:

docker stop yourcontainer; 2. Ottieni ID contenitore:

finestra mobile ispeziona yourcontainer; 3. Modificare hostconfig.json (percorso docker predefinito: / var / lib / docker, puoi modificare il tuo)

vim /var/lib/docker/containers/containerid/hostconfig.json

4.Cerca "CapAdd" e modifica null a ["NET_ADMIN"];

...., "VolumesFrom": null, "CapAdd": [ "NET_ADMIN"], "CapDrop": null, .... 5.Riavviare la finestra mobile nella macchina host;

riavvio della finestra mobile di servizio; 6. Avvia yourconatiner;

finestra mobile avvia yourcontainer;

    
risposta data Stefan 03.04.2018 - 15:03

Leggi altre domande sui tag