Docker Swarm mit UFW schützen

Da Docker die iptables unabhängig von UFW editiert, passt die Konfig nicht mehr ohne weiteres zusammen.

Ergebnis: Ports sind im UFW nicht geöffnet oder sogar explizit geschlossen, werden diese aber von einem Docker Container exposed, stehen sie trotzdem offen.

Lösung:

Sämtliche eventuellen Modifikationen wie bspw. iptables=false rückgängig machen.

Dann folgendes an /etc/ufw/after.rules anhängen:

# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:DOCKER-USER - [0:0]
-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-user-forward

-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12

-A DOCKER-USER -j RETURN
COMMIT
# END UFW AND DOCKER

Um Ports freizugeben dann vergleichbare Kommandos absetzen:

ufw route allow proto tcp from any to any port 80

Das ROUTE ist der entscheidende Punkt. Die restliche Syntax ist wie üblich.

Weitere Beispiele:

ufw route allow proto tcp from any to 172.17.0.2 port 80
ufw route allow proto udp from any to any port 53
ufw route allow proto udp from any to 172.17.0.2 port 53

Quelle: https://hub.docker.com/r/chaifeng/ufw-docker-agent/

Related Post

RunlevelRunlevel

Linux kennt verschiedene Runlevels, in die jederzeit gezielt gewechselt werden kann. Die genaue Runlevel Definition kann sich von Distribution zu Distribution unterscheiden.