DOCKER-USER链是Docker预留的自定义防火墙入口,位于filter表中所有Docker自动生成规则之前,确保用户规则优先执行、持久不被覆盖,是安全加固最稳妥的切入点。

DOCKER-USER链是Docker预留的自定义防火墙入口
Docker在iptables的filter表中预置了DOCKER-USER链,位置在所有Docker自动生成规则(如DOCKER、FORWARD)之前。这意味着你添加的规则会先于Docker内部逻辑执行,可用于拦截恶意流量,而不会被Docker重启或重载覆盖——firewalld也不会触碰此链,因此它是安全加固最稳妥的切入点。
只允许必需通信,拒绝其余一切
默认情况下,Docker不对入站流量做限制,DOCKER-USER链初始为空,即“全放行”。要提升安全性,必须显式设置默认拒绝策略,并仅开放真实需要的连接模式:
- 用
iptables -P DOCKER-USER DROP设为默认丢弃(注意:执行前确保已有SSH等管理通道不依赖容器网络,或先加白名单规则) - 放行宿主机到容器的健康检查:
iptables -I DOCKER-USER -i lo -o docker0 -j ACCEPT - 放行指定IP段访问映射端口:
iptables -I DOCKER-USER -s 10.10.0.0/16 -p tcp --dport 8080 -j ACCEPT - 禁止容器主动外连敏感端口:
iptables -I DOCKER-USER -o eth0 -p tcp --dport 22,3389,445 -j DROP
结合应用行为做细粒度控制
单纯按端口控制不够,可叠加连接状态、协议特征或容器元数据(需配合conntrack或ipset)实现更精准防护:
- 限制单个容器每秒新建连接数(防扫描):
iptables -I DOCKER-USER -i docker0 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT - 阻止已知恶意IP访问所有容器:
iptables -I DOCKER-USER -s 203.0.113.42 -j DROP - 禁止容器使用ICMP重定向(防中间人):
iptables -I DOCKER-USER -p icmp --icmp-type redirect -j DROP
让规则持久化且不被覆盖
iptables命令添加的规则在系统重启或Docker服务重载后会丢失。必须通过以下方式固化:
- 将规则导出为文件:
iptables-save > /etc/iptables/docker-user.rules - 创建systemd服务,在docker.service之后启动并加载:
iptables-restore - 禁用firewalld对docker0接口的干预(否则它可能清空DOCKER-USER链):
firewall-cmd --permanent --zone=trusted --add-interface=docker0 && firewall-cmd --reload


















