Назад | Перейти на главную страницу

Изолируйте контейнеры Docker от процессов, запущенных на хосте

По умолчанию хост Docker отбрасывает сетевые пакеты, нацеленные на его контейнер, если эти пакеты не являются ответами на соединения, инициированные из контейнера. Инициирование подключения к контейнеру извне работает только для опубликовано порты (через NAT). Однако процесс, запущенный на хосте, по-прежнему может инициировать соединение, используя внутренний IP-адрес контейнера.

Я не нашел «официального» способа запретить локальным процессам подключаться к контейнерам. Проанализировав iptables правил Docker, я пришел к выводу, что простейший способ добиться этого - это:

iptables -A OUTPUT -j DOCKER-ISOLATION-STAGE-2

DOCKER-ISOLATION-STAGE-2 просто включает правила отбрасывания всех пакетов, нацеленных на любой из внутренних интерфейсов Docker:

Chain DOCKER-ISOLATION-STAGE-2 (4 references)
 pkts bytes target     prot opt in     out              source               destination
    0     0 DROP       all  --  any    br-dabc893185cc  anywhere             anywhere
    0     0 DROP       all  --  any    docker0          anywhere             anywhere
    0     0 DROP       all  --  any    br-e6c0c86193e5  anywhere             anywhere
    0     0 RETURN     all  --  any    any              anywhere             anywhere

Быстрый тест подтвердил, что это делает то, что я хочу, и я не заметил никаких побочных эффектов. Могло ли это иметь непредвиденные непредвиденные последствия? Есть лучший способ сделать это?

Я использую только мост сети.