基于 Apache 规则拦截目录扫描器请求:实测与配置指南

在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中包含WfuzzFuzzbuster等明确关键字,可直接通过UA特征拦截;Dirsearch、Dirb无默认工具特征,需结合请求行为(如高频路径遍历)进一步防护(下文将补充说明)。

二、Apache拦截规则实现:拦截含指定关键字的请求

核心原理

利用Apache的mod_rewrite模块,检测请求UA中是否包含busterFuzzWfuzz等扫描器特征关键字,匹配成功则直接返回403 Forbidden(禁止访问),阻断扫描请求。

前置条件

  1. 确认Apache已启用mod_rewrite模块:

    执行命令httpd -M | grep rewrite(CentOS/RHEL)或apache2ctl -M | grep rewrite(Ubuntu/Debian),若输出rewrite_module (shared)则表示已启用;

    若未启用,需执行 sudo a2enmod rewrite ,重启Apache生效。

  2. 允许.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),确保拦截BusterfuzzWFUZZ等大小写变体
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的请求次数):

  1. 安装mod_evasive(CentOS:yum install mod_evasive,Ubuntu:apt install libapache2-mod-evasive);

  2. 编辑配置文件(/etc/httpd/conf.d/mod_evasive.conf),添加:

    apache 复制代码
    DOSHashTableSize    3097
    DOSPageCount        20  # 1秒内同一IP请求超过20次触发拦截
    DOSSiteCount        100 # 1秒内同一IP对站点的总请求超过100次触发拦截
    DOSPageInterval     1   # 统计时间窗口(秒)
    DOSSiteInterval     1
    DOSBlockingPeriod   60  # 拦截时长(秒)
  3. 重启Apache,即可限制高频扫描行为。

3. 隐藏403真实响应(避免攻击者识别拦截规则)

默认403响应会暴露"被拦截"的信息,可修改为返回404 Not Found(伪装成路径不存在),提高隐蔽性:

将规则中的[R=403,L]改为[R=404,L],或直接丢弃请求(无响应):

apache 复制代码
RewriteRule ^ - [L,R=404]  # 返回404
# 或
RewriteRule ^ - [L]  # 无响应,客户端超时

五、注意事项

  1. .htaccess文件权限:确保.htaccess文件权限为644(Apache用户可读取),避免因权限不足导致规则失效;

  2. 误拦截风险:部分正常请求的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]
  3. 规则优先级:若网站已有其他Rewrite规则,需将扫描器拦截规则放在最前面(确保优先执行)。

通过以上配置,可快速实现对主流目录扫描器的拦截,结合行为防护模块能进一步提升防护效果,有效降低网站被扫描探测的风险。

相关推荐
卡次卡次121 分钟前
注意点:多线程与多进程与在并行读-->并行cpu或者GPU处理--->并行写 的架构中,如何选择
linux·网络·python
摸鱼仙人~28 分钟前
Ubuntu系统安装VMware Tools 完整流程(解压→安装)
linux·运维·ubuntu
观望过往29 分钟前
Apache IoTDB 连续查询(CQ)全解析
apache·iotdb
CodeByV29 分钟前
【Linux】线程同步与互斥深度解析:从锁机制到生产者消费者模型
linux
源梦想42 分钟前
飞车狂飙动作冒险网页小游戏Linux部署演示
linux·运维·服务器
知攻善防实验室44 分钟前
Yakit热加载 之 出差无聊测酒店 WiFi
安全·web安全·网络安全·渗透测试
ZRT00011 小时前
Ubuntu 22.04安装ESP-IDF
linux·ubuntu·esp32·esp-idf
2301_795167201 小时前
Python 高手编程系列一十八:子类化内置类型
linux·windows·python
赖small强2 小时前
【Linux驱动开发】Linux DMA 技术详解与驱动开发实战
linux·dma·直接内存访问