Docker 端口映射防火墙规则配置
背景
当 docker 使用端口映射时, docker daemon 会创建 DOCKER 链绕过 firewalld 建立 iptables 规则,可能使 firewall 规则失效。
可以通过修改 DOCKER-USER 链来管理 docker 的防火墙规则或禁用 firewalld 直接配置 iptables(不推荐)
1. 停止 docker
不要在 Docker 运行时 Reload firewalld,否则会导致 Docker 链被删除
systemctl stop docker
2. 清除并重建自定义规则链
firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER
3. 允许 Docker 容器出站流量返回
使用 conntrack
模块匹配 RELATED
, ESTABLISHED
两种状态的连接
# 允许出站流量返回,因为建立连接 ESTABLISHED 的数据包已经通过了防火墙的出站规则。
# 此规则优先级为 1
# 没有完全理解这个逻辑,但是加了这条容器内就可以联网了
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 \
-m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT \
-m comment --comment 'Allow containers to connect to the outside world'
4. 配置白名单
# 允许来自 IP 段的所有流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 \
-s 10.60.22.0/24 -j ACCEPT \
-m comment --comment 'Allow IP 10.60.22.0/24 to access'
5. 配置默认阻止
# 阻止其他的流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 10 \
-j REJECT -m comment --comment 'reject all other traffic to DOCKER-USER'
6. Reload 防火墙
firewall-cmd --reload
firewall-cmd --get-active-zones
7. 重启 docker
systemctl start docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix