Рейтинг:0

Как заблокировать связь контейнера (172.17.0.0/16), кроме шлюза по умолчанию с iptables

флаг cn

Я использую докер для запуска контейнеров.
Я не хочу, чтобы контейнеры имели доступ к другим контейнерам, но я хочу, чтобы они по-прежнему имели доступ к внешней связи, такой как использование удачное обновление.

Сеть контейнеров 172.17.0.0/16, если я просто заблокирую так:

iptables -I ВПЕРЕД -i docker0 -d 172.17.0.0/16 -j УДАЛИТЬ

Это работает, но тогда они не могут использовать удачное обновление, не может найти откуда скачать потому что скорее всего выходит из шлюза.
Поэтому я хотел разрешить подключение к шлюзу (172.17.0.1), поэтому я попытался разрешить это так:

iptables -A ВВОД -i docker0 -d 172.17.0.1/32 -j ПРИНЯТЬ
iptables -A ВЫВОД -o docker0 -d 172.17.0.1/32 -j ПРИНЯТЬ

Но проблема все еще существует, он не может использовать удачное обновление:

Err:1 http://archive.ubuntu.com/ubuntu focus InRelease
  Временная ошибка разрешения «archive.ubuntu.com»

Только когда я удаляю правило блокировки, оно снова работает:

iptables -I ВПЕРЕД -i docker0 -d 172.17.0.0/16 -j УДАЛИТЬ
A.B avatar
флаг cl
A.B
Я не могу воспроизвести вашу проблему. Запустив два контейнера Debian с 172.17.0.2 и 172.17.0.3 на docker0, они не могут взаимодействовать с вашим правилом FORWARD DROP (это потому, что Docker, кстати, активирует `net.bridge.bridge-nf-call-iptables`), но они у вас нет проблем с доступом к хосту через 172.17.0.1 , включая DNS-запросы или успешное выполнение «apt update» и «apt install hello».
A.B avatar
флаг cl
A.B
Возможно, у вас есть другие правила блокировки, и вам просто нужно, как и в случае с FORWARD, заменить эти `-A` на `-I`.
A.B avatar
флаг cl
A.B
Или ваш DNS обрабатывается контейнером... или прокси-сервером... вам придется провести отдельные тесты с IP и DNS, чтобы выяснить, что не так.
A.B avatar
флаг cl
A.B
И последнее, но не менее важное замечание: вы должны создавать дополнительные сети и запускать в них контейнеры для изоляции, а не возиться (вместо Docker) с правилами. https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks
Рейтинг:0
флаг sb

Это позволит вам остановить связь между контейнерами:

Создайте сеть с отключенным ICC:

docker network create -o com.docker.network.bridge.enable_icc=false my_secure_bridge

Тест с созданием двух контейнеров:

docker run --name cnt1 --network=my_secure_bridge -it --rm -d alpine
docker run --name cnt2 --network=my_secure_bridge -it --rm -d alpine
докер проверяет cnt1 | грэп-я 172
    «Шлюз»: «172.19.0.1»,
    "IP-адрес": "172.19.0.2",
докер проверяет cnt2 | грэп-я 172
    «Шлюз»: «172.19.0.1»,
    "IP-адрес": "172.19.0.3",

exec в один и проверьте:

docker exec -it cnt1 sh

проверить подключение к внешнему миру:

/# пинг -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 байт данных
64 байта из 8.8.8.8: seq=0 ttl=114 time=0,852 мс
64 байта из 8.8.8.8: seq=1 ttl=114 time=0,990 мс
64 байта из 8.8.8.8: seq=2 ttl=114 time=0,808 мс
--- 8.8.8.8 статистика пинга ---
3 пакета передано, 3 пакета получено, 0% потери пакетов
туда-обратно мин./средн./макс. = 0,808/0,883/0,990 мс

проверить подключение к другому контейнеру:

/# пинг -w 5 172.19.0.3
PING 172.19.0.3 (172.19.0.3): 56 байт данных
--- Статистика пинга 172.19.0.3 ---
5 пакетов передано, 0 пакетов получено, 100% потери пакетов
djdomi avatar
флаг za
но какая польза от безопасности, если контейнеры не могут соединиться друг с другом?
jabbson avatar
флаг sb
@djdomi, преимущество в том, что это решит проблему в описании, где автор темы заявил, что они «хотят, чтобы контейнеры имели доступ к другим контейнерам, но я хочу, чтобы они по-прежнему имели доступ к внешней связи».
djdomi avatar
флаг za
написать опечатка случайно? вы говорите, что все должны получить доступ в любом месте, это поведение по умолчанию, если правильно настроить?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.