2015-05-11 10 views
5

Ich möchte einen Docker Container mit zentralen Protokoll und fail2ban Dienst ausführen, um von Dos/Ddos-Angriffen zu verhindern.Docker - Ändern IPTABLES für Host aus Container

Ich habe ein Problem, einen Container mit solchen Fähigkeiten auszuführen, dass es auch die Hosts Iptables ändern könnte.

Es ist ein Projekt ianblenke/docker-fail2ban aber es ist nicht ...

Erteilen des Container-Flag nur funktioniert privilegiert erlaubt mir iptables auf diesem Behälter zu steuern. Gibt es eine Möglichkeit, Hosts iptables über Container zu steuern?

Grüße.

+0

Warum würden Sie in einem Container laufen fail2ban wollen? – Blusky

+0

Ich führe mehrere Dienste auf verschiedenen Containern aus und möchte einen zentralen Container haben, der DOS/Ddos-Angriffe verhindert ... –

+1

Ich erkunde eine Lehraktivität, die iptables verwendet, um containerisierte mongodb-Replikasets und ähnlich zu partitionieren müssen Host vm iptables aus einem Container stecken. Wie mache ich das (dh welche Befehle im Container erlauben dem Container, den Host vm iptables zu manipulieren?) – psychemedia

Antwort

9

Dockercontainer werden standardmäßig in einem isolierten Netzwerknamespace ausgeführt, in dem sie keinen Zugriff auf die Hostnetzwerkkonfiguration (einschließlich iptables) haben. Wenn Sie möchten, dass Ihr Container die Netzwerkkonfiguration des Hosts ändern kann, müssen Sie die --net=host-Option an docker run übergeben. Von der docker-run(1) Manpage:

--net="bridge" 
    Set the Network mode for the container 
     'bridge': creates a new network stack for the container on the docker bridge 
     'none': no networking for this container 
     'container:': reuses another container network stack 
     'host': use the host network stack inside the container. 
     Note: the host mode gives the container full access to 
     local system services such as D-bus and is therefore 
     considered insecure. 

Sie werden sowohl mit --privileged und --net=host ausführen müssen.

+0

es hat funktioniert Ich dachte ich teste das, aber ich benutzte net = "bridge" - es hat funktioniert - thx. –

+0

Maciej, kannst du mir bitte sagen, wie du vom Container zu den Iptables des Hosts gelangt bist? – jeesty

2

--privileged Flag wird nicht mehr benötigt. Beginnend mit Docker 1.2 können Sie nun Ihr Image mit den Parametern --cap-add=NET_ADMIN und --cap-add=NET_RAW ausführen, die interne iptables erlauben.

Es kann auch wert sein zu beachten, dass in offiziellen Ubuntu-Bilder von Docker Hub iptables Paket nicht installiert ist. So allgemeine Anweisung sollte mit --net=host und --cap-add=NET_ADMIN--cap-add=NET_RAW Optionen

  • apt-get install iptables
  • Lauf Docker Container sein.

Auch, wenn Sie ein Docker Bild, das iptables Paket fehlt und Sie nicht wollen, ein eigenes Bild davon erstellen, können Sie Container mit iptables im gleichen Netzwerk Raum laufen. Z.B. wenn Sie Container container-without-iptables läuft, und Sie wollen einige container-with-iptables im gleichen Netzwerk-Namespace starten, können Sie tun:

docker run -it --pid=container:container-without-iptables --net=container:container-without-iptables --cap-add sys_admin container-with-iptables