You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改DOCKER-USER链后被拒端口仍被nmap识别为filtered的问题求助

问题根源

你的规则无效的核心原因是:Docker会对容器绑定的端口做DNAT(网络地址转换),流量到达DOCKER-USER链时,目的端口已经被转换为容器内部的端口,而非你指定的主机80/443端口,导致--dports 80,443无法匹配到目标流量。同时,若流量未被你的规则匹配,可能被其他链的默认DROP策略拦截,从而被nmap识别为filtered。

修正后的规则配置

执行以下命令调整DOCKER-USER链规则,利用连接跟踪模块匹配原始目的端口(即主机上暴露的端口):

# 清空DOCKER-USER链现有规则
sudo iptables -F DOCKER-USER

# 允许公网接口(ens3)访问主机80、443端口的转发流量(匹配原始目的端口)
sudo iptables -I DOCKER-USER -i ens3 -p tcp -m conntrack --ctstate DNAT --ctorigdstport 80,443 -j ACCEPT

# 允许已建立/相关的返回流量(确保通信正常)
sudo iptables -I DOCKER-USER -o ens3 -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 拒绝其他TCP转发流量,返回tcp-reset(让nmap识别为closed)
sudo iptables -A DOCKER-USER -i ens3 -p tcp -j REJECT --reject-with tcp-reset

# 拒绝其他UDP转发流量,返回icmp-port-unreachable
sudo iptables -A DOCKER-USER -i ens3 -p udp -j REJECT --reject-with icmp-port-unreachable

验证与额外检查

  1. 查看DOCKER-USER链规则是否生效:

    sudo iptables -vL DOCKER-USER
    

    确认规则的数据包计数(pkts列)是否有增长,说明流量被匹配。

  2. 检查系统默认防火墙策略:

    • 若使用ufw或firewalld,需确保它们未覆盖iptables规则,可临时禁用测试:
      sudo systemctl stop ufw
      # 或
      sudo systemctl stop firewalld
      
    • 查看FORWARD链默认策略,确保不是DROP(若为DROP,需调整或补充规则):
      sudo iptables -L FORWARD
      
  3. 外部扫描测试:
    使用另一台机器的nmap扫描你的公网IP,避免本地扫描(本地流量走lo接口,不匹配-i ens3规则):

    nmap -p- <你的公网IP>
    

规则持久化

若规则生效,需将其持久化避免重启后丢失,可使用iptables-save:

sudo iptables-save > /etc/iptables/rules.v4

(部分系统需安装iptables-persistent包来自动加载规则)

内容的提问来源于stack exchange,提问作者Thomas Ramé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:20:18