Aufgabe: Schließen Sie alle eingehenden Verbindungen mit Ausnahme bestimmter IP-Adressen.
Es gibt eine Testumgebung bestehend aus Linux und drei Fenstern mit statischen IP-Adressen. Unter Linux wird Docker mit
zabbix , redmine images installiert. Auf zwei Windows-Computern werden Agenten von zabbix installiert und konfiguriert. Auf dem dritten müssen Sie die Anzeige von zabbix organisieren. Es ist notwendig, andere Benutzer vom zabbix-Server einzuschränken, jedoch nicht von redmine.
Alle Befehle werden als root ausgeführt.
Die offizielle Dokumentation besagt die iptables DOCKER-USER-Regel. Diese Regel muss nur geändert werden. Zuerst schauen wir uns an, was Regeln sind, wir konzentrieren uns nur auf einige Regeln.
Es ist ersichtlich, dass die Regel mit dem Ziel DOCKER-USER die erste in der FORWARD-Regel ist. Daher sollten Sie es nur ändern.
iptables -L FORWARD -n -v Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 421K 169M DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0 419K 167M DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
In der DOCKER-Regeltabelle können Sie sehen, welche Ports geöffnet sind und welche internen IP-Adressen die Container haben.
iptables -L DOCKER -n -v Chain DOCKER (4 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- !docker_redmine docker_redmine 0.0.0.0/0 172.16.237.2 tcp dpt:3000 0 0 ACCEPT udp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.2 udp dpt:162 0 0 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.3 tcp dpt:10051 0 0 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.4 tcp dpt:443 5 248 ACCEPT tcp -- !br-c56432fe07cc br-c56432fe07cc 0.0.0.0/0 172.16.238.4 tcp dpt:80
Die DOCKER-USER-Regel enthält keine speziellen Regeln. Die gesamte Verbindung wird über sich selbst übertragen.
iptables -L DOCKER-USER -n -v Chain DOCKER-USER (1 references) pkts bytes target prot opt in out source destination 4180 1634K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Zunächst werden wir uns mit dem zabbix-Netzwerk befassen, nämlich einen konstanten Netzwerknamen festlegen. Wenn Sie Docker-Compose neu erstellen, ändert sich der Netzwerkname nicht. Nach dem aktuellen Stand des Netzwerks verfügt zabbix über ein Netzwerk namens br-c56432fe07cc, was nicht sehr gut ist. Fügen Sie in der Datei * .yaml eine Zeile hinzu, die für den Netzwerknamen zbx_net_frontend verantwortlich ist: "com.docker.network.bridge.name:" docker_zabbix ".
Teil der Konfiguration:
networks: zbx_net_frontend: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" com.docker.network.bridge.name: "docker_zabbix"
Nachdem wir das Netzwerk neu erstellt haben. Sollte durch Ihre * .yaml ersetzt werden.
docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml down docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml up -d
Wir betrachten die DOCKER-Regel.
iptables -L DOCKER -n -v Chain DOCKER (4 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- !docker_redmine docker_redmine 0.0.0.0/0 172.16.237.2 tcp dpt:3000 0 0 ACCEPT udp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.2 udp dpt:162 0 0 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.3 tcp dpt:10051 0 0 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.4 tcp dpt:443 5 252 ACCEPT tcp -- !docker_zabbix docker_zabbix 0.0.0.0/0 172.16.238.4 tcp dpt:80
Die Regel muss noch zur Tabelle DOCKER-USER hinzugefügt werden. Zunächst führen wir die DROP-Regel für alle Verbindungen zum docker_zabbix-Netzwerk über die externe Schnittstelle ein (ich habe
eth0 ).
iptables -I DOCKER-USER -i eth0 -o docker_zabbix -j DROP
Jetzt werden alle Verbindungen zum docker_zabbix-Netzwerk verweigert. Lassen Sie uns die Verbindung für eine IP-Adresse aktivieren, genauer gesagt, das Paket kann weiter FORWARD fortgesetzt werden.
iptables -I DOCKER-USER -i eth0 -s 192.168.43.55 -j RETURN
Das Netzwerk docker_zabbix wurde hier nicht explizit angegeben. Wir überprüfen die Verfügbarkeit von zabbix vom Host 192.168.43.55 mithilfe von Powershell.
tnc 192.168.43.136 -port 8081 ComputerName : 192.168.43.136 RemoteAddress : 192.168.43.136 RemotePort : 8081 InterfaceAlias : vEthernet (Swich_in) SourceAddress : 192.168.43.55 TcpTestSucceeded : True
Der 8081-Port ist für Zabbix Docker geöffnet. Um sicherzustellen, dass zabbix zu Port 8081 gehört.
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c047f18a4445 zabbix/zabbix-web-nginx-mysql:ubuntu-4.2-latest "docker-entrypoint.sh" About an hour ago Up About an hour (healthy) 0.0.0.0:8081->80/tcp, 127.0.0.1:8443->443/tcp zabbix_zabbix-web-nginx-mysql_1
Es ist jedoch zu beachten, dass in den Regeln Port 80 und nicht 8081 angegeben werden muss. Wenn Sie Port 8081 angeben, wird der Zugriff auf zabbix nicht geöffnet. Für den zweiten Host den Befehl.
iptables -I DOCKER-USER -i eth0 -p tcp --dport 80 -s 192.168.43.10 -j RETURN
Öffnen Sie für den dritten Host nur Port 10051. Auf diesem Host wird ein aktiver Agent verwendet.
iptables -I DOCKER-USER -i eth0 -p tcp --dport 10051 -s 192.168.43.13 -j RETURN
Ein weiteres Problem ist, dass wir nicht aus Containern in die Außenwelt gelangen können. Benachrichtigungsskripte funktionieren nicht und können die Verfügbarkeit von Websites nicht überprüfen. Es gab noch einen Befehl, um bereits vorhandene Verbindungen aufzulösen.
iptables -I DOCKER-USER -i eth0 -o docker_zabbix -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Vergessen Sie nicht, dass nach dem Neustart des Servers die erstellten Regeln gelöscht werden.