保护面向公众的 Web 服务器的最佳实践?

信息安全 Web应用程序 linux 网络服务器 Unix
2021-09-06 21:14:14

我正在寻找一个“最低限度”的清单来保护面向公众的 Unix Web 服务器。假设它是一个 LAMP 堆栈(或类似的)。该列表应该是您将实施的最低要求。显然,对高流量站点(DDoS 保护、高可用性等)的要求会上升,但我并不关心这一点。只需查找托管单个 Web 服务器的最低要求列表,该服务器运行 Apache 或 NGINX,并具有基本的服务器 MySQL 或 MariaDB 数据库和简单的 PHP 应用程序。假设它在 AWS、DigitalOcean 等上运行。一些想法包括:

  • 按国家/地区将 IP 范围列入黑名单/白名单
  • 禁用root远程登录
  • 启用fail2ban(在多次失败的登录尝试后禁用IP)
  • 将防火墙配置为只允许相关端口入站(例如 ssh、sftp、https)
  • 只允许 HTTPS,然后使用 Qualys SSL Labs 测试工具(https://www.ssllabs.com/ssltest/)测试证书和服务器配置的有效性
  • 在面向公众的任何地方启用多因素身份验证,例如您的 Amazon/Digital Ocean/等。帐户,您对服务器的凭据等。
  • 将 root 密码更改为至少 16 个字符,包含特殊字符的字母数字。
  • 还有什么?
2个回答

我肯定会补充一点,SSH 不应仅允许密码身份验证,而应允许使用公钥(和/或某些第二个令牌)。

我会亲自将启用 seLinux(或 appArmor)添加到列表中,还会启用和配置 auditd,并强制使用 sudo。

如果想要超越最低限度,你可以做更多的事情,但我认为这三件事是你想要的基础的一部分。

如果您想要更正式的东西,您可以查看 CIS 基准 ( https://benchmarks.cisecurity.org/downloads/benchmarks/ )。它们可能不是最小的,但有一些认可(无论您对 CIS 的看法如何)。

CentOS(我怀疑 RedHat 喜欢)也有一些 SCAP 工具(https://scap.nist.gov/),你可以查看它们是否适用。

Marcus Müller 有一个观点,这是一个非常广泛的问题。

最好的安全策略有一个重点。某位著名将军(腓特烈大帝?)曾说过“保护一切就是保护什么”。首先建立一个“威胁档案”,这样您就知道要防范什么,然后确定防范这些威胁的最佳实践显然,每当您遇到特定攻击时,都要修改您的威胁配置文件。

对于已经说过的内容,我将添加以下内容:

  • 将您的 sshd 移动到非标准端口。脚本小子攻击端口 22,如果您的 sshd 不在那里,只有更聪明的攻击者甚至会找到它。

  • 考虑将所有非公共监听端口(sshd、SNMP、rsyslogd 等)放在 VPN 后面。对这些服务的访问(人工或跨服务器)设置起来会有点繁琐,但这提供了强大的保护。仅 VPN 访问特别推荐用于不需要直接公共访问的服务器(例如数据库或消息队列服务器)。

  • 为您的防火墙定义出口规则,而不仅仅是传入规则。特别是对于黑帽喜欢利用的服务,一旦他们使您的服务器(例如 SMTP)成为僵尸。如果您的服务器以某种方式受到损害,但您的劫持者无法向外 ping 或 SMTP 或 SFTP……那是另一道防线,可以让您有时间打击它们。

  • (劳动密集型但值得)考虑将整个服务器场升级到 IPv6(无论如何,每个人都必须尽快完成)请记住,fail2ban 将变得不那么有价值,因为它仅适用于 IPv4。IPSec 已融入 IPv6。