场景:example.com、a.example.com 和 b.example.com 均解析为 IP 1.2.3.4。Ubuntu 18.04.1 上的 Apache 2.4.29 配置了多个虚拟主机(可能在非标准端口上);如下所示:
<VirtualHost *:81>
ServerName example.com
...
</VirtualHost>
<VirtualHost *:81>
ServerName a.example.com
DocumentRoot /var/www/a
...
</VirtualHost>
<VirtualHost *:81>
ServerName b.example.com
DocumentRoot /var/www/b
...
</VirtualHost>
我希望对 a.example.com 和 b.example.com 的请求能够作为普通虚拟主机工作,但对 example.com(或 1.2.3.4)的请求根本不会得到任何响应 - 不是 404 响应,不是 5xx 响应,什么都没有。
目标是让虚拟主机正常工作,但对于探测域或 IP 地址的任何事物甚至都不知道 HTTP 服务器正在该 IP 上运行。
我仔细阅读了 Apache 文档中有关 VirtualHost 指令的内容,但一无所获。我还查看了 RFC 7230,没有发现任何明显的原因可以避免这种情况 - 当然,在服务器知道客户端请求什么之前必须建立 TCP 会话,因此攻击者会知道某物正在监听该端口,但据我所知,我没有在协议本身中看到任何内容使得服务器在客户端发出请求之前透露它正在监听 HTTP。
我不确定我所描述的是否可行,即使可行,我也不确定它有多大价值。欢迎提供意见。
答案1
也许是
RewriteEngine on
RewriteRule ^ - [L,redirect=410]
将其放在您的默认虚拟主机中,每个请求都应返回 410 错误。