V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
herozzm
V2EX  ›  问与答

求:一款 1 分钟(或指定时间内)请求次超过 x 次就将 ip 加入封禁的运维工具

  •  
  •   herozzm · Jan 6, 2023 · 2017 views
    This topic created in 1218 days ago, the information mentioned may be changed or developed.
    Linux 服务器上用的,太多私人爬虫机器人了,变换着 ua 和使用着 ip 爬虫库爬,服务器都爬死了
    15 replies    2023-01-06 23:51:14 +08:00
    ik
        1
    ik  
       Jan 6, 2023 via iPhone
    shell 写一个
    bjzhush
        2
    bjzhush  
       Jan 6, 2023
    我第一反应是 ngx_http_limit_req_module ,不过看了下你好像不是要限制频率,要直接封禁。
    我目前有一个在用的方案,稍微有点麻烦,不过也不复杂,用 filebeat 推 nginx log 到 redis 队列,然后自己解析后,需要封禁的 ip 加入 ip 黑名单池。Nginx 每个请求都会通过 lua 脚本读取黑名单池,在池子里面的直接 403 。
    也有个优点,就是可以自己定制封禁逻辑,比较灵活
    Puteulanus
        3
    Puteulanus  
       Jan 6, 2023
    永久 ban ip 误伤了运营商 NAT 的出口 IP 可能大范围打不开,前面加个 cf 之类的 cdn 吧
    herozzm
        4
    herozzm  
    OP
       Jan 6, 2023
    @Puteulanus 已经套了 cdn ,但是 cdn 的封锁措施有限
    zhailw
        5
    zhailw  
       Jan 6, 2023 via Android   ❤️ 1
    fail2ban 自己针对日志写配置文件,还是挺方便的
    datocp
        6
    datocp  
       Jan 6, 2023 via Android   ❤️ 1
    用 iptables recent hacker 搜索一下,
    现在都是配合 ipset 使用。
    israinbow
        7
    israinbow  
       Jan 6, 2023   ❤️ 1
    https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker

    配合 #5 说的 fail2ban 防御, 效果不错.
    Jirajine
        8
    Jirajine  
       Jan 6, 2023
    别永久 ban ,限流就行,而且只 ban /32 不要扩大 ban 子网的范围,动态 ip 太容易误伤。
    用的一些节点打开 Debian wiki 总是 403 ,一查整个 /24 段早就被拉黑了。
    herozzm
        9
    herozzm  
    OP
       Jan 6, 2023
    @Jirajine 比起拉黑动态 ip ,我更在乎是服务器被爬死,不在乎哪些被人利用的动态 ip 返回 403
    sky96111
        10
    sky96111  
       Jan 6, 2023 via Android
    @herozzm 他的意思是动态 IP ,过段时间这个 IP 就不是之前爬你网站的那个人的了。如果后来获取到这个被 ban IP 的无辜人是你网站的潜在用户,你很可能会失去他
    herozzm
        11
    herozzm  
    OP
       Jan 6, 2023
    @sky96111 设置一个时间段吧,封禁 1 周
    lower
        12
    lower  
       Jan 6, 2023
    不知道 限流工具或策略 对服务器性能影响大么?
    请求没进应用就返回结果了。。。应该对性能影响微乎其微吧
    billgong
        13
    billgong  
       Jan 6, 2023   ❤️ 1
    @zhailw f2b 正解 此类根据某种特征识别主机并 ban 掉的操作都是 f2b 能搞定的范畴

    如果你说的爬虫指的是爬 SSH 弱密码、爬 SMTP 中继的那类,规则可以设置的严格一些,我这边都是直接 ban 终身的

    有的时候并不需要在源头上 ban 一个 IP 。资源够的话可以先从应用层面 ban ,然后升级至防火墙 ban 端口,最后彻底 ban ,可以有效减少误杀的可能。
    psirnull
        14
    psirnull  
       Jan 6, 2023   ❤️ 1
    iptables 写一个

    1.编写脚本
    mkdir /root/bin
    vi /root/bin/dropip.sh
    #!/bin/bash
    /bin/netstat -nagrep ESTABLISHEDawk ‘{print $5}’awk -F: ‘{print $1}’sortuniq -csort -rnhead -10grep -v -E ’192.168127.0′awk ‘{if ($2!=null && $1>4) {print $2}}’>/tmp/dropip for i in $(cat /tmp/dropip) do /sbin/iptables -A INPUT -s $i -j DROP echo "$i kill at `date`">>/var/log/ddos done
    2.增加执行权限 chmod +x /root/bin/dropip.sh

    3.添加到计划任务,每分钟执行一次 crontab -e */1 * * * * /root/bin/dropip.sh 可以根据实际需要修改下。
    Dukec
        15
    Dukec  
       Jan 6, 2023
    Fail2ban
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   981 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 22:13 · PVG 06:13 · LAX 15:13 · JFK 18:13
    ♥ Do have faith in what you're doing.