如何使用 CentOS 7 设置远程互联网 Web 服务器,使其完全被 VPN 屏蔽? 这是用例:
1.) This means that ALL requests for ANY interaction with the web server
would have to come through the VPN from a known user. Including
http/https requests.
2.) Each server might have only 20 users who would connect to the server
over the internet to work with highly sensitive data that needs
tight security.
3.) The users would not actually log into the OS.
4.) Instead, the users would simply make http/https requests from pre-registered
devices that also contain a unique key identifying the user.
5.) There would be one administrator who logs into the OS remotely,
but all other users would just have secure http/https access.
6.) If any request came from a non-known device outside the vpn,
the request would be bounced off as if the server was not there.
7.) But the server is connected to the internet and all VPN connections
come through the internet.
我读到这OpenSSH
是当前版本的VPN。我喜欢它似乎让你使用 1024 位加密密钥,但我的印象是我只能使用 OpenSSH 远程登录操作系统,而不能锁定进入机器的所有路由,包括 http/https 请求。是否OpenSSH
能够如上所述锁定整个服务器?
我开始阅读有关OpenVPN
.我发现这OpenVPN
需要许可费。许可费并非不可能,但我想在尝试付费选项之前知道是否有免费选项。我还想确保OpenVPN
可以做到我上面描述的事情。
我读到的内容pptp
似乎暗示pptp
仅支持 128 位加密密钥,并且可能无法执行上述所有操作。
答案1
据我所知,如果没有定制/商业产品来锁定所有功能,您就无法实现所需的所有功能。
在详细说明如何满足所需标准时,请记住以下一些想法:
典型的 VPN 解决方案添加路由。要添加路由,用户需要拥有客户端计算机的管理权限。情况并非总是如此,尤其是在使用雇主提供的硬件时。根据实施情况,现有 VPN 解决方案有针对该主题的解决方法。据我所知,OpenVPN在安装客户端时注册了一个Windows服务,该服务根据用户实际操作的客户端的请求添加路由。 Tunnelblick(OpenVPN 的 OS X 客户端)也使用一些巫术来让路由正常工作,并且在某些时候也需要管理权限。因此,OpenVPN 在配置客户端时至少需要付出一些努力来解决该问题。
由于至少 OpenVPN 可以“连接后”添加路由,因此用户实际上可以自己添加其他路由。假设 OpenVPN 服务器将路由推送到一些应可通过 OpenVPN 访问的主机。这会导致客户端添加到这些主机的路由。没有任何机制禁止用户向其他主机添加更多路由。因此,如果这些路由实际上有效,则可以访问未经授权的后端。为了防止这种情况,服务器上的防火墙必须是严密的,除了允许的主机的流量之外不允许任何东西。
如果您想要提供的基础设施必须可供经常从酒店访问服务器的员工使用,那么 VPN 可能根本无法使用。有相当多的酒店不转发 VPN 连接所需的流量。在某些情况下,仅允许使用端口 80 和 443。
偏离我的 OpenVPN 想法,据我所知,您只允许来自“受信任”设备的连接的要求是不可能的。这将通过防火墙(在 CentOS 中通常是 iptables)来实现。您想要的规则是DROP
来自不受信任设备的数据包。不幸的是,iptables 现在可以检查设备是否可信,因为此类信息不是数据包的一部分。尽管至少在兼容网络中存在以类似方式进行过滤的解决方案(如果您对此主题感兴趣,请向 Google 询问 General Dynamics 的 PitBull Foundation)。
现在开始思考如何实际实现您的场景,尽管缺乏一些必需的标准。
首先,OpenSSH 不是一个 VPN 解决方案。它能够建立类似 VPN 的隧道,但据我所知,其他 VPN 解决方案在性能和功能方面优于 OpenSSH 方法。
话虽如此,您提到用户通常只会使用 http/https 服务。这些可以通过 SSH 隧道轻松访问,无需任何类似 VPN 的功能。我不会详细介绍如何配置它,但我会指出使用 OpenSSH 的一般方法。
可能有意义的第一件事是将 SSH 守护程序配置为使用端口 80 或 443。这将使用户能够从几乎任何地方(甚至是酒店)连接到服务器。
关于安全性,sshd 配置允许添加匹配用户、主机等的规则。这意味着,您实际上可以将用户流量限制到 OpenSSH 服务器后面的特定主机,而无需在防火墙中过滤。这样的规则可能如下所示:
Match User JohnDoe
AllowTcpForwarding yes
PermitOpen internal.resource:80 other.internal:443
安全身份验证是强制性的。 OpenSSH 可以利用 PAM 模块来验证用户身份。有多种可能性,例如针对 LDAP、Radius 等进行身份验证。以简单方式使用 2 因素身份验证的巧妙解决方案是使用 Google Authenticator,它也具有 PAM 模块。有几个资源指出了如何配置 OpenSSH 以使用 Google 身份验证器。
实际上,使用此解决方案时最困难的部分是客户端发生的情况。客户端需要一个支持隧道使用的 SSH 客户端。最重要的是,客户端必须知道如何使用客户端以及如何连接到已建立的隧道。我从 shell 手动打开隧道,但典型用户如果不经过培训可能无法执行此类任务。乍一看,这个客户端可能有用:自动(自动)SSH 隧道管理器
为了将我建议的解决方案与您的需求列表相匹配:
- 所有请求都将通过 SSH 隧道。 SSH 服务器的一个端口必须可以通过互联网访问。查看。
- 如果您只是创建并允许这 20 个用户,则其他人都无法连接。查看。
- 如果配置正确,用户将不会获得 shell。建立隧道不需要 shell。查看。
- 我建议使用双因素身份验证,但您也可以进行公钥身份验证,每个设备都有一个密钥。但是:这些密钥可以转移到其他设备。因此,无需任何进一步的研究:无需检查,但流量可能会限制为 http/https。
- root 或指定的任何用户都可以配置为在连接时获取 shell。查看。
- 不可能。
- 在我的解决方案中,它不是“VPN”,但是是的,访问会以这种方式进行。查看。