Остановить блокировку ввода UFW из сети докеров

Я использую докер и ufw. Я добавил в файл /etc/ufw/after.rules следующее:

*filter 
:ufw-user-forward - [0:0] 
:DOCKER-USER - [0:0] 
-A DOCKER-USER -j RETURN -s 10.0.0.0/8 
-A DOCKER-USER -j RETURN -s 172.16.0.0/12 
-A DOCKER-USER -j RETURN -s 192.168.0.0/16 

-A DOCKER-USER -j ufw-user-forward 

-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 

-A DOCKER-USER -j RETURN 
COMMIT 

Это с этого сайта. Это работает, и я могу получить доступ к своим сайтам через порты 80 и 443. У меня есть два приложения, которые должны обмениваться данными через общедоступный домен. Итак, приложение а пытается подключиться к https://appb.mydomain.de, но не работает. Я думаю, что это не работает, потому что ufw блокирует соединение.

Это запись в журнале:

Nov 20 21:49:37 test kernel: [1734126.807194] [UFW BLOCK] IN=br-d4ae9febff15 OUT= PHYSIN=vethea6c129 MAC=02:42:78:ff:3a:25:02:32:ad:18:00:08:08:00 SRC=172.24.0.8 DST=95.214.42.122 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=21125 DF PROTO=TCP SPT=34675 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0 

d4ae9febff15 — это имя сетевого приложения Docker, к которому подключено a.

NETWORK ID          NAME                DRIVER              SCOPE
d4ae9febff15        test                bridge              local

Статус УФВ:

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

80/tcp                     ALLOW FWD   Anywhere                  
443/tcp                    ALLOW FWD   Anywhere                  
80/tcp (v6)                ALLOW FWD   Anywhere (v6)             
443/tcp (v6)               ALLOW FWD   Anywhere (v6) 

Приложение b может без проблем связаться с приложением a через сеть докеров. Но приложение a также доступно извне (например, https://appA.mydomain.de). Таким образом, приложение b должно иметь доступ к этому приложению, но ufw блокирует это. Как я могу указать ufw разрешить такие соединения?


person SamuelTJackson    schedule 22.11.2019    source источник


Ответы (1)


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

sudo docker network create -d bridge <network_name>

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

network_mode: network_name

с ufw ничего делать не нужно. Это просто брандмауэр, который управляет вашими портами.

person Abhishek Kumar    schedule 22.11.2019
comment
Да, я знаю. Они оба подключены к одной сети. Но они также доступны извне (appA.mydomain.de). Таким образом, приложение b также должно иметь возможность подключаться к приложению a через общедоступный домен. И это не работает из-за ufw, я думаю. - person SamuelTJackson; 22.11.2019
comment
Этот URL работает для вас? appA.mydomain.de. потому что для меня это дает сайт недоступен. Можете ли вы сказать мне, на каких портах вы запускаете свои док-контейнеры? Вы открыли эти порты на своем хост-компьютере? - person Abhishek Kumar; 22.11.2019
comment
ну это просто пример. Я не хочу публиковать правильный домен. Приложение доступно. Я могу без проблем вызвать API или открыть интерфейс в своем браузере. Перед контейнером стоит обратный прокси, поэтому открыты только порты 80 и 443. - person SamuelTJackson; 22.11.2019