Apache中用mod_rewrite的[F]标志实现黑名单,本质是匹配Host头、URI或IP等特征后直接返回403 Forbidden,轻量高效;需启用RewriteEngine,用RewriteCond配合正则匹配,如RewriteCond %{HTTP_HOST} ^(malware.example.com)$ [NC] + RewriteRule ^ - [F]。

在 Apache 中用 mod_rewrite 的 [F] 标志实现黑名单拒绝,本质是匹配特定请求特征(如域名、路径、IP、Host 头等),然后直接返回 HTTP 403 Forbidden 响应。它不依赖外部模块或复杂逻辑,轻量、生效快,适合快速拦截已知恶意目标。
匹配 Host 头中的黑名单域名
这是最常见也最实用的场景——防止恶意域名解析到你的服务器 IP 上(即“空主机头”或“恶意绑定”问题)。
- 确保
RewriteEngine On已启用,且配置位于<virtualhost></virtualhost>或主配置中(.htaccess也可用,但需AllowOverride All) - 用
RewriteCond %{HTTP_HOST}提取请求中的 Host 字段,配合正则匹配黑名单 -
RewriteRule ^ - [F]表示:只要条件满足,立即返回 403,不执行后续规则,也不改写 URL
示例配置:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(malware\.example\.com|phishing\.net|badhost\.org)$ [NC]
RewriteRule ^ - [F]
</ifmodule>
说明:[NC] 表示不区分大小写;^ $ 确保完整匹配整个 Host;. 需转义为 \. 避免误匹配
拦截含黑名单关键词的请求路径
适用于封禁扫描器常访问的敏感路径(如 /wp-admin/、/.git/、/phpmyadmin/)或已知攻击特征。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 用
RewriteCond %{REQUEST_URI}检查 URI 路径部分 - 可叠加多个
RewriteCond,用[OR]连接,或分别写多组规则 - 避免误伤静态资源:如需放行
/favicon.ico或/robots.txt,应在黑名单规则前加白名单跳过
示例:
RewriteCond %{REQUEST_URI} \.(git|env|bak|swp)$ [NC,OR]
RewriteCond %{REQUEST_URI} (phpmyadmin|wp-config\.php|shell\.php) [NC]
RewriteRule ^ - [F]
结合远程地址做 IP 或域名级黑名单
若想按来源 IP 或反向解析出的主机名拦截,可用 %{REMOTE_ADDR} 或 %{REMOTE_HOST}。
-
%{REMOTE_ADDR}获取客户端真实 IP(注意:若前端有 CDN/Nginx,需先配置RemoteIPHeader X-Forwarded-For) -
%{REMOTE_HOST}会触发 DNS 反查,性能开销大,生产环境慎用 - 更高效的做法是配合
RewriteMap使用外部文本映射文件,支持热更新无需 reload
简单 IP 黑名单示例:
RewriteCond %{REMOTE_ADDR} ^(192\.168\.10\.5|203\.0\.113\.77|12\.34\.56\.\d+)$
RewriteRule ^ - [F]
注意事项与避坑点
[F] 看似简单,但实际部署时容易出错:
- Apache 版本必须启用
mod_rewrite,且配置上下文权限允许(如.htaccess中需AllowOverride FileInfo或更高) - 规则顺序很重要:放在其他重写规则之前,否则可能被提前改写而无法匹配原始 Host 或 URI
- 不要在同一条规则里混用
[F]和[L]——[F]本身已隐含终止行为,[L]是冗余的 - 测试时用
curl -H "Host: malware.example.com" http://your-ip/验证,避免仅靠浏览器访问(浏览器总带 Host) - 开启
LogLevel rewrite:trace3可查看重写过程,确认条件是否命中









