Ubuntu防火墙(UFW)端口转发设置指南
端口转发是网络中常见的流量重定向技术,通过UFW(Ubuntu默认防火墙工具)可实现内外网端口映射。以下是详细步骤:
要让Ubuntu系统转发数据包,需先开启IP转发功能。
/etc/sysctl.conf文件:sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1(若被#注释,需删除注释),保存并退出。sudo sysctl -p
此操作使系统立即启用IP转发。默认情况下,UFW会阻止转发流量,需修改其默认策略。
/etc/default/ufw文件:sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="DROP",将其改为ACCEPT,保存并退出。UFW的转发规则需写入before.rules文件(该文件中的规则会在标准过滤规则前执行)。
/etc/ufw/before.rules文件:sudo nano /etc/ufw/before.rules
*filter部分之前)添加以下内容(以“将外部8000端口转发到内部192.168.1.100的8080端口”为例):# NAT table rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# 转发外部8000端口到内部8080端口(TCP协议)
-A PREROUTING -p tcp --dport 8000 -j DNAT --to-destination 192.168.1.100:8080
# 允许转发后的流量返回(避免源地址伪装影响本地网络)
-A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
COMMIT
说明:
PREROUTING链:将目标端口为8000的TCP流量重定向到192.168.1.100:8080;POSTROUTING链:对转发到内部网络的流量进行源地址伪装(MASQUERADE),确保返回数据包能正确路由。修改配置后,需重启UFW加载新规则:
sudo ufw disable && sudo ufw enable
或直接重启服务:
sudo systemctl restart ufw
重启后,UFW会应用before.rules中的转发规则。
可通过以下方式验证:
curl http://localhost:8000
若返回内部服务器(192.168.1.100)的8080端口内容,则转发成功。http://<Ubuntu公网IP>:8000),若能访问内部服务,则配置正确。/etc/sysctl.conf中的net.ipv6.conf.all.forwarding=1并重启系统,同时在before.rules中使用ip6tables规则。sudo ufw enable开启防火墙。