
有时候博客会有莫名其妙的人进来,腾云阁看到这个解决方法待试试
收录待用,修改转载已取得腾讯云授权
代码节选:
使用 nginx 封锁
...
-封锁 IP
#!/bin/bash max=500 #我们设定的最大值,当访问量大于这个值得时候,封锁 cOnfdir=/usr/local/data/nginx/conf/blockip.conf #nginx 封锁配置文件路径 logdir=/usr/local/data/nginx/logs/access_huke88.log #nginx 访问日志文件路径 #检测文件 test -e ${confdir} || touch ${confdir} drop_ip="" #循环遍历日志文件取出访问量大于 500 的 ip for drop_ip in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>500) print $2}') do grep -q "${drop_Ip}" ${confdir} && eg=1 || eg=0; if (( ${eg}==0 ));then echo "deny ${drop_Ip};">>$confdir #把“ deny IP ;”语句写入封锁配置文件中 echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 -> ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log #记录 log fi done service nginx reload -解锁 IP
#!/bin/bash sed -i 's/^/#&/g' /usr/local/nginx/conf/ blockip.conf #把 nginx 封锁配置文件中的内容注释掉 service nginx reload #重置 nginx 服务,这样就做到了解锁 IP 使用 iptables 封锁
...
-封锁 IP 脚本
#!/bin/bash max=500 #我们设定的最大值,当访问量大于这个值得时候,封锁 logdir=/usr/local/data/nginx/logs/access_huke88.log #nginx 访问日志文件路径 port=80 drop_ip="" #循环遍历日志文件取出访问量大于 500 的 ip for drop_ip in $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>500) print $2}') do grep -q "${drop_Ip}" ${confdir} && eg=1 || eg=0; if (( ${eg}==0 ));then iptables -I INPUT -p tcp --dport ${port} -s ${drop_Ip} -j DROP echo ">>>>> `date '+%Y-%m-%d %H%M%S'` - 发现攻击源地址 -> ${drop_Ip} " >> /usr/local/data/nginx/logs/nginx_deny.log #记录 log fi done ...
加入计划任务每五分钟执行一次
chmod +x /home/scripts/deny_ip.sh #####nginx 封 ip###### */5 * * * * /bin/sh /home/scripts/deny_ip.sh >/dev/null 2>&1 原文链接: https://www.qcloud.com/community/article/281027001490538345
1 hcymk2 2017-04-14 00:30:46 +08:00 还是用 ipset 吧 其实 fail2ban 也可以。 |
2 cxbig 2017-04-14 06:56:19 +08:00 不是有 fail2ban ? 现在比较流行 WAF ,服务器几乎只用处理正常的访问。 |
3 ic3z 2017-04-14 08:56:31 +08:00 via Android 日志文件大的时候,这个取地址会不会炸? $(cat $logdir | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1>500) print $2}') |
4 AnonymousAccout 2017-04-14 08:58:40 +08:00 via iPhone @cxbig fail2ban 不是对 ssh 作限制的吗? |
5 BOYPT 2017-04-14 09:06:24 +08:00 IP 数据量大了会导致很多 iptables 规则,会严重影响入站流量;应该考虑使用 ipset 。 |
6 RealLiuSha 2017-04-14 09:08:18 +08:00 应该使用 nglua |
7 usernametoolong 2017-04-14 09:48:43 +08:00 via iPhone 这个脚本是几年前从 hostloc 流出来的,纯粹的蒙古大夫。。。。。。。。。 |
8 Busy 2017-04-14 10:49:43 +08:00 ipset +1 |
9 tylerdurden 2017-04-14 10:58:00 +08:00 这种方法有点笨重。 |
10 app13 2017-04-14 11:08:17 +08:00 @AnonymousAccout #4 fail2ban 可以 ban 挺多东西的,你可以去看下它的配置文件 |
11 jarell 2017-04-14 11:13:06 +08:00 @usernametoolong 蒙古大夫这个说法真形象 |
12 msg7086 2017-04-14 11:24:35 +08:00 @AnonymousAccout fail2ban 是对 ssh 做限制的啊,但是人家也没说不能限别的嘛…… |
14 lixuda 2017-04-14 13:41:24 +08:00 还有比较简单的方式吗?小白 |
15 j4fun 2017-04-14 14:00:35 +08:00 这种脚趾头想想就能写出来的。。。。还要取得授权() |
16 cabing 2017-04-14 14:49:29 +08:00 找找 nginx 的插件 |
17 rrfeng 2017-04-14 15:41:47 +08:00 fail2ban 也是用 iptables |
18 holinhot 2017-04-14 15:59:24 +08:00 攻击来了日志一会就几百 MB 了 |
19 cxbig 2017-04-14 17:35:44 +08:00 @AnonymouAccout 看看 fail2ban 的文档,它的功能可不仅仅限于 ssh 登录哦。 |
20 hyperxu 2017-04-14 19:11:36 +08:00 openresty+waf https://github.com/unixhot/waf |
21 zzlyzq 2017-04-15 08:27:25 +08:00 via iPhone 直接路由黑洞 哈哈 route add -host xxx gw lo |