Перейти к содержанию

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.

Рекомендации для эксплуатации

  1. Управляйте параметрами публикации портов в Docker Compose и политикой сети приложения.
  2. Проверяйте, на каком интерфейсе опубликован контейнер (например, 127.0.0.1 против 0.0.0.0).
  3. Не удаляйте созданные Docker цепочки вручную.
  4. Не импортируйте старый dump iptables после изменения Docker-сетей без проверки последствий.
  5. Проверяйте исходящий трафик: контейнеры могут использовать цепочки FORWARD даже при OUTPUT DROP на хосте.

См. общая модель iptables и контейнеризация.