[眼会手也要会]Nginx限流+Failban2实现保护网站

/ 运维 / 没有评论 / 561浏览

1.目的:

因为最近从csdn迁移到了自己的云服务器搭建的自建博客,由于带宽较小性能较低,所以为了防止有人恶意网络攻击造成服务不可用,于是使用一些工具来防范;

2.用到的工具:

nginx模块->ngx_http_limit_req_module ; Failban2软件;

3.配置:

nginx:

#http配置下
limit_req_zone  $binary_remote_addr  zone=mylimit:20m rate=6r/s;

#location转发配置下
limit_req   zone=mylimit;

#触发限流会返回503页面,这里可以自定义页面
error_page 503 /xx.html;
location = /xx.html {
  #自定义html的位置
  root /etc/nginx/vhost;
}

Failban2

1)先安装; 2)配置: 在/etc/fail2ban/filter.d目录下新建自己的配置,这里我配置了两个:

#nginx404.conf
[Definition]
failregex = ^<HOST>.*"(GET|POST).*" (404|444|403|400) .*$
ignoreregex =

#nginx503.conf
[Definition]
failregex = ^<HOST>.*"(GET|POST).*" (503) .*$
ignoreregex =

在/etc/fail2ban/jail.d目录下新建配置jail.local:

[nginx404]
#处理 nginx 下的恶意 404 结果扫描
enabled = true
port = http,https
filter = nginx404
action = iptables[name=nginx404, port=https, protocol=tcp]
#Fail2Ban 要监控的站点日志文件,大家可以根据自己站点来灵活调整。
logpath  = /var/log/nginx/access.log
bantime = 86400 #屏蔽时间
findtime = 300 #触发机制300秒10次
maxretry = 10

[nginx503]
#处理 nginx 下的恶意 503结果扫描以及触发限流
enabled = true
port = http,https
filter = nginx503
action = iptables[name=nginx503, port=https, protocol=tcp]
#Fail2Ban 要监控的站点日志文件,大家可以根据自己站点来灵活调整。
logpath  = /var/log/nginx/access.log
bantime = 86400 #屏蔽时间
findtime = 120 #触发机制
maxretry = 10

#注意此处的port是https,因为访问域名后都被强制重定向了https,博主之前手误写了http,
出现的现象是配置生效了,iptables也能查到ban的ip,但是依然能访问: 
action = iptables[name=nginx503, port=https, protocol=tcp] 


配置完成重启systemctl restart fail2ban.service,我这里的服务器是ubuntu;

去除被ban的ip:

fail2ban-client set nginx404 unbanip ip xx.xx.xx.xx

这不,截至目前...就成功ban了几个~ alt