У меня есть ответ, который ограничит контейнеры docker, чтобы они могли получить доступ только к одному IP-адресу за пределами хоста. Использование этого правила iptables на хосте:
iptables -I ПЕРЕСЫЛКА -i docker0 ! -d 8.8.8.8 -j ОТБРОС
означает, что изнутри любого Docker-контейнера возможен доступ только к IP-адресу 8.8.8.8.
Это довольно радикально — по сути, если пункт назначения НЕ 8.8.8.8, то пакет отбрасывается.
Как лучше всего настроить правила, которые позволят мне ограничить контейнеры определенным количеством IP-адресов?
решение1
Мне нужно было убедиться, что копия веб-сайта для разработки, находящаяся в контейнере Docker, не может получить доступ ни к каким активным ресурсам — PayPal, различным API и т. д. Код на веб-сайте был устаревшим, и многие вещи/URL-адреса были жестко закодированы.
Я добился этого, добавив в скрипт сборки что-то вроде этого:
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
где xxxx и yyyy — ресурсы разработки.