Порты Docker видны на интерфейсе, даже если UFW отказал в доступе - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть цифровая океаническая капля, которую я создал, используя докер-машину с изображением ubuntu-18-04-x64.Я развернул на нем три контейнера с помощью docker-compose, один из которых - nginx с портами 80 и 8080, перенаправленными на 0.0.0.0 и, таким образом, прослушивающими все интерфейсы.

  nginx:
image: noumena/nrg-vpp/nginx:latest
ports:
- "80:80"
- "8080:8080"
depends_on:
- engine
- api

Брандмауэр настроен на блокировкувесь трафик на eth0 (открытый интерфейс DO), за исключением 2376 для докера, и открытые порты 22, 80, 8080 на eth1 (частный интерфейс DO).

22/tcp on eth1             ALLOW       Anywhere
8080/tcp on eth1           ALLOW       Anywhere
80/tcp on eth1             ALLOW       Anywhere
2376/tcp on eth0           ALLOW       Anywhere
Anywhere on eth0           DENY        Anywhere
Anywhere on eth1           DENY        Anywhere
22/tcp (v6) on eth1        ALLOW       Anywhere (v6)
8080/tcp (v6) on eth1      ALLOW       Anywhere (v6)
80/tcp (v6) on eth1        ALLOW       Anywhere (v6)
2376/tcp (v6) on eth0      ALLOW       Anywhere (v6)
Anywhere (v6) on eth0      DENY        Anywhere (v6)
Anywhere (v6) on eth1      DENY        Anywhere (v6)

Однако порты, перенаправленные докером (80,8080) все еще видны на eth0, любой другой порт не виден на eth 0 (например, 22)

17:10 $ telnet public-ip 22 
Trying x.x.x.x... 
telnet: connect to address x.x.x.x: Operation timed out 
telnet: Unable to connect to remote host 

17:16 $ telnet public-ip 80 
Trying x.x.x.x... 
Connected to x.x.x.x. 
Escape character is '^]'. 
^] 
telnet> Connection closed. 

17:17 $ telnet public-ip 8080 
Trying x.x.x.x...  
Connected to x.x.x.x.
Escape character is '^]'. 
^] 
telnet> Connection closed.

С какой стати эти порты будут открыты?Переадресация происходит до включения брандмауэра?

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

Кто-нибудь сталкивался с подобным поведением раньше?Мне бы очень хотелось понять, что происходит.

1 Ответ

0 голосов
/ 09 февраля 2019

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

Основные, большинствоПохоже, что на GitHub отслеживается такое поведение: # 22054 .В зависимости от вашей точной конфигурации брандмауэра (UFW?), Один из комментариев (особенно один раз, начиная примерно с 2017 года) может содержать решение для вас.

См. Также этот ответ на аналогичный вопрос о ServerFault, от того же человека, что и один из успешных советов по # 22054 вопросу .

...