
最近发现自己的服务器和wordpress经常被各种扫描和CC攻击,各种暴力破解密码,扫描漏洞,让本来就配置不高的vps不堪重负。本来我也没怎么在意,但这几天经常mysql就瘫痪了,让我不得不用shell自动重启mysql。因为实在烦的不行,所以看看是否有办法能缓解下这种问题。搜寻了半天,有2个不错的解决方法。
- 使用nginx+waf的组合,
- fail2ban
今天就说下我通过fail2ban的解决方法。关于fail2ban的安装和功能,这里就不多介绍了,基本常用linux的小伙伴们都熟悉。这里我使用fail2ban的filter功能来尝试干掉哪些频繁扫描我某些特定文件未果,以及不停尝试我登录密码的货门。
- 防御屏蔽哪些扫描特定名字目录文件未果导致404的的IP, 在/etc/fail2ban/filter.d/目录下创建文件: nginx-dos.conf文件,内容入下:2018.11.26更新
12345[Definition]#屏蔽哪些扫描特定名字目录文件未果导致404的的IPfailregex = (?i)<host> -.*"(GET|POST|HEAD).*.(php|html|htm|asp|aspx|zip|gz|rar|\}|\}\}).+[\s]+(404|403|301).+Mozilla.*"ignoreregex =</host>
针对下图这种模式的扫描. - 防御和屏蔽暴力穷举wordpress密码的的攻击IP, 在/etc/fail2ban/filter.d/目录下创建文件: wp-cclogin.conf文件,内容入下:
12345[Definition]#屏蔽哪些不停尝试通过wp-login.php登录的IPfailregex = ^<host>\s*-.*"(GET|POST|HEAD).*\s*wp-login\.php\s*.*"$ignoreregex =</host>
针对下图这种模式的扫描. - 编写完毕filter之后,下一步我们需要加载这些filter,编辑/etc/fail2ban/jail.local,加入如下内容
123456789101112131415161718192021[nginx-dos]# @author xiexiejiaoenabled = trueport = httpfilter = nginx-dosaction = iptables[name=HTTP, port=http, protocol=tcp]logpath = /www/logs/access_nginx.logfindtime = 10bantime = 86400maxretry = 10[wp-cclogin]# @author xiexiejiaoenabled = trueport = httpfilter = wp-ccloginaction = iptables[name=HTTP, port=http, protocol=tcp]logpath = /www/logs/xiexiejiao_nginx.logfindtime = 10bantime = 86400maxretry = 5 - 重启fail2ban
1sudo /etc/init.d/fail2ban restart
至此,终于可以消停一阵子了。今天查看了下日志,确实这种无脑的扫描少了好多。下次我再试试nginx+waf的方法。