0

我正在使用docker和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 上访问我的站点。我有两个应用程序应该通过公共域进行通信。所以应用程序 a 正在尝试连接到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 网络应用程序的名称。

NETWORK ID          NAME                DRIVER              SCOPE
d4ae9febff15        test                bridge              local

ufw状态:

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 可以通过 docker 网络访问应用程序 a 没有任何问题。但是应用程序 a 也可以从外部访问(例如https://appA.mydomain.de)。所以应用程序 b 应该能够访问这个应用程序,但 ufw 阻止了这个。我如何告诉 ufw 允许这种连接?

4

1 回答 1

0

如果要在两个容器之间进行通信,则需要创建自定义桥接网络

sudo docker network create -d bridge <network_name>

然后将两个容器附加到您使用上述命令创建的同一网络。对于我的项目,我已将其添加到我的 docker-compose.yml文件中。对于两个容器

network_mode: network_name

你不需要对ufw做任何事情。它只是一个管理您的端口的防火墙。

于 2019-11-22T16:26:12.387 回答