使用CloudFlare+Fail2ban,实现入门级CC防御

Fail2ban的工作原理很简单:读取日志,使用正则表达式匹配IP地址,只要在规定时间内达到预先设置的访问次数,就会执行ban action。也可以设置在封禁一段时间之后,自动解除封禁。总之这是一款比较灵活的软件。

当我们没有使用CloudFlare的时候,通常会把匹配到的ip地址提交给本机的iptables,而使用了CloudFlare之后,我们就可以直接用api把IP地址提交给CloudFlare的防火墙

下面简单说一下方法

第一步,配置Nginx。Nginx在编译的时候一定要添加“–with-http_realip_module”模块,并且在http块或server块中引入“set_real_ip_from、real_ip_header”,这样才能把真实的访客IP传递进来。否则,日志里记录到的都是CloudFlare自己的IP。具体方法请看这篇文章:https://support.cloudflare.com/h … %80%85%E7%9A%84-IP-

第二步,安装fail2ban。方法看这里:https://github.com/fail2ban/fail2ban,不要用apt/yum这些包管理器安装,包管理器中的版本太旧了,不支持ipv6。

第三步,配置fail2ban。

在“/etc/fail2ban”文件夹中新建“jail.local”文件,根据需要修改文件内容: [http-get-dos] enabled = true filter = http-get-dos action = cloudflare-api logpath = /home/wwwlogs/example.com.log #Nginx日志位置 maxretry = 60 #最大尝试次数 findtime = 60 #设置多长时间(秒)内超过 maxretry 限制次数即被封锁 bantime = 120 #非法 IP 被屏蔽时间(秒),-1 代表永远封锁

在“/etc/fail2ban/action.d”文件夹中新建“cloudflare-api.conf”文件,修改文件最后三行: [Definition] actionstart = actionstop = actioncheck = actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules" \ -H "X-Auth-Email: " \ -H "X-Auth-Key: " \ -H "Content-Type: application/json" \ --data '{"mode":"block","configuration":{"target":"ip","value":""},"notes":"CC Attack"}' actionunban = curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules/$( \ curl -s -X GET "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules?page=1&per_page=1&mode=block&configuration.target=ip&configuration.value=&match=all" \ -H "X-Auth-Email: " \ -H "X-Auth-Key: " \ -H "Content-Type: application/json" | awk -F "[,:}]" '{for(i=1;i