Docker и iptables: что важно знать¶
В официальном руководстве CLOUD 5.2 Docker описан как компонент базовой поставки. При запуске контейнерных сетей он может создавать цепочки DOCKER, DOCKER-USER, DOCKER-FORWARD и правила NAT. Названия и набор цепочек зависят от версии движка и конфигурации сети.
Проверки только на чтение¶
systemctl is-active docker
sudo docker network ls
sudo iptables -S FORWARD
sudo iptables -S DOCKER-USER
sudo iptables -t nat -S
Если Docker не установлен или цепочка DOCKER-USER отсутствует, сначала проверьте версию и сетевой драйвер Docker. Не создавайте вручную служебные цепочки по шаблону без понимания текущей топологии.
Отличие доступа к хосту от публикации порта контейнера¶
Подключение к SSH-серверу хоста фильтруется через INPUT. Пакет к опубликованному Docker-порту может пройти DNAT и FORWARD, поэтому добавление разрешения в INPUT не всегда изменит доступ к контейнеру.
При проверке опубликованного сервиса изучите:
sudo docker ps --format 'table {{.Names}}\t{{.Ports}}'
sudo docker port ИМЯ_КОНТЕЙНЕРА 2>/dev/null || true
sudo iptables -L FORWARD -n -v --line-numbers
sudo iptables -t nat -L -n -v --line-numbers
В правилах DOCKER-USER можно задавать дополнительные ограничения транзитного трафика, но конкретную команду добавления правила следует проектировать под реальный маршрут пакета и используемый Docker networking.
Рекомендации для эксплуатации¶
- Управляйте параметрами публикации портов в Docker Compose и политикой сети приложения.
- Проверяйте, на каком интерфейсе опубликован контейнер (например,
127.0.0.1против0.0.0.0). - Не удаляйте созданные Docker цепочки вручную.
- Не импортируйте старый dump iptables после изменения Docker-сетей без проверки последствий.
- Проверяйте исходящий трафик: контейнеры могут использовать цепочки
FORWARDдаже приOUTPUT DROPна хосте.