![将 Apache 请求发送到某种形式的 dev/null、无任何内容或无任何地方](https://linux22.com/image/711113/%E5%B0%86%20Apache%20%E8%AF%B7%E6%B1%82%E5%8F%91%E9%80%81%E5%88%B0%E6%9F%90%E7%A7%8D%E5%BD%A2%E5%BC%8F%E7%9A%84%20dev%2Fnull%E3%80%81%E6%97%A0%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9%E6%88%96%E6%97%A0%E4%BB%BB%E4%BD%95%E5%9C%B0%E6%96%B9.png)
我一直无法得到权威的答案,但这个问题多年来一直让我感兴趣:
使用匹配重写规则的 Apache,例如:
一组匹配触发 403 Forbidden 情况。403 页面托管在网站上,因此基本上这些条件会触发网站上的另一个页面加载,并且实质上会向探测器确认基本域或 IP 存在。
但我一直想知道是否有一种方法可以基本上发送符合特定条件的请求,比如已知的垃圾邮件/入侵尝试模式,然后基本上将其发送到 /dev/null 或 apache 等效项。
由于从未找到这样的解决方案,我经常只是使用一个虚假的域名并将匹配的请求重定向到该虚假域名,从而消除服务器的负载,并且由于该域名不存在(我总是选择实际上不存在的抽象名称),301 之后的请求会得到 404,但在理想情况下,请求将失败并且不返回任何内容,或者返回一些 Apache 等效内容。
这实际上是我需要弄清楚的事情,因为某些工具用于检测我们网站上一些不应该被检测到的数据,存在一个持续的问题,但这里的原因并不那么重要,因为每种情况都会发生变化,我猜我的问题是几个方面:
如果不存在诸如基本重定向到 /dev/null 之类的东西,是否有办法动态分配服务器上不存在的 F 禁止 403 页面,这样请求就不会直接反弹回站点 403 页面,这可能会向探测者暴露一些信息。这是最糟糕的选择,因为站点正在确认 IP 地址/域和端口是否存在。
理想情况下,有没有办法真正将请求发送到无处?在理想情况下,它应该返回 404 表示未找到,我猜这意味着特定 IP 地址探测会导致不存在。也许从某种意义上说,这毕竟是答案?但它不会是导致站点 404 页面加载的 404,而应该是请求时生成的不存在的域的 404,或者不存在的 IP 地址、端口组合的探测。
当然,最好的情况是,当请求与模式匹配时,它什么也不做,它不响应,什么也不做,可以说请求被吸收到了黑洞中。就像你从实际上根本不存在的东西请求了一些东西。不是来自确实存在的域,而是来自不存在的页面,而是整个请求与任何域、页面或 IP 地址都不匹配。
令人惊讶的是,很难找到有关 Apache mod rewrite 这一特定场景的任何信息,至少我从未找到过解决这个问题的方法,所以如果有人可以提供权威的答案,我已经构建了问题标题,可能会导致搜索最终出现在这个页面上。
再次,理想的结果是,探测器永远不会意识到在重写规则中满足匹配条件后,它实际上在 IP 端口扫描上获得了一个实时站点,这意味着,不是 403,不是 301,不是 200 响应,不是来自站点的 html 类型响应。
请注意,在这种情况下,我无法访问主数据中心防火墙或服务器防火墙,因此这必须是使用 Apache 2 本身可以获得的最佳结果。
答案1
我用 C 语言编写了一些小型 Apache 模块,Apache 网站上详细介绍了如何实现这一点
你可以用 C 匹配任何你想要的东西,然后执行例程的“then”部分,直到 Apache API 允许的程度。我还没有检查过,但代码听起来像是
--如果模式匹配,则不执行任何操作。这实际上与向无处发送请求相同。
或 - 如果模式匹配,则不回应......詹姆斯