在Web安全防护中,目录扫描器是攻击者常用的探测工具,其通过遍历敏感路径寻找网站漏洞或敏感文件,可能导致服务器负载升高、信息泄露等风险。本文结合实测结果,提供一套基于Apache Rewrite规则的扫描器拦截方案,精准拦截含特定关键字的扫描请求。
一、实测:6款常用命令行目录扫描器UA特征
为明确拦截目标,我对6款主流命令行目录扫描工具的User-Agent(UA)特征进行了实测,结果如下:
| 扫描器工具 | 实测User-Agent特征 | 是否含可识别关键字 |
|---|---|---|
| Wfuzz | User-Agent: Wfuzz/3.1.0 | 是(Wfuzz) |
| ffuf(Fuzz Faster U Fool) | User-Agent: Fuzz Faster U Fool v2.1.0-dev | 是(Fuzz) |
| Gobuster | User-Agent: gobuster/3.8 | 是(buster) |
| Feroxbuster | User-Agent: feroxbuster/2.12.0 | 是(buster) |
| Dirsearch | 默认UA无明确工具关键字 | 否 |
| Dirb | 默认UA无明确工具关键字 | 否 |
实测结论:Wfuzz、ffuf、Gobuster、Feroxbuster的UA中包含Wfuzz、Fuzz、buster等明确关键字,可直接通过UA特征拦截;Dirsearch、Dirb无默认工具特征,需结合请求行为(如高频路径遍历)进一步防护(下文将补充说明)。
二、Apache拦截规则实现:拦截含指定关键字的请求
核心原理
利用Apache的mod_rewrite模块,检测请求UA中是否包含buster、Fuzz、Wfuzz等扫描器特征关键字,匹配成功则直接返回403 Forbidden(禁止访问),阻断扫描请求。
前置条件
-
确认Apache已启用
mod_rewrite模块:执行命令
httpd -M | grep rewrite(CentOS/RHEL)或apache2ctl -M | grep rewrite(Ubuntu/Debian),若输出rewrite_module (shared)则表示已启用;若未启用,需执行
sudo a2enmod rewrite,重启Apache生效。 -
允许.htaccess文件生效(若使用站点级配置):
编辑Apache主配置文件中网站对应的
<Directory>节点(如/var/www/html),确保AllowOverride All(默认可能为None,需修改),示例:apache<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride All # 允许.htaccess文件生效 Require all granted </Directory>
两种配置方案(按需选择)
方案1:站点根目录.htaccess文件配置(推荐,无需修改主配置)
在网站根目录(如/var/www/html)创建或编辑.htaccess文件,添加以下规则:
apache
# 启用Rewrite引擎
RewriteEngine On
# 拦截规则:UA包含buster、Fuzz、Wfuzz任意关键字即拒绝访问(不区分大小写)
RewriteCond %{HTTP_USER_AGENT} (buster|Fuzz|Wfuzz) [NC]
# 匹配所有请求路径,返回403禁止访问,L表示终止后续规则
RewriteRule ^ - [R=403,L]
方案2:Apache主配置文件(httpd.conf)配置(全局生效)
编辑Apache主配置文件(路径:CentOS/RHEL为/etc/httpd/conf/httpd.conf,Ubuntu/Debian为/etc/apache2/apache2.conf,源码安装为/usr/local/apache2/conf/httpd.conf),在<VirtualHost>节点内(针对单个站点)或全局配置段添加以下规则:
apache
<VirtualHost *:80>
ServerName your-domain.com # 你的网站域名
DocumentRoot /var/www/html # 网站根目录
# 启用Rewrite引擎
RewriteEngine On
# 扫描器拦截规则
RewriteCond %{HTTP_USER_AGENT} (buster|Fuzz|Wfuzz) [NC]
RewriteRule ^ - [R=403,L]
# 其他站点配置(如日志、权限等)
</VirtualHost>
规则详细说明
| 配置项 | 作用说明 |
|---|---|
RewriteEngine On |
启用Rewrite重写引擎,是所有Rewrite规则的前提 |
%{HTTP_USER_AGENT} |
Apache内置环境变量,获取请求的User-Agent头信息 |
| `(buster | Fuzz |
[NC] |
忽略大小写(No Case),确保拦截Buster、fuzz、WFUZZ等大小写变体 |
RewriteRule ^ - |
^表示匹配所有请求路径,-表示不修改请求路径,仅执行后续动作 |
[R=403] |
向客户端返回403 Forbidden响应,明确拒绝访问 |
[L] |
标记为"最后一条规则",匹配成功后终止后续Rewrite规则执行,提升性能 |
三、配置验证:确保拦截规则生效
1. 重启Apache服务
配置完成后,需重启Apache使规则生效:
- CentOS/RHEL:
systemctl restart httpd - Ubuntu/Debian:
systemctl restart apache2 - 源码安装:
/usr/local/apache2/bin/apachectl restart
2. 模拟请求测试(curl命令验证)
通过curl命令模拟扫描器请求和正常浏览器请求,验证拦截效果:
bash
# 1. 模拟Gobuster请求(UA含buster),应返回403
curl -A "gobuster/3.8" http://你的网站IP
# 2. 模拟ffuf请求(UA含Fuzz),应返回403
curl -A "Fuzz Faster U Fool v2.1.0-dev" http://你的网站IP
# 3. 模拟Wfuzz请求(UA含Wfuzz),应返回403
curl -A "Wfuzz/3.1.0" http://你的网站IP
# 4. 模拟正常浏览器请求(UA含Chrome特征),应正常访问(返回200)
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/118.0.0.0 Safari/537.36" http://你的网站IP
若模拟扫描器请求返回403 Forbidden,正常浏览器请求返回网站内容,则说明规则生效。
四、扩展优化:应对更多扫描器与规避行为
1. 扩展拦截关键字(覆盖更多扫描器)
结合之前提到的扫描器UA特征,可扩展关键字列表,拦截Nikto、ZAP、sqlmap等工具,规则修改为:
apache
RewriteCond %{HTTP_USER_AGENT} (buster|Fuzz|Wfuzz|Nikto|ZAP|sqlmap|7kbstorm|Yujian) [NC]
RewriteRule ^ - [R=403,L]
2. 应对无UA特征的扫描器(Dirsearch、Dirb)
Dirsearch、Dirb默认无工具特征,需结合"高频路径请求"行为拦截,可配合Apache的mod_evasive模块(限制单位时间内同一IP的请求次数):
-
安装mod_evasive(CentOS:
yum install mod_evasive,Ubuntu:apt install libapache2-mod-evasive); -
编辑配置文件(
/etc/httpd/conf.d/mod_evasive.conf),添加:apacheDOSHashTableSize 3097 DOSPageCount 20 # 1秒内同一IP请求超过20次触发拦截 DOSSiteCount 100 # 1秒内同一IP对站点的总请求超过100次触发拦截 DOSPageInterval 1 # 统计时间窗口(秒) DOSSiteInterval 1 DOSBlockingPeriod 60 # 拦截时长(秒) -
重启Apache,即可限制高频扫描行为。
3. 隐藏403真实响应(避免攻击者识别拦截规则)
默认403响应会暴露"被拦截"的信息,可修改为返回404 Not Found(伪装成路径不存在),提高隐蔽性:
将规则中的[R=403,L]改为[R=404,L],或直接丢弃请求(无响应):
apache
RewriteRule ^ - [L,R=404] # 返回404
# 或
RewriteRule ^ - [L] # 无响应,客户端超时
五、注意事项
-
.htaccess文件权限:确保.htaccess文件权限为644(Apache用户可读取),避免因权限不足导致规则失效; -
误拦截风险:部分正常请求的UA可能包含拦截关键字(概率极低),可通过添加例外规则规避,例如允许特定IP:
apache# 允许IP为192.168.1.100的请求(不受拦截规则限制) RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$ RewriteCond %{HTTP_USER_AGENT} (buster|Fuzz|Wfuzz) [NC] RewriteRule ^ - [R=403,L] -
规则优先级:若网站已有其他Rewrite规则,需将扫描器拦截规则放在最前面(确保优先执行)。
通过以上配置,可快速实现对主流目录扫描器的拦截,结合行为防护模块能进一步提升防护效果,有效降低网站被扫描探测的风险。