以下是在线虚拟专用服务器,只有一台机器。我尝试了许多方法,使用 Ubuntu 15.10 上的 UFW 将端口 80 上的传入请求转发到我在 3000 上运行的简单应用程序。我当前的 ufw 状态如下所示。
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80 (HTTP) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80 (HTTP (v6)) ALLOW IN Anywhere (v6)
162.243.39.90 3000 ALLOW FWD 162.243.39.90 80
为了实现最后一行我使用了
ufw route allow from 162.243.39.90 port 3000 to 162.243.39.90 port 80
我尝试了其他几种组合,包括
in on eth0
和
out on xxx
但是,除非我直接打开端口 3000,否则我无法访问该应用程序。我的浏览器只是空转了一会儿,然后返回“网页不可用错误”。
有任何想法吗?
答案1
route
规则适用于在多宿主设置(多个网络)中穿越防火墙的数据包,因此在您的设置中不起作用。
http://manpages.ubuntu.com/manpages/trusty/man8/ufw.8.html
针对不是发往主机本身的流量,而是应该通过防火墙路由/转发的流量的规则应该在规则前指定路由关键字(路由规则与 PF 语法有很大不同,而是考虑了 netfilter FORWARD 链约定)。例如:
ufw route allow in on eth1 out on eth2
这将允许所有路由到 eth2 并进入 eth1 的流量穿越防火墙。
对于你的情况,答案如下:我可以使用 ufw 设置端口转发吗?
答案2
我假设你是在路由器后面执行此操作。这是另一种方法。
建议A:
- 在您的路由器中,打开端口 80,然后使用端口 3000 将其转发到服务器。
- 在您的服务器中,在 ufw 中打开端口 3000。
建议B:
在您的路由器中,打开端口 3000,然后使用端口 3000 将其转发到服务器。
在您的服务器中,在 ufw 中打开端口 3000。
我不会从 ufw 进行端口转发。
注意:使用选项 A,端口 80 中的所有流量都将转到端口 3000。如果您有其他应用程序使用此端口(例如 Web 服务器),则这将是一个问题。