Eu tenho uma resposta que limitará os contêineres do docker para poder acessar apenas um único endereço IP fora do host. Usando esta regra iptables no host:
iptables -I FORWARD -i docker0 ! -d 8.8.8.8 -j QUEDA
significa que de dentro de qualquer contêiner docker só é possível acessar o endereço IP 8.8.8.8.
Isso é bastante drástico - basicamente, se o destino NÃO for 8.8.8.8, descarte o pacote.
Qual é a melhor maneira de configurar regras que me permitam limitar os contêineres a um determinado número de endereços IP?
Responder1
Eu precisava garantir que a cópia de desenvolvimento do site que estava no contêiner do docker não pudesse acessar nenhum recurso ativo - Paypal, várias APIs, etc. O código no site era legado e muitas coisas/URLs eram codificadas.
A maneira como consegui isso foi ter algo assim no script de construção:
echo
echo "Setting up firewall rules for all docker containers..."
sudo ipset create dockerdests hash:ip -exist
sudo ipset add dockerdests x.x.x.x -exist
sudo ipset add dockerdests y.y.y.y -exist
sudo ipset add dockerdests 8.8.8.8 -exist
sudo ipset add dockerdests 8.8.4.4 -exist
sudo iptables -I FORWARD 1 -i docker0 -m set --match-set dockerdests dst -j ACCEPT
sudo iptables -I FORWARD 2 -i docker0 -j DROP
onde xxxx e yyyy são recursos de desenvolvimento.