实时监控80/443端口ESTABLISHED连接并提取高频IP,用ss命令比netstat更快:ss -tn state established '( dport = :80 or dport = :443 )' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -15;配合watch每2秒刷新观察异常波动。

实时抓取活跃连接中的高频IP
不依赖日志文件,直接从网络栈提取当前活跃请求来源:
- 用 ss 查 80/443 端口的 ESTABLISHED 连接(比 netstat 更快):
ss -tn state established '( dport = :80 or dport = :443 )' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -15 - 每2秒刷新一次,观察波动异常的IP:
watch -n2 'ss -tn state established "( dport = :80 or dport = :443 )" | awk "{print \$5}" | cut -d: -f1 | sort | uniq -c | sort -nr | head -10' - 若发现某IP连接数持续 >50 或远超其他IP,极可能是扫描或CC攻击源头
滚动分析最近日志中的突发IP
结合时间精度,聚焦最近5–10分钟内的访问行为:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 提取最近10000行日志中、过去10分钟内出现的IP:
tail -10000 /var/log/nginx/access.log | awk -v d="$(date -d '10 minutes ago' '+%d/%b/%Y:%H:%M')" '$4 ~ d {print $1}' | sort | uniq -c | sort -nr | head -10 - 注意:Nginx日志第4字段是时间戳(如
[25/Sep/2026:19:20:01 +0000]),命令中已自动匹配到分钟级 - 若某IP在该窗口内出现超200次,基本可判定为异常流量,需结合状态码进一步验证(如大量404或499)
联动状态码快速识别攻击特征
单纯频次高未必是攻击,要叠加响应行为判断:
- 查最近100条日志中,来自同一IP且返回404/499/502的高频请求:
tail -100 /var/log/nginx/access.log | awk '$9 ~ /^(404|499|502)$/ {print $1}' | sort | uniq -c | sort -nr | head -5 - 配合路径特征,识别目录爆破或漏洞探测:
tail -1000 /var/log/nginx/access.log | awk '$9 == 404 && $7 ~ /wp-admin|phpmyadmin|\.git|\.env/ {print $1, $7}' | sort | uniq -c | sort -nr | head -5 - 出现“同一IP + 多个非常规路径 + 404”组合,基本可确认为自动化扫描
简单封禁建议(临时应急)
确认攻击IP后,可快速阻断:
- 用 iptables 临时屏蔽(重启失效):
iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP - 写入 Nginx 配置做 deny(需 reload):
deny xxx.xxx.xxx.xxx;放在 http/server/location 块中 - 注意:先记录IP,再操作;避免误封CDN或代理出口IP(尤其检查是否有 X-Forwarded-For)

















