几年前写过一些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