通过同一端口隧道连接多个端口

通过同一端口隧道连接多个端口

我正在寻求有关我正在进行的 stunnel 配置的帮助。基本上,我想让一台 DMZ 机器接受到端口 80 和 110 的入站连接,然后通过端口 22 上的防火墙将它们转发到一台机器,该机器随后将流量本地转发到端口 80 和 110。这有可能吗?

基本上我会在我的 DMZ 上有这个:

[http]
listen = localhost:80
connect = server:22
cert = cert.pem

[pop3]
listen = localhost:110
connect = server:22
cert = cert.pem

在我的服务器上我会有:

[http]
listen = localhost:22
connect = localhost:80

[pop3]
listen = localhost:22
connect = localhost:110

这有意义吗?我的防火墙上已经打开了端口 22,我不想再打开另外 2 个端口。

任何信息,将不胜感激...

谢谢!

答案1

您还可以将 stunnel 与 sslh 一起使用:http://www.rutschle.net/tech/sslh.shtml

sslh 是一个分析协议并根据协议重定向包的小程序。

根据手册页:

实现了对 HTTP、SSL、SSH、OpenVPN、tinc、XMPP 的探测,并且任何其他可以使用正则表达式测试的协议都可以被识别

配置文件示例位于 /usr/share/doc/sslh/examples/example.cfg (debian)

最终可能看起来像这样(我没有测试过):

verbose: true;
foreground: true;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "nobody";
pidfile: "/var/run/sslh.pid";

listen:
(
    { host: "localhost"; port: "SOME_PORT"; }
);

protocols:
(
    { name: "http"; host: "localhost"; port: "80"; probe: "builtin"; },
    { name: "pop3"; host: "localhost"; port: "110"; probe: [ INSERT_REGEXP_IDENTIFYING_POP3_PACKETS_HERE ]; }
);

你的 stunnel server.conf 将变成:

...
[sslh]
listen = localhost:22
connect = localhost:PORT_SSLH_IS_LISTENING_ON

答案2

当然,这是可能的,但实际上根本不涉及stunnel

您可以在 DMZ 计算机和内部主机之间设置 SSH 隧道。例如:

on_dmz_host# ssh -L 80:localhost:80 -L 110:localhost:110 internal_server

这告诉ssh将 DMZ 主机上的端口 80 转发到内部服务器上的端口 80,对于端口 110 也类似。所有连接都通过端口 22 上的 ssh 连接进行传输,因此不需要打开任何其他端口。

您也可以使用点对点 VPN 完成同样的事情(例如,OpenVPN 就非常适合这种情况),尽管老实说,仅打开防火墙上的端口更简单。

答案3

除非 stunnel 有某种方法可以区分哪些流量属于哪种协议(我对此表示怀疑),否则这不会起作用。您必须在防火墙上再打开一个端口。

相关内容