Ich habe einen Docker-Container, der Port 3306 dem Internet zugänglich macht. Ich möchte den Zugriff auf bestimmte öffentliche IP-Adressen beschränken. Als Beispiel verwenden wir 1.2.3.4.
Als zusätzliche Bedingung möchte ich, dass die Regeln den Neustart des Docker-Dämons und den Neustart des Servers überleben. Auf diese Weise kann ich iptables-persistent
( iptables-save
/ iptables-restore
) verwenden, um die Regeln beim Neustart des Servers wiederherzustellen, ohne dass der dockerd
Start den Server stört.
Ich habe folgendes versucht:
Ändern der
FORWARD
Kette:iptables -I FORWARD -p tcp --dport 3306 -j REJECT iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
Dies funktioniert, wenn Sie nach dem Starten des Docker-Dämons fertig sind. Beim Neustart des Dämons fügt Docker am oberen Rand der Kette zusätzliche Regeln ein, und meine benutzerdefinierten Regeln werden ignoriert.
Ändern der
DOCKER
Kette:iptables -N DOCKER # if chain does not yet exist iptables -I DOCKER -p tcp --dport 3306 -j REJECT iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
Dies funktioniert bis
dockerd
zum Neustart. Es sieht so aus, als würdedockerd
dieDOCKER
Kette beim Neustart gelöscht, und alle benutzerdefinierten Regeln sind weg.Verwenden Sie
--iptables=false
. Während dies im Prinzip funktioniert, bricht diese Lösung die Standard-Docker-Weiterleitungsfunktionen und erfordert das manuelle Einrichten der Weiterleitungsregeln.
Ich wäre überrascht, wenn es keinen richtigen Weg gibt, dies zu tun. Irgendwelche Ideen?
PS: Ich habe etwas gelesen, ohne Erfolg (z. B. Schritte zum Einschränken externer Verbindungen zum Docker-Container mit iptables ? , Docker - Von außen zugängliche Ports - Regeln für iptables werden ignoriert , aber diese Fragen scheinen das Problem des Neustarts nicht zu lösen. )