UFW для разрешения трафика из Docker

#docker #ufw

#docker #ufw

Вопрос:

У меня есть сервер разработки с этой конфигурацией UFW:

 $ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT       Anywhere                  
22/tcp (v6)                LIMIT       Anywhere (v6)             

123/udp                    ALLOW OUT   Anywhere                  
DNS                        ALLOW OUT   Anywhere                  
80/tcp                     ALLOW OUT   Anywhere                  
443/tcp                    ALLOW OUT   Anywhere                  
22/tcp                     ALLOW OUT   Anywhere                  
123/udp (v6)               ALLOW OUT   Anywhere (v6)             
DNS (v6)                   ALLOW OUT   Anywhere (v6)             
80/tcp (v6)                ALLOW OUT   Anywhere (v6)             
443/tcp (v6)               ALLOW OUT   Anywhere (v6)             
22/tcp (v6)                ALLOW OUT   Anywhere (v6)
 

Моя проблема в том, что это также блокирует внутренний трафик из Docker.

Я запускаю контейнер Docker, который сопоставляется 8000:8000 http , и если я отключу UFW, я смогу отправлять запросы, как и ожидалось. Однако, когда включен UFW, я не могу достичь порта 8000 даже внутренне.

Как мне разрешить этот трафик для внутреннего использования? Я хочу получить доступ через ssh -L 8000:127.0.0.1:8000 example.com , поэтому я не хочу открывать порт 8000 для внешнего доступа.


Обновить:

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

 To                         Action      From
--                         ------      ----
Anywhere on lo             ALLOW       Anywhere                  
Anywhere on 127.0.0.1      ALLOW       Anywhere                  
Anywhere (v6) on lo        ALLOW       Anywhere (v6)             
Anywhere (v6) on 127.0.0.1 ALLOW       Anywhere (v6)             

Anywhere                   ALLOW OUT   Anywhere on lo            
Anywhere                   ALLOW OUT   Anywhere on 127.0.0.1     
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on lo       
Anywhere (v6)              ALLOW OUT   Anywhere (v6) on 127.0.0.1
 

Это не решает проблему.

Ответ №1:

ufw allow from <some_address> to any app <app_name>

На странице руководства указано не вводить номер порта:

Вы не должны указывать протокол ни с одним синтаксисом, а с расширенным синтаксисом используйте app вместо предложения port . Вероятно, это означает, что он позволит <app_name> использовать любой порт, который ему нужен

Другие команды, которые могут быть полезны:

ufw app info <app_name> В котором указана информация о <app_name> профиле пользователя.

ufw app update <app_name>
Который обновляет <app_name> профиль. Вы можете использовать all для обновления всех профилей приложений.

Вы можете использовать:

ufw app update --add-new <app_name> команда для добавления нового профиля <app_name> и его обновления, следуя правилам, которые вы установили ufw app default <policy> .

Профили приложений хранятся в /etc/ufw/applications.d и иногда /etc/services .

Для получения дополнительной информации, чтобы просмотреть справочную страницу для ufw

man ufw

Обновление: Docker использует частный интерфейс под названием docker0 , вы можете разрешить доступ для docker к вашей хост-системе.

Вы можете использовать информацию в интерфейсе для создания правила, например, ufw allow out on docker0 from 172.17.0.0/16

Используя порт, вы можете сделать это правило более строгим, используя следующую команду, например

ufw allow out on docker0 from 172.17.0.0/16 port 80 proto tcp

Docker создает новый интерфейс для контейнеров, и для его просмотра вы можете использовать ifconfig команду:

 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:a4:5e:e9:9c  txqueuelen 0  (Ethernet)
        RX packets 87  bytes 17172 (17.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 117  bytes 14956 (14.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
This interface routes traffic through 172.17.xxx.xxx
 

Комментарии:

1. Разве это не откроет порты для доступа извне? Они должны быть доступны только изнутри машины.

2. Если вы используете 127.0.0.1, он должен оставаться внутренним, поскольку это адрес обратной связи.

3. Я не понимаю, как это поможет. «Приложения» — это просто псевдонимы номеров портов, и я не заинтересован в открытии для каждого порта.