我在一家 ISP 工作,当用户信用为零时,所有 HTTP 请求都会 NAT 到我的网络服务器(Apache 2.2)进行付款。
如果用户的下载程序或自动更新程序正在运行,那么所有这些请求都会进入我的网络服务器,而此操作会导致 75% 的 Apache 响应为 404。
我想限制、缓存或丢弃这些请求数据包。有人有解决方案吗?在 Apache 或防火墙或路由器级别。
答案1
这个问题没有好的解决方案——Apache 需要处理请求才能显示“付款,傻瓜!”页面。任何阻止请求进入 Apache 的操作都必须在网络层进行,此时您的用户将不再获得强制门户页面,而是会打电话给您的帮助台大喊“它坏了!”
坦白说你不应该关心如果强制门户服务器正在消耗 CPU/RAM/其他资源——请将支付页面放在专用的盒子上,让它被攻击。攻击它的人都是懒汉,如果他们必须点击几次重新加载才能获得支付页面,那就这样吧。
此外,你的支付服务器可能不应该返回 404曾经-- 它应该为收到的任何请求提供支付页面服务,无论 URL 如何......
答案2
一些选择:
使用 nginx 或其他带有 catch-all 配置的“轻量级”http 服务器
对每个源 ip 使用基于 iptables 的速率限制 [google 关键词:iptables hashlimit] 并拒绝或静默丢弃不需要的请求百分比,仅传递少数请求。