当前位置:网站首页 >  攻略

零门槛部署Nginx防火墙拦截网站垃圾流量实操手册

时间:2026年06月13日 02:56:42 来源:易频IT社区

一、环境准备与版本确认

在开始配置之前,必须确保服务器上已经安装了Nginx。本指南基于Nginx主流版本编写,所有指令均兼容Nginx 1.18及以上版本。首先登录服务器,执行以下命令检查Nginx版本及运行状态:

1. 检查Nginx版本

```bash nginx -v ```

2. 检查配置文件语法(确保当前环境无误)

```bash nginx -t ```

如果输出显示 syntax is oktest is successful,则环境正常。接下来,我们需要找到Nginx的主配置文件,通常路径为 /etc/nginx/nginx.conf。建议在修改前先备份原文件:

```bash cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak ```

二、拦截恶意User-Agent扫描

大量的垃圾流量和恶意扫描器通过特定的User-Agent特征进行识别,例如Python脚本、恶意爬虫或SEO扫描工具。我们可以利用Nginx的 map 指令高效定义黑名单,并在Server块中进行拦截。

1. 定义UA黑名单映射

打开 ,在 http {} 块内的任意位置(建议放在 http {} 的起始部分)添加以下配置。这段代码定义了一个名为 $block_user_agent 的变量,当请求头中的User-Agent匹配到括号内的关键词时,该变量值变为1。

```nginx map $http_user_agent $block_user_agent { default 0; ~malicious 1; ~bot 1; ~spider 1; ~crawler 1; ~scraper 1; ~curl 1; ~wget 1; ~python 1; ~java 1; ~go-http 1; ~nmap 1; ~sqlmap 1; ~nikto 1; } ```

注意: ~ 表示不区分大小写的正则匹配。上述列表包含了常见的恶意工具特征。如果你的业务需要允许百度或谷歌爬虫,请勿直接使用通用的 ~spider,而是将其替换为具体的恶意爬虫名称,例如 ~badbot

2. 应用拦截规则

定义好变量后,需要在具体的网站配置 server {} 块中应用拦截逻辑。找到你需要防护的 server 配置段,添加以下 if 判断:

```nginx server { listen 80; server_name example.com; 如果UA匹配黑名单,直接返回403 if ($block_user_agent = 1) { return 403; } 其他原有配置... location / { ... } } ```

三、开启请求频率限制(防CC攻击)

垃圾流量往往伴随着高频请求,试图耗尽服务器资源。Nginx的 limit_req_zone 模块基于漏桶算法,可以精准限制单个IP的请求速率。

1. 定义限流区域

http {} 块中添加限流区域定义。这行代码表示使用客户端IP地址($binary_remote_addr)作为键,开辟一个10MB的内存区域(约可存储16万个IP状态),限制每个IP的请求速率为每秒1次(rate=1r/s)。

```nginx http { ...其他配置 定义限流区域:one是区域名,10m是内存大小,rate=1r/s是速率限制 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... } ```

2. 应用限流策略

进入目标 server {} 或具体的 location {} 块中应用限流。通常建议在 location / 中应用。

```nginx location / { 应用限流:zone=one对应上面定义的区域,burst=5允许突发5个请求,nodelay表示超过限制立即处理,不延迟 limit_req zone=one burst=5 nodelay; 被限流时的默认返回值,可以自定义 limit_req_status 503; ... } ```

参数详解: burst=5 允许用户在短时间内突发发送5个请求放入队列,如果开启 nodelay,则这5个请求会被立即处理,但后续请求会被直接拒绝;如果不加 nodelay,Nginx会平滑处理这些请求。对于拦截垃圾流量,建议加上 nodelay 以便快速拒绝。

四、过滤垃圾查询参数(防注入与SEO污染)

攻击者经常在URL参数中注入恶意代码(如 eval, base64)或携带大量垃圾SEO关键词(如 ? 后接长串乱码)。通过检测 $query_string 可以直接阻断此类请求。

server {} 块中添加以下规则:

```nginx server { ...其他配置 拦截包含敏感函数名的请求 if ($query_string ~ "union.select") { return 403; } if ($query_string ~ "eval\(") { return 403; } if ($query_string ~ "base64_decode") { return 403; } 拦截包含大量垃圾字符的超长参数(例如长度超过200字符) if ($args ~ ".{200,}") { return 403; } } ```

零门槛部署Nginx防火墙拦截网站垃圾流量实操手册

操作细节: 使用正则表达式匹配时,特殊字符如左括号 ( 需要使用反斜杠 \ 转义。上述规则会直接拦截SQL注入尝试和常见的Webshell特征。

五、建立IP黑名单管理机制

对于持续攻击的固定IP,直接封禁是最有效的方法。为了避免Nginx主配置文件过于臃肿,我们将黑名单独立存储。

1. 创建黑名单文件

在Nginx配置目录下创建一个专门存放黑名单的文件:

```bash touch /etc/nginx/blockip.conf ```

编辑该文件,按如下格式添加IP地址:

```nginx 单个IP封禁 deny 192.168.1.100; 封禁整个C段网段 deny 10.0.0.0/8; 其他所有允许 allow all; ```

2. 引用黑名单文件

http {} 块、server {} 块或 location {} 块中引入该文件。通常建议放在 server {} 块的顶部,使其最先生效:

```nginx server { 引入IP黑名单配置 include /etc/nginx/blockip.conf; ... } ```

以后需要封禁新IP时,只需编辑 /etc/nginx/blockip.conf 并重载配置即可,无需动主文件。

六、完整配置示例与生效

以下是一个整合了上述所有功能的 server 块完整示例,你可以直接参考并替换原有的配置:

```nginx http { 1. 定义UA黑名单 map $http_user_agent $block_user_agent { default 0; ~malicious 1; ~python-requests 1; ~scrapy 1; ~curl 1; } 2. 定义限流区域 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s; server { listen 80; server_name yoursite.com; root /var/www/html; index index.html; 3. 引入IP黑名单 include /etc/nginx/blockip.conf; 4. 应用UA拦截 if ($block_user_agent = 1) { return 403; } 5. 拦截恶意参数 if ($query_string ~ "union.select|eval\(|base64_decode") { return 403; } location / { 6. 应用限流 limit_req zone=api_limit burst=10 nodelay; try_files $uri $uri/ =404; } } } ```

七、测试与重载配置

配置修改完成后,必须进行语法检查和重载,确保所有规则生效且不会导致服务中断。

1. 测试配置文件语法

```bash nginx -t ```

如果提示 syntax is ok,则说明配置无误。如果报错,请根据行号检查拼写或括号匹配情况。

2. 平滑重载Nginx

```bash nginx -s reload ```

3. 验证拦截效果

使用 curl 命令模拟恶意UA进行测试,如果返回 403 Forbidden,则证明规则生效:

```bash curl -I -A "python-requests/2.0" http://yoursite.com ```

预期输出应包含:

```text HTTP/1.1 403 Forbidden ... ```

至此,一套涵盖UA识别、频率限制、参数过滤和IP封禁的网站垃圾流量拦截系统已部署完成。这套方案无需安装额外软件,完全依赖Nginx原生能力,资源消耗极低,能够有效拦截绝大多数自动化垃圾流量和恶意攻击。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图