为了强化面向公众的网络服务器,我和我的同事想出了一个计划,让 Apache 将某些请求“黑洞化”。例如,对于 phpmyadmin(未运行)的请求或其他明显的黑客/恶意尝试,我们希望 Apache 甚至不响应。
我知道可以使用 mod_rewrite 让 Apache 发送各种错误或以空数据进行响应,但我想尽可能少地发送它们,所以理想情况下...什么都不发送。
答案1
需要保护其应用程序的大型网站使用一种称为网络 IDS(入侵检测系统,也称为 IPS(入侵防御系统))的东西,它可以根据某些标准(源 IP、行为、指纹等)拒绝数据包。许多 IDS 允许您将数据包丢弃在地上(例如根本没有响应)、立即终止 TCP/UDP 会话、将您添加到黑洞列表、将会话定向到蜜罐等。这个话题可能非常复杂,也非常有趣:思科和其他公司出售昂贵的设备为您做到这一点,一些安全管理员将其职业生涯都花在了这上面,等等。Facebook、Twitter 和 Google 等大型网站拥有非常复杂的 IDS,它们可以做非常有趣的事情。
IDS 是网络层设备,而非应用层设备。应用层 IDS 仍可能遭受其他多种攻击,如 DDOS、TCP 和 IP 层攻击等。
然而,并不是每个人都能实现网络IDS。在Apache级别,许多人使用mod_security作为应用程序级 IDS。默认情况下,mod_security 具有保护网站免受多种常见攻击的能力,并且可以自定义执行您想要的特定操作。mod_security 可以在“允许模式”下运行,在该模式下,它将警告攻击并打印它认为应该执行的操作,也可以在“阻止模式”下运行,在该模式下,它将主动阻止感知到的攻击。摘自他们的常见问题解答:
ModSecurity™ 是一个开源、免费的 Web 应用程序防火墙 (WAF) Apache 模块。目前,超过 70% 的攻击都是通过 Web 应用程序级别进行的,因此组织需要尽可能多的帮助来确保系统安全。部署 WAF 是为了建立一个外部安全层,以提高安全性,在攻击到达 Web 应用程序之前检测并阻止攻击。它提供针对一系列针对 Web 应用程序的攻击的保护,并允许在对现有基础设施进行少量或完全不做任何更改的情况下进行 HTTP 流量监控和实时分析。
在 OSI 堆栈中,删除此级别的会话有点笨拙,但有些人会做一些类似的事情。请参阅如何使用 mod_security 删除所有请求
mod_security 并不总是一件容易的事,但是 mod_rewrite 也可能变得非常复杂。mod_security 确实有很多文档和经验丰富的用户社区可供借鉴。
答案2
你想在这里实现什么?给可能攻击你的服务器的人带来不便还是保护你的服务器?这两者是不兼容的。
Apache 不能干扰网络堆栈而不做出任何响应;这意味着您必须保持连接打开,这意味着您人为地使进程旋转的时间比所需的时间长得多。然后,对于任何想要对您的站点进行 DOS 的人来说,这都是一个真正有效的资产 - 他们只需向您发送 500 个左右的 phpmyadmin 请求,您的服务器上的每个插槽都会被占用。
您可以将它们重定向到黑洞地址 - 但这样您就需要付出维护一个不起作用的静态 IP 地址的代价。
此外,你相信脚本小子知道如何在客户端上配置短暂的超时吗?通过实现这一点,你只能阻止一个请求。
更好的解决方案是捕获并记录这些请求,然后使用日志(或仅过滤您的 error_log)来提供给 fail2ban。这样,您可以在防火墙上实施拦截,在它们能够找出您安装了哪些软件之前将它们挡在外面。