我postgreSQL
里面有一个数据库Docker
,我不想将其暴露给主机网络,因为它会导致所有用户看到暴露的数据库端口。 (目前我没有 pfsense 或类似的东西)。
整体配置iptables
如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-1 all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
DOCKER all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.18.0.2 tcp dpt:15672
ACCEPT tcp -- 0.0.0.0/0 172.18.0.18 tcp dpt:8081
ACCEPT tcp -- 0.0.0.0/0 172.18.0.19 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 172.18.0.19 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.18.0.8 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.18.0.13 tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 172.18.0.11 tcp dpt:5432
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
DOCKER-ISOLATION-STAGE-2 all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
target prot opt source destination
我所做的是将 docker 内部的数据库暴露给同一端口上的主机:
0.0.0.0:5432:5432
我iptables
删除了所有连接,只添加了ACCEPT
我的 IP 地址 111.111.111.111 和 222.222.222.222。下面的链接对此进行了解释:
所以我发出了以下命令:
iptables -I DOCKER-USER -s 111.111.111.111 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -s 222.222.222.222 -p tcp --dport 5432 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport PORT_X -j REJECT --reject-with icmp-port-unreachable
通过上述配置,我无法从222.222.222.222
端口 5432 远程登录。
请注意,我已将规则添加到 docker 链中。
我无法理解为什么会发生这种情况,并且我无法从第一个和第二个 IP 地址远程登录到端口。我的配置有问题吗?
答案1
将 IP 地址列入白名单并不是很安全:IP 欺骗很容易被用来绕过它。
手动配置 IPTables 是过度设计问题,而且没有必要。
将容器配置为使用 Unix 套接字(代替 IP 套接字)。这使您可以更好地控制权限。然后,您可以使用ssh
安全隧道将端口转发到本地计算机(到另一个 Unix 套接字或 IP 套接字)。