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

Я впервые настраиваю сервер Ubuntu (14.04 LTS), и у меня возникают проблемы с настройкой брандмауэра (UFW).

Мне нужны только ssh и http, поэтому я делаю это:

sudo ufw disable

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp

sudo ufw enable
sudo reboot

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

РЕДАКТИРОВАТЬ : эти базы данных находятся в контейнерах Docker. Может ли это быть связано? это переопределяет мою конфигурацию ufw?

EDIT2 : вывод sudo ufw status verbose

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
44
задан 16 June 2016 в 23:11

9 ответов

Проблема использовала эти -p флаг на контейнерах.

оказывается, что Докер вносит изменения непосредственно на Вашем iptables, которые не показывают с ufw status.

Возможные решения:

  1. Остановка с помощью эти -p флаг. Используйте докера, связывающегося или сети докера вместо этого.

  2. Связывают контейнеры локально, таким образом, они не выставляются вне Вашей машины:

    docker run -p 127.0.0.1:8080:8080 ...

  3. , Если Вы настаиваете на том, чтобы использовать эти -p флаг, скажите докеру не касаться Вашего iptables путем отключения их в /etc/docker/daemon.json и перезапуск:

    { "iptables" : false }

я рекомендую опцию 1 или 2. Остерегайтесь та опция 3 имеет побочные эффекты , как контейнеры, становящиеся не могущей соединиться с Интернетом.

62
ответ дан 17 June 2016 в 09:11
  • 1
    I' ve, замеченный, что планшет идет с предварительно установленным GIMP и it' s x86 версия. Это выполняет использование некоторой виртуальной машины касания человечности, таким образом, это кажется этим it' s возможный установить и выполнить Рабочий стол x86 приложения в касании человечности. I' m, теперь пытаясь узнать, как that' s сделанный. I' m действительно в тот планшет. Это кажется замечательным инструментом для работы с вместо этого движением с моим тяжелым ноутбуком, lol – Ped 26 October 2016 в 07:44

Если Вы используете init систему systemd (Ubuntu 15.10, и позже) редактируют /etc/docker/daemon.json (возможно, должен был бы создать его, если это не существует), удостоверьтесь, что это имеет iptables настроенный ключ:

{   "iptables" : false }
<час>

РЕДАКТИРОВАНИЕ : это могло бы заставить Вас терять соединение с Интернетом из контейнеров

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

4
ответ дан 17 June 2016 в 09:11
  • 1
    На вкладке Additional Drivers следующим является перечисленная NVIDIA Corporation: GM107M (GeForce GTX 860M) Это устройство использует альтернативный драйвер. * Используя X-сервер X.Org - драйвер дисплея Nouveau от xserver-xorg-video-nouveau Неизвестный (открытый исходный код): Неизвестный Это устройство использует альтернативный драйвер. * Используя встроенное микропрограммное обеспечение микрокода Процессора для Intel CPUs от микрокода Intel (собственного) В разделе Nvidia, существует два перечисленные драйвера NVIDIA, но не выбраны - они - двоичные версии 361.42 и 340.96 драйверов NVIDIA – Jim 19 October 2016 в 15:20

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

, я должен был создать файл /etc/docker/daemon.json и вставить следующее:

{
    "iptables": false
}

я затем вышел sudo service docker stop затем sudo service docker start НАКОНЕЦ, докер просто следует соответствующим правилам в UFW.

Дополнительные данные: Докер отвергает UFW!

8
ответ дан 17 June 2016 в 09:11
  • 1
    Нет, основанный на ARM won' t никогда не быть мощными инструментами и you' ре, пытающееся работать на планшете с, я предполагаю Studio Android RAM на 2 ГБ, который требует намного больше. С этим Extra библиотеки взяли бы намного больше. GIMP является довольно легкой программой. – piotrek1543 28 October 2016 в 09:38

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

0
ответ дан 17 June 2016 в 09:11
  • 1
    Почему был бы я устанавливать 361.42, когда документ здесь launchpad.net/~graphics-drivers/+archive/ubuntu/ppa дает следующее как текущий статус: Текущий официальный выпуск: nvidia-370 (370.28) Текущий долговечный выпуск ответвления: nvidia-367 (367.57) Для GeForce 8 и 9 использования серии GPU nvidia-340 (340.98) Shouldn' t я устанавливаю 340.96? – Jim 19 October 2016 в 17:00

Быстрое обходное решение при выполнении Докера и выполнении отображения порта. Можно всегда делать

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

, чтобы препятствовать тому, чтобы Докер был получен доступ снаружи.

2
ответ дан 17 June 2016 в 09:11
  • 1
    361.42 действительно говорит собственный, протестированный. Но я don' t знают если его настолько простой. Одно место говорит, чтобы выполнить lsmod и искать или Nvidia или nouveau в выводе - которым один или другой должен быть там. У меня нет ни одного. Я также задаюсь вопросом, почему в ответ на lshw-C дисплей, Nvidia перечислена как НЕВОСТРЕБОВАННЫЙ дисплей? Я понятия не имею, что продолжается. Я должен сказать, что этот вид материала заставляет меня подвергнуть сомнению свое решение перейти к Linux из Windows. – Jim 19 October 2016 в 16:24

Использование /etc/docker/daemon.json с содержанием

{
  "iptables": false
}

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

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

после создания /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

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

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

Hope, которой это помогает!

2
ответ дан 17 June 2016 в 09:11
  • 1
    361,42 версии говорят что-нибудь о том, чтобы быть собственным или протестированным? – Lben 19 October 2016 в 15:26

В моем случае я закончил тем, что изменил iptables, чтобы предоставить доступ Докеру только от определенного дюйм/с

Согласно ответ ESALA :

, Если Вы используете -p, флаг на Докере контейнеров вносит изменения непосредственно в iptables, игнорируя ufw.

Пример записей, добавленных к iptables Докером

Маршрутизация к цепочке 'ДОКЕРА':

-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

пакеты Передачи от цепочки 'ДОКЕРА' до контейнера:

-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.3:6379

можно изменить iptables для предоставления доступа к цепочке ДОКЕРА только от указанного исходного IP (например, 1.1.1.1):

-A PREROUTING -s 1.1.1.1 -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT -s 1.1.1.1 ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

можно хотеть использовать iptables-save > /tmp/iptables.conf и iptables-restore < /tmp/iptables.conf, чтобы вывести, отредактировать, и восстановить правила iptables.

1
ответ дан 1 October 2019 в 16:21

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

фиксация, чтобы только сделать порт доступным для моих контейнеров докера была этим изменением в моем docker-compose.yml файл:

ports:
- "1234:1234"

к этому:

ports:
- "1234"

Теперь другие контейнеры докера все еще могут использовать порт, но я не могу получить доступ к нему снаружи.

0
ответ дан 1 October 2019 в 16:21
  1. Войдите в свою консоль докера:

    должностное лицо докера sudo-i-t docker_image_name/bin/bash

  2. И затем в Вашей консоли докера:

    sudo apt-get update
    sudo apt-get install ufw
    sudo ufw allow 22
    
  3. Добавьте свои правила ufw и включите ufw

    sudo ufw включают

    • Ваше изображение Докера должно быть запущено с - cap-add=NET_ADMIN

Включить опцию Docker "NET_ADMIN":

1. Контейнер остановки:

остановка докера yourcontainer; 2. Получите контейнерный идентификатор:

докер осматривает yourcontainer; 3. Измените hostconfig.json (докер по умолчанию path:/var/lib/docker, можно изменить Ваш),

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

4. Ищите "CapAdd" и измените пустой указатель к ["NET_ADMIN"];

...., "VolumesFrom": пустой указатель, "CapAdd": ["NET_ADMIN"], "CapDrop": пустой указатель.... 5. Перезапустите докера в хост-машине;

сервисный перезапуск докера; 6. Запустите yourconatiner;

докер запускает yourcontainer;

0
ответ дан 22 November 2019 в 23:59

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

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