更具体地说,我计划建立一个负载平衡的电子商务网站。两个负载平衡器将接受来自管道的 https 连接,然后根据 SSL 的性质,它们将需要验证连接、解密,然后将未加密的请求转发到应用服务器。
在安全的专用网络中,一切都很好,但是我想使用虚拟机 (slicehost) 运行此设置。理论上,这些机器应该在专用网络上,但是另一个人的机器 (slice) 可能会以某种方式窥探网络内的流量。我需要假设网络不安全。
所以。我考虑过使用 ssh,有人建议我使用 VPN(我之前没有设置过,也不太了解)。如果我使用 ssh,我需要不断监控连接并确保其正常运行。
我想我想知道其他人是怎么做事的?
越简单越好(即出错和需要监控的事情越少)
这是 Linux 设置。我正在考虑使用 Pound 作为负载均衡器。仍然需要在这方面做一些测试。也开始阅读有关 Nginx 的内容。
答案1
对我来说这听起来像是 IPSEC 的工作。
IPSEC 已“嵌入”到现代 Linux 发行版中。它对应用层完全透明,并且“正常工作”。对于需要保持私密的机器内通信,我会选择这种方式。
使用预共享密钥的“主机到主机” IPSEC 配置非常简单。例如,在 CentOS 中,已经有一种方法可以配置这些主机到主机连接,作为常规“网络脚本”功能的一部分(请参阅http://www.centos.org/docs/4/4.5/Security_Guide/s1-ipsec-host2host.html)。
根据您使用的 Linux 发行版,配置可能非常简单,或者您可能需要做一些工作。您不需要任何 VPN 启动/关闭脚本、隧道监控脚本等——它们都“只在第 3 层工作”。对我来说,这听起来像是一个成功的解决方案。
编辑:
我经常大量使用 OpenVPN,因此我在这里并不是“贬低”OpenVPN,但作为解决您特定问题的解决方案,我认为它不是最优的,原因如下(按我的关注程度排序):
它创建了一个并行网络基础设施。您必须确保您的主机内通信使用正确的目标 IP 地址,以便通信通过 VPN 而不是公共 IP 网络进行。如果您计划使用 DNS 名称,这可能会特别有趣,因为您需要对 DNS 进行一些操作(创建 hostA-secure、hostB-secure 等主机名,或创建一个 DNS“视图”,当查询来自“安全”主机时始终返回“安全”IP 地址)以确保将名称解析为“安全”VPN IP。
OpenVPN 是点对点的。您需要配置 OpenVPN 隧道网格或通过单个主机路由 OpenVPN 流量“中心辐射”。IPSEC 是完全对等的,您可以使用 IPSEC 和动态密钥轻松配置网格拓扑。使用预共享密钥需要更多工作,但您也可以通过这种方式配置网格拓扑。
OpenVPN 是一个需要启动的用户空间程序。这不是什么大问题,但 IPSEC 位于内核空间,配置完成后无需启动任何用户空间程序即可“正常工作”。
我不明白为什么人们认为 IPSEC 如此难以配置。在现代发行版上,使用预共享密钥的 IPSEC 与使用静态密钥的 OpenVPN 一样容易配置(如果不是更容易的话——通常您的发行版会自动启动/停止它)。使用 PKI 的动态密钥 IPSEC 所需的步骤几乎与使用基于证书的身份验证的 OpenVPN 的配置步骤相同。
OpenVPN 需要创建具有第二组 IP 地址的并行网络拓扑,其复杂性对我来说是致命的。我希望我的主机能够使用它们接收不安全通信的相同 IP 地址进行通信,“自动”透明地加密彼此之间的连接。
编辑2:
对于发帖者所描述的,我认为 IPSEC 听起来是最好的解决方案(出于我上面描述的原因)。如果发帖者谈论的是与其他操作系统的互操作,而不仅仅是寻求保护某些主机之间的通信,我会特别推荐 OpenVPN。
我同意将各种 Linux IPSEC 实现与其他任何实现进行互操作都是困难的(实际上,将几乎任何 IPSEC 与几乎任何其他 IPSEC 实现进行互操作也是困难的)。我已设法使 Cisco PIX 到 OpenSWAN 隧道正常工作,并且我已经成功地使用来自 Windows 计算机的静态密钥隧道。我从未接触过任何 Juniper 设备,所以我对此一无所知。
我使用过 OpenSWAN(实际上当时是 FreeSWAN),我同意这些文档很难理解。自从 RedHat “选择” KAME 工具来管理 Linux 2.6 内核 IPSEC 堆栈以来,我就不再关注 OpenSWAN。过去几年里,我很少需要主机到主机 IPSEC(在 RHEL 或 CentOS 上——我在 Linux 世界中真正使用的所有工具),KAME 工具表现不错。我一直在使用 RHEL 的“官方”文档和 KAME 项目站点的文档,并取得了成功。
答案2
OpenVPN是 IPSEC 的一个非常好的、更简单的“替代方案”。OpenVPN 是一个功能齐全的开源 SSL VPN 解决方案,存在于用户空间中。多平台(windows、linux、osx ..)包括所有主要的 Linux 发行版。
示例设置:
首先我们生成静态密钥(不太安全但简单):
$ openvpn --genkey --secret static.key
(通过 scp 将此密钥复制到您的客户端/服务器)
配置服务器(/etc/openvpn/server.conf)
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret static.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
配置客户端(/etc/openvpn/client.conf)
remote myserver.address.com
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret static.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
确保服务器上 UDP 端口 1194 已打开。
在客户端/服务器上运行:
# server
openvpn --config /etc/openvpn/server.conf
# client
openvpn --config /etc/openvpn/client.conf
要验证 VPN 是否正在运行,您应该能够从服务器 ping 10.8.0.2 并从客户端 ping 10.8.0.1。
答案3
对于简单的、自我监控的 ssh 隧道,我使用自动SSH。但请记住,在高吞吐量的情况下,您可能需要花时间配置完整的 VPN,因为 ssh 在处理大量流量时性能不佳。