我有一台 apache2 服务器,上面启用了多个网站,包括默认网站 (000default)。默认服务器捕获了大量垃圾请求,这些请求除了消耗带宽和填满日志文件外什么也不做。
什么是最小虚拟主机配置,可以删除所有到达默认站点的请求?
这是我目前使用 mod_security 所做的事情,但它似乎什么也不做,只是对所有请求都响应 403:
<VirtualHost *:80>
ServerName default.only
SecRuleEngine On
SecAction "drop,phase:1"
</VirtualHost>
答案1
该mod_security
操作deny
将产生 403 响应并drop
立即关闭连接。 来自手册:
降低
描述:立即发起“连接关闭”动作,通过发送FIN数据包来拆除TCP连接。
行动组:颠覆性
例子:以下示例启动 IP 收集以跟踪基本身份验证尝试。如果客户端在 2 分钟内尝试次数超过 25 次,它将丢弃后续连接。
SecAction initcol:ip=%{REMOTE_ADDR},nolog
SecRule ARGS:login "!^$" \
nolog,phase:1,setvar:ip.auth_attempt=+1,deprecatevar:ip.auth_attempt=20/120
SecRule IP:AUTH_ATTEMPT "@gt 25" \
log,drop,phase:1,msg:'Possible Brute Force Attack"
笔记
此操作在应对暴力攻击和拒绝服务攻击时非常有用,因为在这两种情况下,您都希望最小化网络带宽和返回到客户端的数据。此操作会导致日志中出现错误消息“(9) 错误的文件描述符:core_output_filter:正在将数据写入网络”
答案2
Apache 必须以某种方式处理请求,不能直接忽略它们。用 进行响应403 Forbidden
是最接近的。
答案3
我设法通过以下配置解决了这个问题:
<VirtualHost *:80>
ServerName default.only
SecRuleEngine On
SecRule REMOTE_ADDR "^\d" drop,phase:1
</VirtualHost>
答案4
这对我来说适用于 libapache2-mod-security2 v2.8.0:
<VirtualHost *:80>
ServerName 1.2.3.4
CustomLog /dev/null combined
# https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual
SecRuleEngine On
SecAction id:1,phase:1,nolog,drop
</VirtualHost>