Règles iptables personnalisées pour docker utilisant zabbix comme exemple

Tâche: fermez toutes les connexions entrantes, à l'exception d'adresses IP spécifiques.

Il existe un environnement de test composé de Linux et de trois fenêtres avec des adresses IP statiques. Sous linux, docker est installé avec zabbix , redmine images. Et sur deux machines Windows, des agents de zabbix sont installés et configurés, sur le troisième, vous devez organiser la possibilité d'afficher zabbix. Il est nécessaire de restreindre les autres utilisateurs du serveur zabbix, mais pas de redmine.

Toutes les commandes sont exécutées en tant que root.

La documentation officielle indique la règle iptables DOCKER-USER. Il suffit de changer cette règle. Tout d'abord, nous regardons ce que sont les règles, nous nous concentrons uniquement sur certaines règles.

On peut voir que la règle avec DOCKER-USER cible est la première de la règle FORWARD. Par conséquent, vous devez uniquement le modifier.

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 

Dans le tableau des règles DOCKER, vous pouvez voir quels ports sont ouverts et les adresses IP internes des conteneurs.

 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 

Il n'y a pas de règles spéciales dans la règle DOCKER-USER; toute la connexion passe par elle-même.

 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 

Tout d'abord, nous traiterons du réseau zabbix, à savoir, nous établirons un nom de réseau constant. De sorte que lorsque vous recréez docker-compose, le nom du réseau ne change pas. D'après l'état actuel du réseau, zabbix dispose d'un réseau appelé br-c56432fe07cc, ce qui n'est pas très bon. Dans le fichier * .yaml, ajoutez une ligne responsable du nom de réseau zbx_net_frontend: "com.docker.network.bridge.name:" docker_zabbix ".

Une partie de la configuration:

 networks: zbx_net_frontend: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" com.docker.network.bridge.name: "docker_zabbix" 

Après avoir recréé le réseau. Doit être remplacé par votre * .yaml.

 docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml down docker-compose -f docker-compose_v3_ubuntu_mysql_latest.yaml up -d 

Nous regardons la règle DOCKER.

 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 

Il reste à ajouter la règle à la table DOCKER-USER. Tout d'abord, nous introduisons la règle DROP pour toutes les connexions au réseau docker_zabbix depuis l'interface externe (j'ai eth0 ).

 iptables -I DOCKER-USER -i eth0 -o docker_zabbix -j DROP 

Maintenant, toutes les connexions sont refusées au réseau docker_zabbix. Activer la connexion pour une adresse IP, plus précisément, le paquet peut continuer plus loin le long de FORWARD.

 iptables -I DOCKER-USER -i eth0 -s 192.168.43.55 -j RETURN 

Le réseau docker_zabbix n'a pas été explicitement spécifié ici. Nous vérifions la disponibilité de zabbix depuis l'hôte 192.168.43.55 à l'aide de 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 

Le port 8081 est ouvert pour le docker zabbix. Pour vous assurer que zabbix appartient au port 8081.

 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 

Mais il faut noter que les règles doivent spécifier le port 80, pas 8081. Si vous spécifiez le port 8081, l'accès à zabbix ne sera pas ouvert. Pour le deuxième hôte, la commande.

 iptables -I DOCKER-USER -i eth0 -p tcp --dport 80 -s 192.168.43.10 -j RETURN 

Pour le troisième hôte, ouvrez uniquement le port 10051, un agent actif est utilisé sur cet hôte.

 iptables -I DOCKER-USER -i eth0 -p tcp --dport 10051 -s 192.168.43.13 -j RETURN 

Autre problème, nous ne pouvons pas sortir des conteneurs vers le monde extérieur. Les scripts de notification ne fonctionnent pas et ne peuvent pas vérifier la disponibilité des sites. Il y avait une commande de plus pour résoudre les connexions déjà existantes.

 iptables -I DOCKER-USER -i eth0 -o docker_zabbix -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 

N'oubliez pas qu'après le redémarrage du serveur, les règles créées sont effacées.

Source: https://habr.com/ru/post/fr473222/


All Articles