UFW端口转发

通过 ufw 配置 ubuntu 的端口转发功能

UFW端口转发

1. 启用 IP 转发

首先,确保您的系统允许 IP 转发:

sudo nano /etc/ufw/sysctl.conf

在打开的文件中,确保以下两行没有被注释掉(去掉 #​):

net/ipv4/ip_forward=1
net/ipv6/conf/all/forwarding=1

保存并退出 (Ctrl + X​ -> Y​ -> Enter​)。

编辑 /etc/default/ufw

# Set the default output policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_OUTPUT_POLICY="ACCEPT"

# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT" // 找到这一行,大概在18行这里,将其改成 ACCEPT

# Set the default application policy to ACCEPT, DROP, REJECT or SKIP. Please
# note that setting this to ACCEPT may be a security risk. See 'man ufw' for
# details
DEFAULT_APPLICATION_POLICY="SKIP"

2. 编辑 before.rules文件

接下来,编辑 UFW 的 before.rules​ 文件,以添加转发规则:

sudo nano /etc/ufw/before.rules

在文件的开头部分,找到 *filter​ 行。在此行之前添加以下内容:

示例 1: 转发特定端口到本机其他端口

将本地服务器的 端口 1000​ 的流量(TCP 和 UDP)转发到本地 8080​ 端口:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 转发规则,将端口 1000 的流量转发到本地端口 8080
-A PREROUTING -p tcp --dport 1000 -j REDIRECT --to-port 8080
-A PREROUTING -p udp --dport 1000 -j REDIRECT --to-port 8080

COMMIT

示例 2: 转发特定端口到其他服务器的指定端口

将本地服务器的 端口 1000​ 的流量(TCP 和 UDP)转发到远程服务器 192.168.1.100​ 的 8080​ 端口:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 转发规则,将端口 1000 的流量转发到远程服务器 192.168.1.100 的端口 8080
-A PREROUTING -p tcp --dport 1000 -j DNAT --to-destination 192.168.1.100:8080
-A PREROUTING -p udp --dport 1000 -j DNAT --to-destination 192.168.1.100:8080

# 使转发的流量能够正确返回
-A POSTROUTING -p tcp -d 192.168.1.100 --dport 8080 -j MASQUERADE
-A POSTROUTING -p udp -d 192.168.1.100 --dport 8080 -j MASQUERADE

COMMIT

示例 3: 转发端口范围到本机指定端口

将本地服务器端口范围 1000-2000​ 的流量(TCP 和 UDP)转发到本地 8080​ 端口:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 转发规则,将端口范围 1000-2000 的流量转发到本地端口 8080
-A PREROUTING -p tcp --dport 1000:2000 -j REDIRECT --to-port 8080
-A PREROUTING -p udp --dport 1000:2000 -j REDIRECT --to-port 8080

COMMIT

示例 4: 转发端口范围到其他服务器的指定端口

将本地服务器端口范围 1000-2000​ 的流量(TCP 和 UDP)转发到远程服务器 192.168.1.100​ 的 8080​ 端口:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

# 转发规则,将端口范围 1000-2000 的流量转发到远程服务器 192.168.1.100 的端口 8080
-A PREROUTING -p tcp --dport 1000:2000 -j DNAT --to-destination 192.168.1.100:8080
-A PREROUTING -p udp --dport 1000:2000 -j DNAT --to-destination 192.168.1.100:8080

# 使转发的流量能够正确返回
-A POSTROUTING -p tcp -d 192.168.1.100 --dport 8080 -j MASQUERADE
-A POSTROUTING -p udp -d 192.168.1.100 --dport 8080 -j MASQUERADE

COMMIT

注意:根据需求,您可以选择性地添加这些规则。

保存并退出 (Ctrl + X​ -> Y​ -> Enter​)。

3. 允许 UFW 通过相关端口或端口范围的流量

使用以下命令允许 UFW 通过端口或端口范围的流量:

# 允许特定端口
sudo ufw allow 1000/tcp
sudo ufw allow 1000/udp

# 允许端口范围
sudo ufw allow 1000:2000/tcp
sudo ufw allow 1000:2000/udp

4. 重新加载 UFW

为了使更改生效,重新加载 UFW:

sudo ufw disable
sudo ufw enable

5. 验证端口转发

使用 curl​ 或其他工具测试端口转发是否成功:

# 测试特定端口
curl http://localhost:1000

# 测试端口范围
curl http://localhost:1000
curl http://localhost:1500
curl http://localhost:2000
LICENSED UNDER CC BY-NC-SA 4.0
Comment