我正在寻求有关我正在进行的 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 有某种方法可以区分哪些流量属于哪种协议(我对此表示怀疑),否则这不会起作用。您必须在防火墙上再打开一个端口。