几年前写过一些nginx基础防御cc攻击的脚本教程,但是今天去看都几年没有更新了,有的不符合现有的程序使用。
当然这类脚本、程序都很多,随便找个合适自己的就行了,因为我之前都是基于lua,这次就直接以nginx默认的和另外个程序来测试,毕竟搜索的时候,出来的参考就它fail2ban在前面,也就不翻后面了。
这次主要还弄,是因为有个域名没有备案,不能用国内的cdn服务,又不想用cloudflare的cdn,因为国内大部分地区都无法访问套cf的网站。
nginx自带:
1、修改nginx.conf文件,在http段落里面添加代码,根据自己情况来。
limit_conn_zone $binary_remote_addr zone=limit_conn:10m; #分配10m内存 limit_req_zone $binary_remote_addr zone=limit_req:10m rate=5r/s; #每秒请求5次 limit_req_zone $binary_remote_addr zone=limit_req_s:10m rate=10r/m; #搜索每分钟请求10次,这个不一定
2、修改网站配置文件,在server
段落里面添加代码:
limit_conn limit_conn 10; #限制单ip并发不能超过10 limit_req zone=limit_req burst=10 nodelay; #限制每秒请求不能超过10
如果超过限制就会返回503错误,然后用服务器防火墙封禁ip,看看自己的是iptables还是firewalld。
iptables -I INPUt -p tcp -s 要封ip -j DROP #iptables firewall-cmd --add-rich-rule="rule family='ipv4' source address='要封ip' reject" # firewalld
搭配fail2ban
yum install -y fail2ban #安装fail2ban
可以根据自己需要来配置过滤配置,我也就按照我找到的教程写来,第一次接触,因为时间原因也不过多研究了。
在/etc/fail2ban/filter.d目录新建个test.conf文件
# fail2ban filter configuration for nginx [Definition] failregex = ^<HOST> .* "(GET|POST|HEAD).*HTTP.*" (404|503) .*$ ignoreregex =.*(robots.txt|favicon.ico|jpg|png)
然后就在/etc/fail2ban/目录下,新建个local文件,直接复制新建就行了。
cp jail.conf jail.local
不要删除默认的jail.conf文件,fail2ban服务会读取conf和local文件,并且会覆盖先前读取的。
然后在jail.local里面最后添加代码:
[test] enabled = true #port = http,https #前面加#或者直接删了,就是监控所有端口 filter = test #过滤器名称 action = firewallcmd-allports[name=test] logpath = /data/wwwlogs/access_nginx.log #自己nginx的访问日志 maxretry = 5 #阀值 findtime = 600 #时间间隔 bantime = 3600 #封禁时长 ignoreip = 127.0.0.1 #过滤本地和自己服务器ip等
测试规则:
fail2ban-regex /data/wwwlogs/access_nginx.log /etc/fail2ban/filter.d/test.conf
其他的可以自己看下
systemctl enable fail2ban.service #开机启动 systemctl start fail2ban.service #立即启动 systemctl status fail2ban.service #查看状态 fail2ban-client statu #查看jail状态
查看日志,可以根据里面情况来封禁ip
fail2ban-client set test unbanip ip #封 fail2ban-client set test banip ip #解封
最后可以关注下日志,自己nginx和网站配置日志、然后还有fail2ban默认日志:/var/log里面。
这些都只是很简单的基础防御,针对大型攻击是没用的,不过也可以学习了解下。
如果你域名备案了,建议使用腾讯云的CDN服务,比阿里云更划算,也更适合个人、小公司,阿里云的cdn安全服务太贵了。
如果你域名没有备案,又不在意国内访问,就使用cloudflare的cdn服务,安全防御更强大。
参考:
https://tlanyan.me/server-protect-cc-attack/
https://www.fail2ban.org/wiki/index.php/MANUAL_0_8