如何使用 Apache2 虚拟主机在服务器的裸 IP 上提供*无服务*?

如何使用 Apache2 虚拟主机在服务器的裸 IP 上提供*无服务*?

我在运行 Apache 的计算机上托管多个项目站点。当然,我使用的是虚拟主机,它们按预期工作。然而,当前访问机器的裸 IP 会按字母顺序生成第一个虚拟主机(正如预期的那样)。我遇到了恶意行为者随机(可能迭代)到我的机器的 IP 和垃圾邮件登录页面或以其他方式试图造成麻烦的问题。我不想为任何试图连接到机器 IP 的人提供任何服务。

我尝试过一个名为“000-nodomain.conf”的虚拟主机,该主机在端口 80 上提供一个带有空白 index.html 的目录。但是我想删除该目录,让服务器不做任何响应,而不必担心读取从磁盘。在最理想的情况下,我希望服务器完全拒绝没有域名的请求,尽管我不确定这是否可能。
作为一个附带问题,如果我的 IP 没有 SSL 证书(昂贵!),任何尝试通过端口 443 访问裸 IP 的人仍然会获得真实站点的服务,因为它是第一个与端口 443 匹配的虚拟主机。是否可以运行端口 443 上的“普通”http 虚拟主机?我不关心通过裸 IP 连接的任何人的最终用户体验,但它不会影响正在服务的任何其他站点。

答案1

您可以添加额外的虚拟主机作为默认站点,这是正确的做法。为了安全起见,您应该确保拒绝此虚拟主机的所有内容(无一例外):

<directory "/">
  Require all denied
</directory>

这将导致403 Access Denied客户端尝试的所有内容都失败。

使文档根目录不存在也不会有什么坏处:

DocumentRoot "/does_not_exist"

这仍将允许少量磁盘访问,因为 Aapche 需要查找/does_not_exist,但如果发生 DOS 攻击,该访问将被缓存并且不会影响系统性能。

它当然不应该允许任何信息从您的系统中逸出。


调查失败2禁止。具体来说,您应该设置默认虚拟主机以写入不同的访问日志文件。然后您可以设置fail2ban 来监控这一点并阻止任何潜在的攻击者通过防火墙。这应该可以防止他们尝试对裸 IP 进行前几次请求之后的任何操作。


关于“裸IP”虚拟主机上的443端口该怎么办。理论上,您可以通过任何端口(包括端口 443)提供常规 HTTP 服务。但是,许多 HTTP 客户端会因此而出错。我认为这实际上会更好生成自签名证书(无论您喜欢什么主题,甚至是您的 IP)。这使得期望通过 SSL 的 HTTP 服务器能够正常运行的客户端。

我不会重复使用您任何实际站点的证书;这将为攻击者(机器人)提供有关您托管的站点的更多信息,并可用于让他们使用“正确”的域名重试。

相关内容