Uncomplicated Firewall (UFW) не блокирует ничего при использовании Docker

Ответ Раду хороший, но в зависимости от используемого варианта вы можете использовать pushd и popd, что позволяет сохранять и восстанавливать каталоги. Что-то вроде: alias startTomcat="pushd ~/apache-tomcat-7.0.34/bin; ./startup.sh; popd"

1
задан 16 June 2016 в 23:11

6 ответов

16.04 представляет новые проблемы. Я сделал все шаги, как показано на «Running Docker» за брандмауэром ufw, но я не мог получить докер и UFW для работы с 16.04. Другими словами, независимо от того, что я сделал, все порты докеров стали глобально доступными в Интернете. Пока я не нашел это: Как установить Docker 1.12+, чтобы НЕ мешать IPTABLES / FirewallD

Мне пришлось создать файл /etc/docker/daemon.json и поместить следующее в:

{
    "iptables": false
}

Затем я выпустил sudo service docker stop, затем sudo service docker start FINALLY docker просто выполняет соответствующие правила в UFW.

Дополнительные данные: Запуск Docker за брандмауэром ufw

8
ответ дан 23 May 2018 в 18:47

Если вы используете систему initd systemd (Ubuntu 15.10 и новее), отредактируйте /etc/docker/daemon.json (возможно, потребуется создать ее, если она не существует), убедитесь, что она имеет iptables: [!d0 ]

{   "iptables" : false }

EDIT: это может привести к потере соединения с Интернетом изнутри контейнеров

Если у вас включен UFW, убедитесь, что вы можете получить доступ к Интернету из внутри контейнеров. если нет - вы должны определить DEFAULT_FORWARD_POLICY как ACCEPT на /etc/default/ufw и применить трюк, описанный здесь: https://stackoverflow.com/a/17498195/507564

5
ответ дан 23 May 2018 в 18:47

Использование /etc/docker/daemon.json с контентом

{
  "iptables": false
}

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

То же самое относится к привязке контейнера к определенному IP. Возможно, вы не захотите этого делать. , но он работает только до следующей перезагрузки и того, как вы создаете этот контейнер, поэтому есть решение:

После создания файла /etc/docker/daemon.json вызовите:

sed -i -e 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
ufw reload

, поэтому вы устанавливаете политику приоритета по умолчанию в UFW для принятия и используете:

iptables -t nat -A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE

Если вы собираетесь использовать компоновку docker, тогда приведенная выше команда IP должна быть заменена на IP-адрес создания сетевой докеры создает при запуске с помощью docker-compose up.

Я описал проблему и решение более подробно в этой статье

Надеюсь, что это поможет!

3
ответ дан 23 May 2018 в 18:47

Быстрое обходное решение при запуске Docker и выполнении сопоставления портов. Вы всегда можете сделать

docker run ...-p 127.0.0.1:<ext pot>:<internal port> ...

, чтобы предотвратить доступ к докере извне.

1
ответ дан 23 May 2018 в 18:47

Используйте --network = host при запуске контейнера, поэтому докер будет отображать порт в изолированную сеть только для хоста вместо сети моста по умолчанию. Я не вижу законных способов блокировки мостовой сети. В качестве альтернативы вы можете использовать собственную пользовательскую сеть с изоляцией.

0
ответ дан 23 May 2018 в 18:47
Войдите в консоль докера: sudo docker exec -i -t docker_image_name / bin / bash И затем внутри консоли докера:
sudo apt-get update
sudo apt-get install ufw
sudo ufw allow 22
Добавьте свои правила ufw и включите ufw sudo ufw, чтобы ваше изображение Docker нужно было начать с --cap-add = NET_ADMIN

Чтобы включить опцию «NET_ADMIN» Docker:

Контейнер 1.Stop:

докер останавливает ваш контейнер; 2. Идентификатор контейнера:

докер проверяет ваш контейнер; 3.Modify hostconfig.json (default docker path: / var / lib / docker, вы можете изменить свои)

vim /var/lib/docker/containers/containerid/hostconfig.json

4.Поиск «CapAdd» и изменить значение null на [«NET_ADMIN»];

...., "VolumesFrom": null, "CapAdd": ["NET_ADMIN"], "CapDrop": null, .... 5.Restart docker в хост-машине;

перезагрузка службы докеров; 6. Запустите свойконтинер,

докер запустит ваш контейнер,

0
ответ дан 23 May 2018 в 18:47

Другие вопросы по тегам:

Похожие вопросы: