无法通过iptables限制Docker容器访问:指定IP外仍可访问服务求助
问题原因分析
以下是导致容器服务被全网访问的几个核心原因:
容器使用Host网络模式:如果你的容器是通过
--network host启动的,容器服务会直接绑定到主机的网络接口,外部流量会直接进入INPUT链而非FORWARD链。而你的INPUT链策略是ACCEPT,所有流量都会被允许,DOCKER-USER链的规则完全不会生效。容器IP已变更但规则未更新:Docker默认网桥模式下,容器重启后IP可能会发生变化。如果当前容器的实际IP已经不是
192.168.160.2,你规则里的目标IP就无法匹配流量,非授权IP的请求会绕过DROP规则,触发Docker自动生成的DOCKER链ACCEPT规则,从而被允许访问。端口映射与规则不匹配:如果你的端口映射是
-p 主机端口:8050的形式,且主机端口不是8050,比如-p 80:8050,外部请求的目标端口是主机的80端口,虽然DNAT后目标端口会转为容器的8050,但如果容器内服务实际监听的不是8050,或者规则里的dpt:8050配置错误,规则就无法匹配流量。FORWARD链规则顺序错误:若你手动修改过FORWARD链的规则顺序,导致Docker自动生成的DOCKER链规则在DOCKER-USER链之前被执行,那么Docker默认的「允许所有来源访问容器」的规则会先匹配,你的DROP规则就会被跳过。
内容的提问来源于stack exchange,提问作者kaiserlautern
相关产品推荐
相关产品推荐

