Info
Content

Docker and iptables

При использовании докера нужно быть внимательным с правилами
Докер создает правила и цепочки в таблице nat, поэтому какие-либо запрещающие правила в цепочке INPUT таблицы filter не сработают

Кейс:
Поднят контейнер с nginx и проброшен порт 80

  1. Пакет приходит в nat PREROUTING где указано
    DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
    Это правило отправляет в цепочку DOCKER любой пакет который назначен машине, адрес которой назначен нашей машине. Т.е. все что назначено нам
  2. В цепочке DOCKER есть следующее правило
    DNAT tcp -- anywhere anywhere tcp dpt:http to:172.17.0.3:80
    То есть все что приходит на наш 80 порт нужно отправлять на 80 порт контейнера
  3. Далее, т.к. это транзитный пакет, он уходит в filter FORWARD и спустя некоторый путь попадает в следующее правило
    ACCEPT tcp -- anywhere 172.17.0.3 tcp dpt:http
  4. Ну и по всей видимости попадает в контейнер (я не разобрался на 100% как именно он туда попадает)

В общем filter INPUT не сработает

No Comments
Back to top