![Apache2 虚拟服务器监听私有 IP,仅提供对 VPN 的访问,其安全性如何?](https://linux22.com/image/644327/Apache2%20%E8%99%9A%E6%8B%9F%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9B%91%E5%90%AC%E7%A7%81%E6%9C%89%20IP%EF%BC%8C%E4%BB%85%E6%8F%90%E4%BE%9B%E5%AF%B9%20VPN%20%E7%9A%84%E8%AE%BF%E9%97%AE%EF%BC%8C%E5%85%B6%E5%AE%89%E5%85%A8%E6%80%A7%E5%A6%82%E4%BD%95%EF%BC%9F.png)
我在 VPS 上安装了 Ubuntu 12.05,在其中运行 Apache 2.2 和 OpenVPN - 两者都在同一个公共 IP 上。我的目的是在我的 Apache Web 服务器中设置一个区域,只有当我连接到 VPN(使用 OpenVPN)时我才能访问该区域,用于各种我不希望公开访问的工具 - 因此基于密码的设置在这种情况下不起作用。
好的,ifconfig
显示tun0
接口具有 A 类 IP 10.8.0.1
。我去更新我的example.com
域的 DNS 区域,并在子域上添加了一条A
记录private.example.com
- 它将解析为10.8.0.1
。
另一方面,在 Apache 配置中,我添加了一个将监听10.8.0.1
(<VirtualHost 10.8.0.1:80> [...]
)的虚拟主机。
这很好用 - 现在我private.example.com
只有连接到该 VPN 时才能访问,但是这个设置有多安全?是否存在我没有看到的明显缺点;这种设置是通常使用的吗?
注意:当然,我们假设 Apache2 和 VPN 都没有被其他方式攻破。
答案1
假设 VPN 没有受到损害,你所说的并非完全不合理。
我会考虑添加iptables
一条双重保险方法的规则,例如:
iptables -A INPUT -d 10.8.0.1 -i ! tun0 -p tcp --dport 80 -j DROP
除非源接口是 ,否则应该会丢弃任何以 10.8.0.1 上的 TCP 端口 80 为目的地的传入段tun0
。(我假设您正在运行默认允许的 INPUT 链,或者您也有一个明确的规则来允许此流量。)
我可能还会进一步实施这种双重保险策略,要求在面向 VPN 的网站上进行身份验证,但这只是我的过度偏执。