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