所以这个周末我一直在致力于将我的apache2
服务器迁移到docker
我没有问题的容器中。
我目前有一个 Windows 服务器和SSTP
Exchange 2016,都使用端口443
进行通信。
这个想法是将传入443
流量转发到我的 ubuntu 服务器,然后 apache 将根据我为虚拟主机提供的别名决定将用户重定向到哪里。这个方法已经奏效,但如果用户尝试连接到也使用端口 443 的 VPN,该怎么办?我如何才能将该流量重定向到我的服务器?
我原本的想法是创建一个规则,IPTABLES
将目的地vpn.domain.com
转发到服务器,但由于所有子域/ CName 都只是指向同一主机(我的外部 IP)的别名,因此端口上的所有请求443
都将被发送到 Windows 服务器,绕过我的网络主机,这不是我想要的。
我实际上也尝试过使用 apache 将所有传入连接转发443
到ServerAlias vpn.domain.com
Windows 服务器(因为它已打开),443
但这不起作用。
我不确定该怎么做,我想我毕竟只需要在我的 ubuntu 服务器上创建一个新的 VPN 服务。如果有任何方法可以实现我需要的功能,那将为我省去很多麻烦。
谢谢
答案1
尝试SSLH
安装 SSLH
SSLH
适用于大多数 Linux 发行版,因此您可以使用默认包管理器进行安装。
sudo apt install sslh
配置 Apache
你已经知道,Apache 默认会监听所有网络接口(即 0.0.0.0:443)。我们需要更改此设置,让 Web 服务器只监听本地主机接口(即 127.0.0.1:443 或 localhost:443)。
为此,编辑 Web 服务器(nginx 或 apache)配置文件并找到以下行:
listen 443 ssl;
并将其更改为:
listen 127.0.0.1:443 ssl;
如果您在 Apache 中使用 Virutalhosts,请确保您也已对其进行了更改。
VirtualHost 127.0.0.1:443
保存并关闭配置文件。不要重新启动服务。
配置 SSLH
一旦您使 Web 服务器仅在本地接口上监听,请编辑 SSLH 配置文件:
sudo vi /etc/default/sslh
找到以下行:
Run=no
并将其更改为:
Run=yes
然后,向下滚动一点并修改以下行以允许 SSLH 在所有可用接口上监听端口 443(例如 0.0.0.0:443)。
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid"
在哪里,
- 用户 sslh:需要在指定的用户名下运行。
- listen 0.0.0.0:443 :SSLH 正在所有可用接口上监听端口 443。
- sshs 127.0.0.1:22 :将 SSH 流量路由到本地主机的端口 22。
- ssl 127.0.0.1:443 :将 HTTPS/SSL 流量路由到本地主机的端口 443。
- openvpn 127.0.0.1:1194 :将 openvpn 流量路由到本地主机的 1194 端口
保存并关闭文件。
最后,启用并启动sslh
服务来更新更改。
sudo systemctl enable sslh
sudo systemctl start sslh
更改 IP、端口和协议以满足您的需求。