我有一个 lighttpd 网络服务器,用于提供 PHP 生成的网页。由于 DDoS 机器人攻击,该服务器目前面临大量流量,我正在寻找一种方法来阻止或缓解其中一些攻击。
据我所知,lighttpd 提供了通过远程 IP 地址阻止请求的可能性,例如通过
$HTTP["remoteip"] == "12.34.56.0/24" {
url.access-deny = ( "" )
}
,lighttpd.conf
来自 IP 范围 12.34.56.0 - 12.34.56.255 的所有请求都将被阻止。
然而,由于 DDoS 的性质,阻止单个 IP 地址或范围是不可行的,因为它们变化相当频繁。
通过检查访问日志,我发现来自机器人的大多数请求似乎使用较旧的 HTTP/1.0 协议,而大多数合法流量使用 HTTP/1.1。
我的问题是:有没有办法在 lighttpd 中阻止/拒绝通过 HTTP/1.0 传入的所有请求(并允许通过 HTTP/1.1 传入的请求)?
我在官方网站上找不到这种可能性lighttpd 配置文档。
笔记:
- 我知道一些合法流量也可能使用 HTTP/1.0,但我也可以阻止这些流量。
- 机器人请求似乎没有使用用户代理或 HTTP 引荐来源的通用模式,因此使用具有正则表达式模式的请求似乎不是一个选择。
答案1
lighttpd
我建议你使用失败2ban它存在于所有基于 Unix 的系统上。它会监视日志文件中的更改并根据正则表达式规则对其进行解析,如果匹配模式(在您的情况下为 HTTP/1.0),则会在系统的防火墙级别阻止它,这对阻止不需要的连接更有效。
此外,如果您遇到异常流量,恶意请求多于正常请求,您可以添加以下防火墙规则来减缓 DDoS 攻击
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT
如果您仍然想在lighttpd
级别阻止 HTTP/1.0,请尝试像这样匹配 HTTP 协议:
env.SERVER_PROTOCOL == "HTTP/1.0" {
url.access-deny = ( "" )
}
nginx
(自从我很久以前切换以来,解决方案尚未经过测试,但据我所知它可能会起作用。)