V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
herozzm
V2EX  ›  问与答

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

  •  
  •   herozzm · 2023-01-06 18:32:19 +08:00 · 1116 次点击
    这是一个创建于 474 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Linux 服务器上用的,太多私人爬虫机器人了,变换着 ua 和使用着 ip 爬虫库爬,服务器都爬死了
    15 条回复    2023-01-06 23:51:14 +08:00
    ik
        1
    ik  
       2023-01-06 18:44:21 +08:00 via iPhone
    shell 写一个
    bjzhush
        2
    bjzhush  
       2023-01-06 18:49:13 +08:00
    我第一反应是 ngx_http_limit_req_module ,不过看了下你好像不是要限制频率,要直接封禁。
    我目前有一个在用的方案,稍微有点麻烦,不过也不复杂,用 filebeat 推 nginx log 到 redis 队列,然后自己解析后,需要封禁的 ip 加入 ip 黑名单池。Nginx 每个请求都会通过 lua 脚本读取黑名单池,在池子里面的直接 403 。
    也有个优点,就是可以自己定制封禁逻辑,比较灵活
    Puteulanus
        3
    Puteulanus  
       2023-01-06 18:56:57 +08:00
    永久 ban ip 误伤了运营商 NAT 的出口 IP 可能大范围打不开,前面加个 cf 之类的 cdn 吧
    herozzm
        4
    herozzm  
    OP
       2023-01-06 18:59:11 +08:00
    @Puteulanus 已经套了 cdn ,但是 cdn 的封锁措施有限
    zhailw
        5
    zhailw  
       2023-01-06 18:59:38 +08:00 via Android   ❤️ 1
    fail2ban 自己针对日志写配置文件,还是挺方便的
    datocp
        6
    datocp  
       2023-01-06 19:10:32 +08:00 via Android   ❤️ 1
    用 iptables recent hacker 搜索一下,
    现在都是配合 ipset 使用。
    israinbow
        7
    israinbow  
       2023-01-06 19:10:35 +08:00   ❤️ 1
    https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker

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

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

    有的时候并不需要在源头上 ban 一个 IP 。资源够的话可以先从应用层面 ban ,然后升级至防火墙 ban 端口,最后彻底 ban ,可以有效减少误杀的可能。
    psirnull
        14
    psirnull  
       2023-01-06 20:02:40 +08:00   ❤️ 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  
       2023-01-06 23:51:14 +08:00
    Fail2ban
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1007 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:01 · PVG 04:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.