请帮助理解为什么 FirewallD 允许我连接到一个端口但阻止第二个端口。
有一个带传输的Docker容器:
5cf144eed6f2 maksim77/transmission "/bin/sh -c 'transmis" 14 hours ago Up 16 minutes 0.0.0.0:9091->9091/tcp, 0.0.0.0:51413->51413/tcp transmission
这两个端口(9091 和 51413)均未在 FirewallD 规则中列出:
root@host:maksim #firewall-cmd --list-all-zones | grep active
public (default, active)
trusted (active)
root@host:maksim #firewall-cmd --list-all --zone trusted
trusted (active)
interfaces: docker0
sources:
services:
ports: 4243/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
root@host:maksim #firewall-cmd --list-all --zone public
public (default, active)
interfaces: enp9s0
sources:
services: dhcpv6-client ftp http ssh
ports: 41387/tcp 1900/udp 50213/tcp 8200/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
但是!端口 9091 连接成功,但端口 51413 连接失败。端口 51413 仅适用于 127.0.0.1
答案1
您在防火墙中看不到这些,因为 Docker 本身在防火墙之外打开了端口。
要查看 Docker 正在做什么,请运行:
iptables -L DOCKER
iptables -t nat -L DOCKER
Docker 将自行打开防火墙端口任何端口的容器EXPOSE
,除非你明确禁用此功能。它还允许需要相互通信的容器这样做,因此除非你明确禁用此功能,否则你应该保持启用状态。真的知道自己在做什么。