侧边栏壁纸
博主头像
Auok Blog

行动起来,活在当下

  • 累计撰写 122 篇文章
  • 累计创建 224 个标签
  • 累计收到 67 条评论

目 录CONTENT

文章目录

防火墙冲突排查与修复指南

faonecze
2026-04-19 / 0 评论 / 0 点赞 / 0 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1Panel + Docker

日期: 2026-04-19
环境: Ubuntu + 1Panel + AMH 面板 + Docker


问题描述

在 1Panel 应用商店安装 Gitea 后,通过浏览器访问提示:

ERR_CONNECTION_TIMED_OUT

排查过程

1. 确认容器状态

sudo docker ps --format "table {{.Names}}\t{{.Ports}}" | grep -i gitea

发现: 容器正常运行,端口映射为 192.168.50.117:3000->3000/tcp

2. 确认端口监听

ss -tlnp | grep 3000

发现: 端口 3000 正常监听在 0.0.0.0

3. 检查防火墙

sudo ufw status          # inactive(未启用)
sudo iptables -L INPUT -n  # 无拦截规则
sudo nft list ruleset 2>/dev/null | grep -E "table|chain|policy"

发现关键问题:

table ip filter {
    type filter hook forward priority filter; policy drop;  ← 元凶
}

ip filter 表的 forward 链默认策略为 drop,所有转发流量被丢弃。

4. 确认双面板冲突

sudo systemctl list-units | grep -E "amh|iptables|firewall"

发现: amh-start.service 处于 active running 状态,与 1Panel 的 nftables 规则冲突。


根本原因

AMH 面板启动
  → 设置自己的 iptables 规则,破坏 Docker 期望的 iptables 环境

Docker 启动容器
  → 尝试在 FORWARD 链添加 ACCEPT 规则
  → 因环境异常,规则添加失败或被覆盖

结果
  → ip filter 表 forward 链 policy drop 生效
  → 所有到容器的转发流量被丢弃
  → Gitea 无法访问

关键点: ip filter 表由 Docker 通过 iptables-nft 兼容层创建,
只能用 iptables 命令操作,nft 命令无法直接修改。


解决方案

临时修复(手动添加转发规则)

sudo iptables -I FORWARD -i br-bb2b988571c8 -j ACCEPT
sudo iptables -I FORWARD -o br-bb2b988571c8 -j ACCEPT

br-bb2b988571c8 为 Gitea 容器所在的 Docker 桥接口名,
可通过 ip link show type bridge 查看实际名称。

持久化规则

sudo apt install iptables-persistent -y
sudo netfilter-persistent save

根治方案(推荐)

停止 AMH,让 Docker 重建正确的防火墙规则:

sudo systemctl stop amh-start.service
sudo systemctl restart docker

重启 Docker 后,它会自动为所有容器重建正确的 FORWARD ACCEPT 规则。

防止复发:禁用 AMH 开机启动

sudo systemctl disable amh-start.service
sudo systemctl is-enabled amh-start.service  # 应输出 disabled

端口说明

端口作用管理方
配置端口(如 5663)对外访问端口,OpenResty 反代1Panel
Docker 随机端口(如 32771)宿主机映射端口Docker
3000容器内部监听端口Gitea

教训总结

  1. 不要在同一台服务器上同时安装两个控制面板(1Panel + AMH),两者的防火墙规则会互相冲突。
  2. ip filter 表由 Docker 的 iptables-nft 创建,只能用 iptables 命令修改,nft 命令会报错。
  3. iptables 规则重启后丢失,需要用 iptables-persistent 持久化。
  4. 排查 Docker 网络问题,优先检查 nft list ruleset 中 forward 链的 policy。

常用排查命令速查

# 查看容器端口映射
sudo docker ps --format "table {{.Names}}\t{{.Ports}}"

# 查看 nftables 规则
sudo nft list ruleset 2>/dev/null | grep -E "table|chain|policy"

# 查看 Docker 桥接口
ip link show type bridge

# 查看 iptables FORWARD 链
sudo iptables -L FORWARD -n

# 查看系统服务状态
sudo systemctl list-units | grep -E "amh|docker|firewall"
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
广告 广告
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin

评论区