VPS 安全最佳实践

信息安全 网络 linux 硬化 虚拟主机
2021-08-21 05:24:57

我刚刚注册了一个 linux VPS 来托管我一直在创建的网站,我需要一些关于保护它的最佳方法的建议。

我以前一直在家里的虚拟机上托管它,但我想摆脱它。因此,安全性已经通过我进行了 NAT 并且只有某些端口打开/转发到机器的事实来处理。

现在我发现自己处于机器基本上完全对互联网开放的情况,所以我在想我需要开始用 IP 表做一些事情吗?这对我来说是全新的。

我在想可能有一个更优雅的解决方案,包括在一个单独的接口上将它连接到我的 vpn 以通过它进行连接,但不知道从哪里开始。

我需要:

  1. 从任何地方进行 SSH 访问(使用已配置的非标准端口)
  2. 从单个位置访问 Postgres
  3. 从任何地方访问 Web (http/https)
  4. 从单一位置进行 FTP 访问

问题:

  1. 保护这样的 linux 机器的最佳实践是什么?是iptables吗?
  2. 你能指点我资源(体面的)的方向来学习如何做到这一点。

我的 linux 水平相当高,我可以编写/调试 bash 脚本,从头开始编辑配置等,而且我对架构有一定了解,但我不是大师。

3个回答
  • 限制对服务的访问。IPtables 是处理这个问题的好方法。设置连接规则,强制执行您为每个服务描述的内容并删除其他所有内容。
  • 通过适当的配置限制你的守护进程。如果您仅通过 ssh 使用公钥进行身份验证(并且您有足够的信心不会丢失它并拒绝自己访问),请关闭密码和键盘身份验证。Fail2Ban 对于蛮力尝试很方便,但即时拒绝也相当令人满意。将您的 FTP 服务器配置为仅导出相关的目录树。
  • 假设您的每个守护程序现在都受到了威胁……除了 SSH,因为这只是其中之一。使用外部设施来限制守护程序可以在您的主机上执行的操作。

我是 Linux 上 AppArmor 的忠实粉丝,因为配置是可以合理理解的,并且对于沙盒应用程序非常强大。例如,你可以限制 Postgres 和它曾经执行的任何东西只影响数据库存储字段。这同样适用于 Web 和 FTP 服务器——它们永远不需要读取其操作目录之外的任何数据,也永远不需要打开另一个网络端口。收到有关任何违反这些规则集的电子邮件警报。

像这样隔离您的服务将使您对整个机器的完整性充满信心,即使单个服务受到损害也是如此。

根据 VPS 主机提供商的不同,他们可能会提供防火墙解决方案,允许您设置可以从外部访问和不能访问的内容。

举个例子,我最近为一个只有 HTTP / HTTPS 访问互联网的客户端工作的 VPS 主机,但是 VPS 的控制面板(主机包的一部分)提供了一个系统来配置防火墙,它是在 VPS 的前面,这使我可以打开 SSH、MYSQL 和 FTP 访问权限,只访问我自己的家庭宽带包中的一个静态 IP 地址。

IP 表将允许你做很多工作来确保盒子对外界是安全的,你甚至可以提供规则集来帮助减少人们试图暴力破解 SSH 密码的攻击(基本上你可以在规则中说,如果这个ip 地址在一段时间内 5 次 ssh 登录错误,将 IP 列入黑名单一段时间或永​​久)。

我建议您研究的是配置 SSH,使其不允许 ROOT 登录(这可以在 SSH 配置文件中完成,我不记得该文件的存储位置)

为 SSH 访问配置的另一件事是设置基于密钥的身份验证,这意味着只有 Linux 服务器拥有公钥的 PC 才能连接到系统,此时您可以关闭密码身份验证,以便以帮助减轻对服务器的蛮力攻击。

如果在您的情况下,主机不提供任何防火墙选项并且该框对互联网完全开放,那么您最好看看配置 IPTables

这里是一些 IPTables 相关信息的链接,遗憾的是我对 IPTables 没有太多投入,所以不能保证它的价值。

http://www.pettingers.org/code/firewall.html

希望这可以帮助。

您将像对待任何具有公共 IP 的物理盒子一样对待这个盒子。您需要遵循基本的 Linux 强化指南,例如:

  1. 保持盒子更新。
  2. 删除不必要的程序。
  3. 让 iptables 尽可能地运行并锁定。
    • 您可以使用这些规则执行任何您想要的基于源的特定规则,例如您的 FTP 和 Postgres 要求。
  4. 在非标准端口上运行 SSH,并且不允许 root 登录。
    • 您还可以进行基于密钥的身份验证以使其更安全。
    • 我还建议运行denyhosts 和/或fail2ban,这样您就可以监控您的日志以查找失败的登录尝试,然后立即通过/e​​tc/hosts.deny 阻止IP。这只是另一层,会让您对 SSH 的开放感觉更好。
  5. 在盒子上运行 HIDS。我建议使用 OSSEC 来提醒您的机器上的故障、潜在的攻击,以及作为文件完整性和 root 工具包检测。
  6. 监控您的服务以确保它们都正常运行。使用 Nagios 等程序。
  7. 等等。

您还可以设置 VPN,例如使用 OpenVPN 进入盒子。这样,您可以在非标准端口上运行 OpenVPN,然后您可以在允许您进入之前将其配置为基于密钥和基于密码的身份验证。

以下是我强烈建议您查看的 2 个站点。

http://www.sans.org/score/checklists/linuxchecklist.pdf

http://www.cyberciti.biz/tips/linux-security.html