nginx 通过识别异常 referer、恶意 ip 和可疑 user-agent 拦截垃圾邮件发送者;支持关键词匹配 referer 返回 405、ip 黑名单返回 403、ua 映射过滤及引入社区自动化规则集(如 nginx-ultimate-bad-bot-blocker)。

在 Nginx 中过滤垃圾邮件发送者,核心思路不是拦截“邮件内容”,而是识别并阻断其发起 HTTP 请求的典型行为特征——比如异常 Referer、可疑 User-Agent、高频恶意 IP 或特定 URL 模式。这些请求常用于灌水评论、SEO 垃圾链接、流量劫持或爬虫式引流,Nginx 可在请求进入后端前就完成高效拦截。
基于 Referer 的关键词匹配拦截
大量垃圾邮件发送者会通过伪造或构造含跳转参数的 Referer 来推广黑帽网站,常见路径包含 redirect.php、out.php、redirect.asp 等,且常携带 url=、link=、path= 等参数。
在 server 或 location 块中添加如下规则:
- 使用 $http_referer 变量匹配正则模式
- 对命中关键词的请求直接返回 405(Method Not Allowed),比 403 更明确表示“该入口不支持此方式访问”
- 示例配置:
if ($http_referer ~* (redirect\.php|out\.php|redirect\.asp|url=|link=|seo|poker|porn|sex|jewelry|babes|click)) {
return 405;
}
基于 IP 地址的黑名单屏蔽
若日志中反复出现同一 IP 发起大量含垃圾 Referer 或无意义 UA 的请求,可将其加入静态黑名单。
操作步骤:
- 新建 /etc/nginx/conf.d/deny-ips.conf,逐行写入:
deny 192.168.123.45;
deny 203.0.113.77; - 在对应 server 块内引入:
include /etc/nginx/conf.d/deny-ips.conf; - 被拒绝的请求将返回 403,可配合自定义 403 页面说明原因并提供申诉渠道
结合 User-Agent 识别恶意爬虫
很多垃圾邮件工具使用固定、简陋或已知恶意的 User-Agent 字符串,例如包含 sqlmap、nuclei、masscan、ZmEu、DotBot(滥用版)等。
推荐写法(避免 if 嵌套过多影响性能):
- 在 http 块顶部定义 map:
- map $http_user_agent $bad_ua {
default 0;
~*(sqlmap|nuclei|masscan|ZmEu|DotBot|TrendMicro) 1;
} - 在 server 块中:
if ($bad_ua) { return 403; }
借助社区维护的自动化规则集
手动维护规则易遗漏、难更新。推荐采用 nginx-ultimate-bad-bot-blocker 这类成熟方案:
- 它由社区持续更新,涵盖数万个已知恶意爬虫、扫描器和垃圾邮件发送者的 UA、IP 和 Host 规则
- 部署方式为下载配置文件并 include 到 nginx.conf,无需修改业务逻辑
- 支持白名单机制,可排除搜索引擎主流 UA(如 Googlebot、Bingbot)避免误伤











