用主机防火墙限制了访问来源,可容器发布的端口依然对公网开放,扫描工具能直接连上数据库。

原因不止一个,得分开看。容器运行时直接写底层规则,插在防火墙规则之前。也可能是发布端口时绑定了所有网卡地址。

少数情况下是防火墙本身没有开启转发链的过滤。

上来先确认端口监听在哪个地址

ss -lntp | grep 3306

然后改成只绑本机地址

docker run -p 127.0.0.1:3306:3306 mysql

接着在转发链上补过滤规则

iptables -I DOCKER-USER -p tcp --dport 3306 -j DROP

从外部验证是否已关闭

nc -zv -w 3 服务器IP 3306

这类问题以前遇到过,但这次的触发条件和上次不一样。

这类改动我都写进变更记录,过两周再出问题时能对上号。

恢复的判定其实很直接。外部无法连接该端口,本机应用仍能正常访问容器服务。

只改发布参数对已经在跑的容器没用,必须重建;数据库这类服务最好根本不要发布到公网。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189