使用Fail2ban防御对WordPress的CC攻击

最近发现自己的服务器和wordpress经常被各种扫描和CC攻击,各种暴力破解密码,扫描漏洞,让本来就配置不高的vps不堪重负。本来我也没怎么在意,但这几天经常mysql就瘫痪了,让我不得不用shell自动重启mysql。因为实在烦的不行,所以看看是否有办法能缓解下这种问题。搜寻了半天,有2个不错的解决方法。

  1. 使用nginx+waf的组合,
  2. fail2ban

今天就说下我通过fail2ban的解决方法。关于fail2ban的安装和功能,这里就不多介绍了,基本常用linux的小伙伴们都熟悉。这里我使用fail2ban的filter功能来尝试干掉哪些频繁扫描我某些特定文件未果,以及不停尝试我登录密码的货门。

  1. 防御屏蔽哪些扫描特定名字目录文件未果导致404的的IP, 在/etc/fail2ban/filter.d/目录下创建文件: nginx-dos.conf文件,内容入下:2018.11.26更新
    [Definition]
    #屏蔽哪些扫描特定名字目录文件未果导致404的的IP
    failregex = (?i) -.*"(GET|POST|HEAD).*.(php|html|htm|asp|aspx|zip|gz|rar|\}|\}\}).+[\s]+(404|403|301).+Mozilla.*"
    ignoreregex =
    

    针对下图这种模式的扫描.fail2ban stop wordpress cc attack

  2. 防御和屏蔽暴力穷举wordpress密码的的攻击IP, 在/etc/fail2ban/filter.d/目录下创建文件: wp-cclogin.conf文件,内容入下:
    [Definition]
    #屏蔽哪些不停尝试通过wp-login.php登录的IP
    failregex = ^\s*-.*"(GET|POST|HEAD).*\s*wp-login\.php\s*.*"$
    ignoreregex =
    

    针对下图这种模式的扫描.fail2ban stop wordpress cc attack

  3. 编写完毕filter之后,下一步我们需要加载这些filter,编辑/etc/fail2ban/jail.local,加入如下内容
    [nginx-dos]
    # @author xiexiejiao
    enabled = true
    port    = http
    filter  = nginx-dos
    action = iptables[name=HTTP, port=http, protocol=tcp]
    logpath = /www/logs/access_nginx.log
    findtime = 10
    bantime  = 86400
    maxretry = 10
    
    [wp-cclogin]
    # @author xiexiejiao
    enabled = true
    port    = http
    filter  = wp-cclogin
    action = iptables[name=HTTP, port=http, protocol=tcp]
    logpath = /www/logs/xiexiejiao_nginx.log
    findtime = 10
    bantime  = 86400
    maxretry = 5
    
  4. 重启fail2ban
             sudo /etc/init.d/fail2ban restart
    

至此,终于可以消停一阵子了。今天查看了下日志,确实这种无脑的扫描少了好多。下次我再试试nginx+waf的方法。

Scroll to Top