服务器每天被无数无用 POST 请求,求一个读 nginx 日志拉黑 IP 的脚本

2023-02-05 00:50:32 +08:00
 kaiki

日志文件 /home/www/xxx.log

日志内容 (xxx 为自己服务器 IP ,就不需要 V 友帮我做压测了)

182.149.161.215 - - [04/Feb/2023:23:18:55 +0800] " POST /u/k.php HTTP/1.1 " 403 548 " http://xxx.xxx.xxx.xxx/u/k.php " " Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; 2Pac; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
182.149.161.215 - - [04/Feb/2023:23:18:55 +0800] " POST /u/k.php HTTP/1.1 " 403 548 " http://xxx.xxx.xxx.xxx/u/k.php " " Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; 2Pac; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"

攻击者会每秒 POST 请求 /u/k.php 数次,拉黑后过一段时间会切到其他 IP 继续攻击,我想能不能写个脚本来分析下日志,几分钟执行一次就行,如果开始攻击大概 100 行内就可以找到这种日志吧,不会写 sh 脚本,有会写的 V 友救一下吗?

3921 次点击
所在节点    Linux
19 条回复
HAWCat
2023-02-05 00:54:06 +08:00
用 fail2ban
realpg
2023-02-05 01:13:31 +08:00
流量一个月 50MB 顶天了
CPU 等效占用 0.01%顶天了

管他干啥
kaiki
2023-02-05 01:18:18 +08:00
@realpg 我也不明白为什么会要这样攻击啊,服务器上并没有这个文件,他就是要请求,而且他也不在乎返回,单纯就是想请求,不怕贼偷就怕贼惦记
yuzo555
2023-02-05 01:43:59 +08:00
搜索这个 User-Agent ,没发现有价值的信息,只能发现攻击程序可能是易语言写的,IP 查了下也是家宽的 IP 。

如果服务器压力不大的话,你干脆直接封 User-Agent 关键词,直接让 nginx 返回 403 就好,还不用浪费资源去跑 php
FrankAdler
2023-02-05 02:15:54 +08:00
#!/bin/bash

line=1000
times=10
conf=/opt/nginx/conf/blockip.conf

tail /data/logs/nginx/access.log -n $line | \
grep -E '("status":"404"|"status":"302")' | awk '{print $1}' | \
sort | uniq -c | \
awk '$1>$times{print "deny "$2 ";"}' >> $conf

deny=$(sort $conf | uniq -c | awk '{print "deny "$3}')
echo $deny | sed "s/; /;\n/g" > $conf

/usr/local/sbin/nginx -t || exit
/usr/bin/systemctl reload nginx

大于 10 次,从最近 1000 条日志分析,nginx.con 自行 include 那个 blockip.conf
FrankAdler
2023-02-05 02:17:07 +08:00
@FrankAdler grep -E 修改下
#!/bin/bash

line=1000
times=10
conf=/opt/nginx/conf/blockip.conf

tail /data/logs/nginx/access.log -n $line | \
grep -E '(" 404 "|"status":" 302 ")' | awk '{print $1}' | \
sort | uniq -c | \
awk '$1>$times{print "deny "$2 ";"}' >> $conf

deny=$(sort $conf | uniq -c | awk '{print "deny "$3}')
echo $deny | sed "s/; /;\n/g" > $conf

/usr/local/sbin/nginx -t || exit
/usr/bin/systemctl reload nginx
FrankAdler
2023-02-05 02:22:16 +08:00
还是漏了一点,算了你自己稍微调整下吧,因为我的日志输出是 json
eason1874
2023-02-05 02:31:18 +08:00
每秒几次,对 nginx 造不成压力,直接 444 无响应关闭连接好了

location = /u/k.php {
return 444;
}
raysonx
2023-02-05 03:36:10 +08:00
如果题主的正常用户是用域名访问的,可以配置 nginx 对所有未知域名(包括直接 IP 地址访问) return 444 。
stabc
2023-02-05 08:09:45 +08:00
nginx 自带 rate limit
busier
2023-02-05 12:53:32 +08:00
这种 P 大的事也配称作“攻击”~~~~~~~~~
HeyEvan
2023-02-05 14:48:17 +08:00
上 Cloudflare ,系统防火墙并限制 CF IP 段访问,Cloudflare 上限制国家访问,一年了就没见到这些请求
lcy630409
2023-02-05 18:55:04 +08:00
这种 P 大的事也配称作“攻击”~~~~~~~~~
常规扫描而已
qile11
2023-02-06 02:45:02 +08:00
@HeyEvan cloudflare 上了国内访问速度特别慢有没有解决办法?
TGl2aWQgZGUgZGll
2023-02-06 09:24:13 +08:00
就是批量漏洞扫描工具而已,不用管他,对你完全没影响
HeyEvan
2023-02-06 09:34:56 +08:00
@qile11 如果是自己访问的话可以试试 CloudflareSpeedTest 优选 IP ,稳定性就不清楚了。我自己的走代理
xyjincan
2023-02-06 14:45:42 +08:00
给 404 页面定义一个空页面返回,只给个响应头呗,对安全没有啥影响,
libook
2023-02-06 14:58:15 +08:00
现在黑客都是机器人自动扫描 IP 段,发现在线主机后自动扫描端口,发现 Web 服务自动按照漏洞特征来扫描是否存在漏洞,发现漏洞自动攻击,或者把信息提供给黑客来人工攻击。攻击之后要么就是加密数据勒索,要么是用来挖矿,要么是用来当肉鸡部署机器人来对其他服务器进行扫描。

一般企业的方案是用 Web 应用防火墙来防护,个人项目确保不会被扫描出漏洞的话也可以简单地用一些类似 fail2ban 的方案。
AIyunfangyu
302 天前
可以加我合作交流下防御 V:with--tea

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/913244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX