So konfigurieren Sie die Linux-Firewall für Docker Swarm unter Ubuntu 16.04

Einführung

Docker Swarm ist eine Funktion von Docker, mit der Docker-Hosts und -Container problemlos in großem Maßstab ausgeführt werden können. Ein Docker Swarm oder Docker-Cluster besteht aus einem oder mehreren Docker-Hosts, die alsmanager-Knoten fungieren, und einer beliebigen Anzahl vonworker-Knoten. Das Einrichten eines solchen Systems erfordert eine sorgfältige Manipulation der Linux-Firewall.

Die Netzwerkanschlüsse, die ein Docker-Schwarm benötigt, um ordnungsgemäß zu funktionieren, sind:

  • TCP-Port2376 für die sichere Docker-Client-Kommunikation. Dieser Port ist erforderlich, damit Docker Machine funktioniert. Docker Machine wird zum Orchestrieren von Docker-Hosts verwendet.

  • TCP-Port2377. Dieser Port wird für die Kommunikation zwischen den Knoten eines Docker-Schwarms oder -Clusters verwendet. Es muss nur auf Manager-Knoten geöffnet werden.

  • TCP- und UDP-Port7946 für die Kommunikation zwischen Knoten (Containernetzwerkerkennung).

  • UDP-Port4789 für Overlay-Netzwerkverkehr (Container-Ingress-Netzwerk).

Note: Abgesehen von diesen Ports müssen Port22 (für SSH-Verkehr) und alle anderen Ports, die für die Ausführung bestimmter Dienste auf dem Cluster erforderlich sind, geöffnet sein.

In diesem Artikel erfahren Sie, wie Sie die Linux-Firewall unter Ubuntu 16.04 mit den verschiedenen Firewall-Verwaltungsanwendungen konfigurieren, die auf allen Linux-Distributionen verfügbar sind. Diese Firewall-Verwaltungsanwendungen sind FirewallD, IPTables Tools und UFW, die unkomplizierte Firewall. UFW ist die Standard-Firewall-Anwendung für Ubuntu-Distributionen, einschließlich Ubuntu 16.04. In diesem Lernprogramm werden drei Methoden behandelt, von denen jede das gleiche Ergebnis liefert. Sie können also die Methode auswählen, mit der Sie am besten vertraut sind.

Voraussetzungen

Bevor Sie mit diesem Artikel fortfahren, sollten Sie:

Note: Sie werden feststellen, dass den Befehlen (und allen Befehlen in diesem Artikel) nichtsudo vorangestellt ist. Dies liegt daran, dass davon ausgegangen wird, dass Sie mit dem Befehldocker-machine ssh am Server angemeldet sind, nachdem Sie ihn mit Docker Machine bereitgestellt haben.

[[Methode-1 - Öffnen von Docker-Schwarm-Ports mit ufw]] == Methode 1 - Öffnen von Docker-Schwarm-Ports mit UFW

Wenn Sie gerade Ihre Docker-Hosts eingerichtet haben, ist UFW bereits installiert. Sie müssen es nur aktivieren und konfigurieren. Folgen Siethis guide, um mehr über die Verwendung von UFW unter Ubuntu 16.04 zu erfahren.

Führen Sie die folgenden Befehle auf den Knoten aus, die als Schwarmmanager fungieren:

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

Laden Sie anschließend UFW neu:

ufw reload

Wenn UFW nicht aktiviert ist, führen Sie den folgenden Befehl aus:

ufw enable

Dies ist möglicherweise nicht erforderlich, aber es schadet nie, den Docker-Daemon jedes Mal neu zu starten, wenn Sie Änderungen an der Firewall vornehmen und diese neu starten:

systemctl restart docker

Führen Sie dann auf jedem Knoten, der als Worker fungieren soll, die folgenden Befehle aus:

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

Laden Sie anschließend UFW neu:

ufw reload

Wenn UFW nicht aktiviert ist, aktivieren Sie es:

ufw enable

Starten Sie dann den Docker-Daemon neu:

systemctl restart docker

Das ist alles, was Sie tun müssen, um die erforderlichen Ports für Docker Swarm mithilfe von UFW zu öffnen.

[[Methode-2 - Öffnen von Docker-Schwarm-Ports mit Firewall]] == Methode 2 - Öffnen von Docker-Schwarm-Ports mit FirewallD

FirewallD ist die Standard-Firewall-Anwendung auf Fedora, CentOS und anderen darauf basierenden Linux-Distributionen. FirewallD ist jedoch auch für andere Linux-Distributionen verfügbar, einschließlich Ubuntu 16.04.

Wenn Sie FirewallD anstelle von UFW verwenden möchten, deinstallieren Sie zuerst UFW:

apt-get purge ufw

Dann installiere FirewallD:

apt-get install firewalld

Stellen Sie sicher, dass es ausgeführt wird:

systemctl status firewalld

Wenn es nicht läuft, starte es:

systemctl start firewalld

Aktivieren Sie es dann, damit es beim Booten startet:

systemctl enable firewalld

Verwenden Sie auf dem Knoten, der ein Swarm-Manager sein wird, die folgenden Befehle, um die erforderlichen Ports zu öffnen:

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

[.note] #Note: Wenn Sie einen Fehler machen und einen Eintrag entfernen müssen, geben Sie Folgendes ein:
firewall-cmd --remove-port=port-number/tcp —permanent.
#

Laden Sie anschließend die Firewall neu:

firewall-cmd --reload

Starten Sie dann Docker neu.

systemctl restart docker

Führen Sie dann auf jedem Knoten, der als Schwarmarbeiter fungiert, die folgenden Befehle aus:

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

Laden Sie anschließend die Firewall neu:

firewall-cmd --reload

Starten Sie dann Docker neu.

systemctl restart docker

Sie haben FirewallD erfolgreich verwendet, um die erforderlichen Ports für Docker Swarm zu öffnen.

[[Methode-3 - Öffnen von Docker-Schwarm-Ports mit iptables]] == Methode 3 - Öffnen von Docker-Schwarm-Ports mit IPTables

Um IPtables auf einer Linux-Distribution verwenden zu können, müssen Sie zunächst alle anderen Firewall-Dienstprogramme deinstallieren. Wenn Sie von FirewallD oder UFW wechseln, deinstallieren Sie diese zuerst.

Installieren Sie dann das Paketiptables-persistent, das das automatische Laden der IPtables-Regeln verwaltet:

apt-get install iptables-persistent

Leeren Sie als Nächstes alle vorhandenen Regeln mit dem folgenden Befehl:

netfilter-persistent flush

Jetzt können Sie Regeln mit dem Dienstprogrammiptableshinzufügen. Dieser erste Befehlssatz sollte auf den Knoten ausgeführt werden, die als Schwarmmanager dienen.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

Nachdem Sie alle Befehle eingegeben haben, speichern Sie die Regeln auf der Festplatte:

netfilter-persistent save

Starten Sie dann Docker neu.

sudo systemctl restart docker

Führen Sie auf den Knoten, die als Schwarmarbeiter fungieren, die folgenden Befehle aus:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

Speichern Sie diese neuen Regeln auf der Festplatte:

netfilter-persistent save

Starten Sie dann Docker neu:

sudo systemctl restart docker

Das ist alles, was Sie brauchen, um die erforderlichen Ports für Docker Swarm mithilfe von IPTables zu öffnen. Weitere Informationen zur Funktionsweise dieser Regeln finden Sie im LernprogrammHow the Iptables Firewall Works.

Wenn Sie nach dieser Methode zu FirewallD oder UFW wechseln möchten, müssen Sie zunächst die Firewall stoppen:

sudo netfilter-persistent stop

Dann lösche die Regeln:

sudo netfilter-persistent flush

Speichern Sie abschließend die jetzt leeren Tabellen auf der Festplatte:

sudo netfilter-persistent save

Dann können Sie zu UFW oder FirewallD wechseln.

Fazit

FirewallD, IPTables Tools und UFW sind die drei Firewall-Verwaltungsanwendungen in der Linux-Welt. Sie haben gerade gelernt, wie Sie mit jedem die Netzwerkports öffnen, die zum Einrichten von Docker Swarm erforderlich sind. Welche Methode Sie verwenden, ist nur eine Frage Ihrer persönlichen Präferenz, da alle gleichermaßen in der Lage sind.