温馨提示×

Ubuntu防火墙如何设置端口转发

小樊
34
2025-12-30 09:34:00
栏目: 智能运维

Ubuntu 防火墙端口转发设置指南

一、前置条件与策略

  • 启用内核 IP 转发:编辑 /etc/sysctl.conf,取消注释或新增 net.ipv4.ip_forward=1,执行 sudo sysctl -p 使配置生效。
  • 放行转发流量:编辑 /etc/default/ufw,将 DEFAULT_FORWARD_POLICY=“DROP” 改为 “ACCEPT”,否则转发的数据包可能被默认丢弃。
  • 说明:UFW 基于 iptables 工作,端口转发通过 NAT 规则实现,需同时处理转发策略与 NAT 规则。

二、方法一 使用 UFW 配置端口转发(推荐)

  • 编辑 UFW 的 NAT 前置规则:打开 /etc/ufw/before.rules,在 *filter 段之前加入如下模板(注意保留文件末尾的 COMMIT):
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    
    # 本机端口转发:将外部 TCP 8080 转发到本机 80
    -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
    
    # 转发到其他主机:将外部 TCP 8080 转发到 192.168.1.100:80
    # -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    # -A POSTROUTING -j MASQUERADE
    
    COMMIT
    
  • 放行目标端口或服务:例如 sudo ufw allow 80/tcp;若通过 SSH 管理,建议先放行 OpenSSH
  • 使配置生效:执行 sudo ufw disable && sudo ufw enable(或 sudo systemctl restart ufw)。
  • 验证:查看状态 sudo ufw status,查看 NAT 规则 sudo iptables -t nat -L -v -n,并用 curl/telnet 测试连通性。

三、方法二 直接使用 iptables 配置

  • 本机端口转发(REDIRECT):
    sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
    
  • 转发到其他主机(DNAT + MASQUERADE):
    sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
    sudo iptables -t nat -A POSTROUTING -j MASQUERADE
    
  • 持久化规则:
    • Debian/Ubuntu 常用 iptables-persistent:安装后在安装向导中选择保存当前规则,后续可用 sudo netfilter-persistent save
    • 或手动保存:sudo iptables-save > /etc/iptables/rules.v4

四、常见问题与排查

  • 规则未生效:确认已启用 ip_forward、已将 DEFAULT_FORWARD_POLICY 设为 ACCEPT,并在 before.rules 中正确加入 *nat … COMMIT 段;修改后执行 sudo ufw disable && sudo ufw enable
  • 外部能访问但无响应:检查目标服务是否在目标端口监听(如 ss -ltnp | grep :80),以及云服务器安全组/外部防火墙是否放行对应端口。
  • 本机访问失败:REDIRECT 仅影响外部进入的流量,本机访问请直接使用 127.0.0.1:目标端口 或改用 DNAT 规则指向本机地址。
  • 返回流量被丢弃:确保 POSTROUTINGMASQUERADE/SNAT,且转发策略为 ACCEPT

0