Ubuntu 配置 UFW 端口转发

Ubuntu 默认的防火墙工具是 UFW,通过修改其底层规则文件实现端口转发。

1、启用 IP 转发

编辑 /etc/sysctl.conf,取消注释或添加以下行:

net.ipv4.ip_forward=1

立即生效:

sudo sysctl -p

2、修改 UFW 转发策略

编辑 /etc/default/ufw:

DEFAULT_FORWARD_POLICY="ACCEPT"

3、添加 NAT 规则

编辑 /etc/ufw/before.rules,在 *filter 段落前插入以下内容:

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 11233 -j DNAT --to-destination 192.168.80.63:11233
-A POSTROUTING -j MASQUERADE
COMMIT

#临时添加规则方式,重启后失效:

sudo iptables -t nat -A PREROUTING -p tcp --dport 11211:11233 -j DNAT --to-destination 192.168.80.63
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

#规则持久化:

sudo systemctl status netfilter-persistent

sudo apt install iptables-persistent

sudo netfilter-persistent save

sudo cat /etc/iptables/rules.v4
sudo cat /etc/iptables/rules.v6

4、开放端口并重启 UFW

sudo ufw allow 11233/tcp
sudo ufw reload

5、查看规则是否生效:

sudo iptables -t nat -L -n

6、验证

使用 telnet localhost 11233 测试连接。

 

番外:

要删除 UFW 中的 Chain PREROUTING 规则,需通过底层 iptables 直接操作,因为 UFW 本身未提供直接管理 NAT 规则的命令行工具。以下是具体步骤:

1、通过 iptables 命令删除(临时生效),列出所有 NAT 表的 PREROUTING 规则及编号

sudo iptables -t nat -L PREROUTING --line-numbers

2、根据编号删除规则,使用规则编号(例如 1)删除对应的 PREROUTING 规则:

sudo iptables -t nat -D PREROUTING 1

注意:此操作仅删除当前活动的规则,重启后可能恢复(若 UFW 配置文件中仍保留规则)。