¿Cómo restringir el puerto de un contenedor expuesto por Docker solo de una lista de IP? Solo esta lista de IP podría acceder a este puerto.
Intenté eso:
iptables -I DOCKER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_1 --destination HOST_IP_1 -j ACCEPT iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_2 --destination HOST_IP_1 -j ACCEPT iptables -I DOCKER -p tcp --dport PORT_X --source EXTERNAL_IP_3 --destination HOST_IP_1 -j ACCEPTYo tuve el mismo problema. Lo resolví con estas reglas:
iptables -I DOCKER-USER -i <your_interface_name> -j DROP iptables -I DOCKER-USER -i <your_interface_name> -s <your_first_ip> -j ACCEPT iptables -I DOCKER-USER -i <your_interface_name> -s <your_second_ip> -j ACCEPT Atención, DOCKER-USER es una cadena que no se eliminará cuando service docker restart
Debería poder agregar su bandera de puerto, pero no soy un experto y no es mi necesidad.
Su política es la lista blanca, es mejor crear una chain personalizada de usuario para manejar esto solo.
Por ejemplo, tengo un contenedor redis , quiero que solo sirva para IP específicas:
$ docker run -d -p 6379:6379 redis:2.8 Después de iniciar el contenedor Redis, las iptables se ven así:
$ iptables -t filter -nL Chain DOCKER (1 references) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:6379Crea nuestra cadena personalizada:
$ iptables -N CUSTOM_REDIS $ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 172.31.101.37 --destination 172.17.0.2 -j ACCEPT $ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 172.31.101.38 --destination 172.17.0.2 -j ACCEPT $ iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 0.0.0.0/0 --destination 172.17.0.2 -j DROPReemplace la regla original con una cadena personalizada:
$ iptables -R DOCKER 1 -p tcp --source 0.0.0.0/0 --destination 172.17.0.2 --dport 6379 -j CUSTOM_REDIS Ahora mi redis solo puede acceder por ip: 172.31.101.37 y 172.31.101.38 .
Nota:
172.17.0.2 es la ip del contenedor redisDe la guía acoplable aquí :
Las reglas de reenvío de Docker permiten todas las direcciones IP de origen externo de forma predeterminada. Para permitir que solo una IP o red específica acceda a los contenedores, inserte una regla negada en la parte superior de la cadena de filtros DOCKER. Por ejemplo, para restringir el acceso externo de modo que solo la fuente IP 8.8.8.8 pueda acceder a los contenedores, se podría agregar la siguiente regla:
$ iptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j DROP
En su caso, dado que desea permitir múltiples direcciones IP, creo que algo como esto debería funcionar:
iptables -I DOCKER -s EXTERNAL_IP_1 -p tcp --dport PORT_X -j ACCEPT iptables -I DOCKER -s EXTERNAL_IP_2 -p tcp --dport PORT_X -j ACCEPT iptables -I DOCKER -s EXTERNAL_IP_3 -p tcp --dport PORT_X -j ACCEPT iptables -I DOCKER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable