我正在运行一个 apache 服务器,其中包含大约七个域名的虚拟主机。现在我想禁止仅使用 IP 地址尝试访问我的服务器的客户端访问。所以:
当有人通过 www.domain.com 访问我的网站时,他们会到达托管在 的网站
/var/www/domain.com/public_html/
。当有人输入服务器的 IP 地址时,他们会收到一条
403 Forbidden
消息。
问题在于,理论上,当他们获取时,他们能够通过暴力破解访问我的其他网站http://11.22.33.44/domain.com/public_html/
。
我宁愿希望他们能够一直到达403 Forbidden
,只要他们不通过有效的域名访问我的服务器。
我该如何解决这个问题?
答案1
对于基于名称的虚拟主机,第一个加载的 VirtualHost 将获取所有没有主机名(或主机名与配置的主机名不匹配)的请求。
在 Debian 中,您可能拥有的是一个/etc/apache2/sites-available/default
首先加载的文件,因为它的链接位于/etc/apache2/sites-enabled/0-default
(按字母顺序排列意味着它将首先加载),该文件设置了一个提供服务的 VirtualHost /var/www/
。
假设您的 domain.com 由不同的站点文件或同一文件中的不同 VirtualHost 块提供服务,一个好的解决方案是将默认 VirtualHost 设置为不再提供任何文档,而是让它将重定向发送到正确的 DNS 名称。此方法还将对任何带有系统无法识别的主机标头的请求应用相同的操作:
RewriteEngine on
RewriteRule ^.*$ http://domain.com/ [R]
答案2
将默认文档路径更改为 以外的其他路径/var/www/
。例如,将默认路径设置为/var/www/forbidden/
。
您还可以创建_default_
虚拟主机,它将匹配其他虚拟主机未匹配的所有内容。