我在远程 Linux 机器上有一个 Oracle dbms(aws linux,应该类似于 rhel)。
不幸的是,我所在的网络仅允许传出流量到端口 80、443 和 22。
由于我们正在谈论一台测试机器,我想做一个设置,以便端口 80 上的每个传入流量都立即转发到端口 1521。
我无法使用 http 代理,因为流量确实是端口 1521 上的自定义 Oracle 协议流量,但我听说 Linux 允许以开箱即用的方式直接转发。你能告诉我怎么做吗?谢谢
答案1
一种方法(不幸的是,正如您所说,它不是“开箱即用的”)是使用一个名为的程序socat
。它在大多数软件包存储库中都可以访问,因此您可以yum install socat
在您的场景中使用(在 Debian 上,apt install socat
有效)。
使用的命令是socat tcp-listen:[public accessible port],reuseaddr,fork tcp:localhost:[actual port]
。 就你的情况而言,应该是sudo socat tcp-listen:80,reuseaddr,fork tcp:localhost:1521
。 (请注意,根据你的配置,你可能需要超级用户权限。)
欲了解更多答案,您可以查看这里。
答案2
公平警告,我不是专家网络过滤器(iptables)。
任何可靠的 Linux 服务器发行版都应在其内核中安装并启用 netfilter。Netfilter 允许您路由、阻止和以其他方式操纵进出系统的数据包。尝试在服务器计算机上以 root 身份运行此程序:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 1521
您可能需要将 eth0 更改为服务器 LAN 适配器的正确设备名称。这应该会导致端口 80 上传入的任何数据包都被监听端口 1521 的 Oracle DBMS 接收。
我继续查找这些选项的作用(因为我不太熟悉手动管理 netfilter)。让我分解一下:
-t nat -A PREROUTING
这将选择 NAT 表并将-A
新规则附加 () 到 NAT 表的 PREROUTING 链。通常,当您从一个端口重定向到另一个端口时,这属于 NAT 表。在 Netfilter 处理传入数据包时,PREROUTING 链发生得很早。通常,它是传入数据包的第一个链。
-i eth0 -p tcp -dport 80
这些是规则的过滤部分。我们告诉它您希望此规则影响哪个接口 ( -i
) 和协议 ( ) 上的数据包。在此示例中,我们正在为接口上的 tcp 流量创建规则。我们还告诉它在数据包中查找哪个目标端口 ( )... 在本例中是目标端口为 80 (tcp) 的数据包。-p
eth0
-dport
当您尝试使用 Oracle DBMS 连接到服务器上的 tcp 端口 80 时,您的机器发送的 tcp 数据包的标头中将包含目标端口 80。
--j REDIRECT --to-ports 1521
这是规则的核心。在这里,您告诉它符合上述过滤器的数据包将被重定向 ( --j REDIRECT
) 到端口 1521 ( --to-ports 1521
)。当 netfilter 与要重定向流量的应用程序位于同一系统上时,请使用REDIRECT
。当应用程序位于另一台服务器上时,您将改用DNAT
(并指定 IP 和端口)。
如果有效,请告诉我。
这些设置不是持久的;为了使它们持久,我建议您考虑安装iptables-persistent
。您可以找到更多信息在 StackOverflow 上。