直接用 RewriteRule 配合 [F] 标志即可实现黑名单强制拒绝,核心是匹配即返回403 Forbidden;需确保 mod_rewrite 已加载且 RewriteEngine On 已启用,支持单域名/IP封禁、外部文件动态管理及多条件组合防误伤。

直接用 RewriteRule 配合 [F] 标志就能实现基于黑名单的强制拒绝,核心是让匹配到黑名单条目的请求立刻返回 403 Forbidden 响应,不执行后续规则、不跳转、不透传。
配置位置与启用前提
必须确保以下两点已满足,否则规则不生效:
-
mod_rewrite 模块已加载:运行
apachectl -M | grep rewrite,输出中应含rewrite_module (shared);若无,需在主配置中添加LoadModule rewrite_module modules/mod_rewrite.so -
允许重写引擎启用:在
<VirtualHost>或<Directory>块内,或在.htaccess中(前提是该目录的AllowOverride包含FileInfo或设为All)显式写入RewriteEngine On
单域名或IP的简单拒绝
适用于明确要封禁某个恶意域名或固定IP的情况,规则简洁直观:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^badexample\.com$ [NC]
RewriteRule ^ - [F]
<p>RewriteCond %{REMOTE_ADDR} ^192.168.1.100$ [OR]
RewriteCond %{REMOTE_ADDR} ^203.0.113.55$
RewriteRule ^ - [F]
说明:
- %{HTTP_HOST} 匹配请求头中的 Host 字段,[NC] 表示不区分大小写
- %{REMOTE_ADDR} 是客户端真实 IP,多个 IP 用 [OR] 连接
- ^ - [F] 表示“匹配任意路径开头”,然后立即返回 403
使用外部黑名单文件动态管理
适合需要频繁增删黑名单项、且不想每次修改都 reload Apache 的场景。Apache 通过 RewriteMap 读取纯文本映射文件:
- 在
httpd.conf或vhost全局块中定义映射(不能放在.htaccess):RewriteMap hosts-deny "txt:/etc/apache2/hosts.deny" - 在对应虚拟主机或目录块中写入规则:
RewriteEngine On<br> RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]<br> RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND<br> RewriteRule ^ - [F] -
/etc/apache2/hosts.deny文件格式为键值对,每行一个条目,键后必须跟一个值(哪怕只是短横线):193.102.180.41 -<br> badexample.com -<br> scan-bot.net -
注意:该文件修改后无需重启或 reload Apache,mod_rewrite 会自动轮询更新(默认间隔数秒)。
组合条件与避免误伤
实际环境中常需叠加多个判断,同时防止规则影响正常流量:
- 排除运维或监控来源:
RewriteCond %{REMOTE_ADDR} !^10\.10\.0\.<br> RewriteCond %{HTTP_USER_AGENT} !^Zabbix<br> RewriteCond %{HTTP_HOST} ^(malware|phish)\.example\.com$ [NC]<br> RewriteRule ^ - [F] - 限制仅对特定路径生效(如后台入口):
RewriteCond %{HTTP_HOST} badadmin\.net [NC]<br> RewriteRule ^/wp-admin/ - [F] - 配合
[L]确保终止处理:RewriteRule ^/api/.* - [F,L]—— 加上[L]可防止后续规则干扰

















