三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何通过Nginx日志定位恶意IP?

美国、香港服务器

如何通过Nginx日志定位恶意IP?

01-29   来源:

 通过 Nginx 日志定位恶意 IP 的核心是筛选高频请求、异常行为的日志特征(如短时间大量请求、异常状态码、恶意请求路径 / UA 等),结合 Linux 文本处理命令快速统计、排序,精准锁定发起攻击的恶意 IP。以下是可直接复制执行的实战命令,适配宝塔面板和原生 Nginx,覆盖CC 攻击、扫描攻击、异常请求等主流攻击场景的 IP 定位,同时包含日志路径、结果解读和批量封禁方法,步骤清晰、落地性强。

一、先明确:Nginx 日志的默认路径(宝塔 / 原生区分)
定位 IP 前先确认日志文件位置,避免找错文件:
1. 宝塔面板 Nginx(最常用)
bash
运行
# 站点专属日志(核心,替换为你的实际域名)
/www/wwwlogs/你的域名.com.log
# Nginx全局错误日志(排查配置/服务异常)
/www/server/nginx/logs/error.log
2. 原生 Nginx(yum/apt 安装 / 源码编译)
bash
运行
# 系统默认访问日志(yum/apt安装)
/var/log/nginx/access.log
# 源码编译默认日志(需确认配置文件中的log_path)
/usr/local/nginx/logs/access.log
# 全局错误日志
/var/log/nginx/error.log 或 /usr/local/nginx/logs/error.log
二、核心实战:按攻击场景定位恶意 IP(命令直接复制)
以下命令均遵循「筛选日志特征 → 提取 IP → 去重统计 → 按请求数降序」逻辑,结果中请求数远高于正常 IP 的,即为恶意 IP(正常用户单秒请求数通常<10,攻击 IP 可达数百 / 数千)。
场景 1:定位 CC 攻击 / 高频请求恶意 IP(最常见)
CC 攻击的核心特征是单个 IP 短时间发起大量请求,直接统计日志中请求数 TOP 的 IP,快速锁定攻击源:
bash
运行
# 宝塔版(替换为你的站点日志路径)
cat /www/wwwlogs/你的域名.com.log | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
 
# 原生版
cat /var/log/nginx/access.log | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
命令解读:
awk "{print $1}":提取日志中第一列的客户端 IP(Nginx 默认日志格式,IP 为第一列);
sort | uniq -c:对 IP 去重,统计每个 IP 的总请求数;
sort -nr:按请求数从高到低排序(n = 数字排序,r = 反向);
head -20:只显示前 20 个请求数最多的 IP(可按需调整为 30/50)。
结果示例(一眼识别恶意 IP):
plaintext
1258  1.2.3.4  # 该IP请求1258次,明显为攻击IP
896   5.6.7.8  # 次高攻击IP
45    192.168.1.100  # 正常运维IP,请求数合理
12    10.0.0.5   # 正常用户IP
场景 2:定位被 Nginx 限流拦截的恶意 IP(适配 limit_req/limit_conn)
若已配置limit_req/limit_conn,被拦截的请求会返回503 状态码,直接筛选 503 日志的 IP,精准定位被限流的攻击 IP:
bash
运行
# 宝塔版
cat /www/wwwlogs/你的域名.com.log | grep " 503 " | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
 
# 原生版
cat /var/log/nginx/access.log | grep " 503 " | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
关键:grep " 503 " 前后加空格,避免匹配到含 503 的其他内容(如请求路径)。
场景 3:定位扫描 / 恶意路径请求的 IP(如扫后台 / 漏洞)
攻击方常扫描/phpmyadmin、/admin、/shell.php等敏感路径,筛选这类异常请求的 IP,定位扫描源:
bash
运行
# 宝塔版(按需添加/修改恶意路径关键词,用|分隔)
cat /www/wwwlogs/你的域名.com.log | grep -E "phpmyadmin|admin/login|shell\.php|xmlrpc\.php|setup\.php" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
 
# 原生版
cat /var/log/nginx/access.log | grep -E "phpmyadmin|admin/login|shell\.php|xmlrpc\.php|setup\.php" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
关键词说明:可根据业务场景添加,如/wp-admin(WordPress 后台)、/config.php等。
场景 4:定位恶意 UA / 爬虫攻击的 IP(如扫描器 / 自动化工具)
攻击工具通常带有特征化的 User-Agent(如 sqlmap、nmap、python),筛选这类恶意 UA 的 IP,拦截自动化攻击:
bash
运行
# 宝塔版(按需添加/修改恶意UA关键词,用|分隔)
cat /www/wwwlogs/你的域名.com.log | grep -E "sqlmap|nmap|python|scrapy|curl|wget|attack|scan|bot/999" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
 
# 原生版
cat /var/log/nginx/access.log | grep -E "sqlmap|nmap|python|scrapy|curl|wget|attack|scan|bot/999" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
场景 5:定位短时间(近 10 分钟)的突发攻击 IP(精准锁定实时攻击)
若服务器突然卡顿,需定位最近 10 分钟内的高频请求 IP,避免统计历史日志干扰:
bash
运行
# 宝塔版(仅筛选近10分钟日志,需Nginx日志为默认时间格式)
tail -n 10000 /www/wwwlogs/你的域名.com.log | grep "$(date +%d/%b/%Y:%H)" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
 
# 原生版
tail -n 10000 /var/log/nginx/access.log | grep "$(date +%d/%b/%Y:%H)" | awk "{print $1}" | sort | uniq -c | sort -nr | head -20
说明:tail -n 10000 表示取最新 1 万行日志(可按需增大),grep "$(date +%d/%b/%Y:%H)" 筛选当前小时的日志,精准定位实时攻击。
三、进阶:实时监控日志,定位正在发起的攻击 IP
若攻击正在进行,可实时跟踪 Nginx 日志,动态查看请求情况,即时锁定恶意 IP:
bash
运行
# 宝塔版:实时打印日志,按Ctrl+C停止
tail -f /www/wwwlogs/你的域名.com.log
 
# 原生版
tail -f /var/log/nginx/access.log
 
# 进阶:实时筛选503拦截日志,只看攻击IP
tail -f /www/wwwlogs/你的域名.com.log | grep " 503 "  # 宝塔
tail -f /var/log/nginx/access.log | grep " 503 "      # 原生
实时日志特征:若看到同一 IP 连续刷屏,且请求间隔极短,直接判定为恶意 IP。
四、关键:结果解读与误封规避(必看)
统计结果中并非所有高请求数 IP 都是恶意的,需排除正常 IP,避免误封:
必排除的正常 IP:服务器本机 IP(127.0.0.1)、运维办公 IP、公司内网 IP、CDN 节点 IP(如阿里云 / 腾讯云 CDN);
正常高请求 IP 特征:请求数高但请求间隔均匀、状态码以 200/304 为主(静态资源加载)、UA 为正常浏览器(Chrome/Firefox);
恶意 IP 核心特征:请求数远超正常水平、短时间连续请求同一接口、状态码多为 503/499/403、UA 为爬虫 / 工具或无 UA。
五、定位后快速处理:批量封禁恶意 IP(iptables / 安全组)
锁定恶意 IP 后,立即封禁阻断攻击,云服务器优先用安全组封禁(效率更高、重启不失效),物理机 / 本地服务器用 iptables。
方法 1:iptables 临时封禁单个 / 多个恶意 IP(服务器本地)
bash
运行
# 封禁单个恶意IP(禁止所有访问)
iptables -A INPUT -s 1.2.3.4 -j DROP
 
# 批量封禁多个IP(一行一个)
iptables -A INPUT -s 5.6.7.8 -j DROP
iptables -A INPUT -s 9.10.11.12 -j DROP
 
# 查看已封禁的IP规则
iptables -L -n --line-numbers
 
# 误封解封(替换数字为规则行号,可从上面命令结果查看)
iptables -D INPUT 1
说明:iptables 封禁为临时生效,服务器重启后规则消失,攻击缓解后可按需解封。
方法 2:云服务器安全组封禁(推荐,永久生效)
阿里云 / 腾讯云 / 华为云等云服务器,直接在控制台 - 安全组 - 入方向添加黑名单规则:
协议:全部;
源地址:填写恶意 IP/IP 段;
动作:拒绝;
优先级:设为最高(如 1),确保优先匹配。
优势:流量在云端直接拦截,不会到达你的服务器,对服务器无性能消耗。
方法 3:批量提取恶意 IP 并自动封禁(高效处理大量攻击 IP)
若统计出数十 / 上百个恶意 IP,可通过命令批量提取 IP 并写入 iptables,无需手动逐个添加:
bash
运行
# 宝塔版:提取TOP20恶意IP并批量封禁(需确认日志路径)
cat /www/wwwlogs/你的域名.com.log | awk "{print $1}" | sort | uniq -c | sort -nr | head -20 | awk "{print $2}" | while read ip; do iptables -A INPUT -s $ip -j DROP; done
 
# 原生版
cat /var/log/nginx/access.log | awk "{print $1}" | sort | uniq -c | sort -nr | head -20 | awk "{print $2}" | while read ip; do iptables -A INPUT -s $ip -j DROP; done
注意:执行前务必确认结果中无正常 IP,避免批量误封!
六、前置优化:确保 Nginx 日志格式正确(IP 可正常提取)
以上所有命令均基于Nginx 默认日志格式(IP 为第一列),若日志格式被修改,需先恢复 / 确认格式,确保awk "{print $1}"能正常提取 IP。Nginx 默认日志格式配置(在nginx.conf的http{}段):
nginx
log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
                  "$status $body_bytes_sent "$http_referer" "
                  ""$http_user_agent" "$http_x_forwarded_for"";
access_log  /var/log/nginx/access.log  main;  # 原生路径
# access_log  /www/wwwlogs/你的域名.com.log  main;  # 宝塔路径
关键:$remote_addr 为第一个字段,确保是客户端真实 IP(若接入 CDN,需开启 CDN 的「真实 IP 透传」,并将$remote_addr改为$http_x_forwarded_for)。

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何通过Nginx日志定位XSS攻击的恶意IP? 下一篇:突发请求阈值的配置对服务器性能有哪些影响?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器、香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)