ufw 默认不启用 ip 转发且不处理 nat,需手动开启内核转发、配置 forward 链放行规则、添加 iptables dnat 映射,并确保默认转发策略为 drop,从而实现对外部访问内网服务的精准白名单控制。

UFW 默认不启用 IP 转发,也不处理 NAT 或端口映射,但它可以配合系统内核转发与 iptables 规则,实现对入站连接的精准控制——让外部仅能访问指定内网服务的特定端口,其他一概拒绝。
开启内核 IP 转发
这是所有转发的前提。编辑 /etc/sysctl.conf,取消或添加以下行:
- net.ipv4.ip_forward=1
然后立即生效:
sudo sysctl -p
配置 UFW 允许转发链(FORWARD)
UFW 的默认策略是 DROP FORWARD,需显式放行符合条件的流量。直接修改 /etc/ufw/before.rules,在 *filter 段、COMMIT 之前插入:
- 允许已建立/相关连接通过:
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT - 允许从外网接口(如 eth0)到内网接口(如 eth1 或 docker0)的指定目标(如 192.168.10.5:80):
-A ufw-before-forward -i eth0 -o eth1 -p tcp --dport 80 -d 192.168.10.5 -j ACCEPT - (可选)限制源 IP,增强可控性:
-A ufw-before-forward -i eth0 -s 203.0.113.42 -o eth1 -p tcp --dport 22 -d 192.168.10.6 -j ACCEPT
保存后重载:
sudo ufw reload
配置 DNAT(用 iptables,UFW 不直接支持)
UFW 本身不管理 PREROUTING 链,需手动添加 DNAT 规则将公网端口映射到内网地址。例如:把本机 8080 映射到 192.168.10.5:80:
- sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.10.5:80
- 确保该规则开机持久化(如写入 /etc/ufw/before.rules 的 *nat 段,或使用 iptables-persistent)
禁止默认转发,只留白名单
确认 UFW 的 FORWARD 策略为 DROP(默认即如此),避免遗漏导致内网暴露:
- 检查:sudo ufw status verbose | grep Forward → 应显示 Default: DROP (Incoming), DROP (Outgoing), DROP (Routed)
- 若非如此,运行:sudo ufw default deny routed
所有未明确放行的跨网段流量都会被拦截,真正实现“有限受控”。








