Nginx 封锁恶意 IP,并且定时取消的两种脚本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuliliuli2017
V2EX    NGINX

Nginx 封锁恶意 IP,并且定时取消的两种脚本

  •  2
     
  •   liuliliuli2017 2017-04-14 00:20:05 +08:00 9022 次点击
    这是一个创建于 3178 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有时候博客会有莫名其妙的人进来,腾云阁看到这个解决方法待试试

    收录待用,修改转载已取得腾讯云授权


    代码节选:

    使用 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

    21 条回复    2017-04-15 08:27:25 +08:00
    hcymk2
        1
    hcymk2  
       2017-04-14 00:30:46 +08:00   1
    还是用 ipset 吧
    其实 fail2ban 也可以。
    cxbig
        2
    cxbig  
       2017-04-14 06:56:19 +08:00   1
    不是有 fail2ban ?
    现在比较流行 WAF ,服务器几乎只用处理正常的访问。
    ic3z
        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}')
    AnonymousAccout
        4
    AnonymousAccout  
       2017-04-14 08:58:40 +08:00 via iPhone
    @cxbig fail2ban 不是对 ssh 作限制的吗?
    BOYPT
        5
    BOYPT  
       2017-04-14 09:06:24 +08:00
    IP 数据量大了会导致很多 iptables 规则,会严重影响入站流量;应该考虑使用 ipset 。
    RealLiuSha
        6
    RealLiuSha  
       2017-04-14 09:08:18 +08:00
    应该使用 nglua
    usernametoolong
        7
    usernametoolong  
       2017-04-14 09:48:43 +08:00 via iPhone
    这个脚本是几年前从 hostloc 流出来的,纯粹的蒙古大夫。。。。。。。。。
    Busy
        8
    Busy  
       2017-04-14 10:49:43 +08:00
    ipset +1
    tylerdurden
        9
    tylerdurden  
       2017-04-14 10:58:00 +08:00
    这种方法有点笨重。
    app13
        10
    app13  
       2017-04-14 11:08:17 +08:00   1
    @AnonymousAccout #4 fail2ban 可以 ban 挺多东西的,你可以去看下它的配置文件
    jarell
        11
    jarell  
       2017-04-14 11:13:06 +08:00
    @usernametoolong 蒙古大夫这个说法真形象
    msg7086
        12
    msg7086  
       2017-04-14 11:24:35 +08:00
    @AnonymousAccout fail2ban 是对 ssh 做限制的啊,但是人家也没说不能限别的嘛……
    ningcool
        13
    ningcool  
       2017-04-14 13:22:15 +08:00
    @Havee fail2ban 和 ipset 用哪个好?
    lixuda
        14
    lixuda  
       2017-04-14 13:41:24 +08:00
    还有比较简单的方式吗?小白
    j4fun
        15
    j4fun  
       2017-04-14 14:00:35 +08:00
    这种脚趾头想想就能写出来的。。。。还要取得授权()
    cabing
        16
    cabing  
       2017-04-14 14:49:29 +08:00
    找找 nginx 的插件
    rrfeng
        17
    rrfeng  
       2017-04-14 15:41:47 +08:00
    fail2ban 也是用 iptables
    holinhot
        18
    holinhot  
       2017-04-14 15:59:24 +08:00
    攻击来了日志一会就几百 MB 了
    cxbig
        19
    cxbig  
       2017-04-14 17:35:44 +08:00
    @AnonymouAccout 看看 fail2ban 的文档,它的功能可不仅仅限于 ssh 登录哦。
    hyperxu
        20
    hyperxu  
       2017-04-14 19:11:36 +08:00
    zzlyzq
        21
    zzlyzq  
       2017-04-15 08:27:25 +08:00 via iPhone
    直接路由黑洞 哈哈
    route add -host xxx gw lo
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5597 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:25 PVG 10:25 LAX 18:25 JFK 21:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86