Fail2Ban 是阻挡暴力攻击的工具,例如发现指定次数的登入失败后,会自动把远端的 IP 地址封锁,在设定的时间过后才会对封锁的 IP 开放。Fail2Ban 的用途非常广泛,除了一般的 SSH 登入及电邮登入外,也可以对一些针对网页的攻击进行封锁。
但如果网页使用了 CloudFlare 的话,那 Fail2Ban 只会封锁 CloudFlare 的 IP,而 CloudFlare 的那么多,很多时即使封锁了几个 IP,攻击者还是可以继续进行攻击及扫描漏洞。
要解决这个问题,可以使用 CloudFlare 的 API,在 Fail2Ban 设定把要封锁的 IP 传送给 CloudFlare,在 CloudFlare 那里进行封锁。
取得 CloudFlare API Key
要实现以上功能, 首先要取得 CloudFlare 的 API Key.
先登入 CloudFlare, 按下画面右方的 ICON, 并按 “My Profile”.
按下左边选单的 “API Tokens”, 然后会看到 “Global API Key”, 按下 “View”, 再输入 CloudFlare 密码确认, 便可以把 API Key 复制下来。
这个 API Key 必须小心保管, 因为其他人知道了可以修改 CloudFlare 的设定。
建立 Fail2Ban 的 CloudFlare Action
Fail2Ban 对每个封锁动作都可以设定 action, 即当发现有撞密码的行为时, 所实施的动作, 一般会用 iptables 等防火墙封锁 IP, 但现在要把 IP 传送给 CloudFlare 封锁。
Fail2Ban 已经内建 CloudFlare 的 action, 但如果像我从 CentOS 安装的 Fail2Ban, 里面的 unban action 会有一些小问题, 可以到 Fail2Ban 的 Git 已经有修改版, 可以从以下网址取得:
https://github.com/fail2ban/fail2ban/blob/master/config/action.d/cloudflare.conf
现在建立新的 cloudflare action 设定档:
把上面网址的内容复制并贴上, 在上面的内容最后几行, 修改 ClourFlare 的登入名称及 API Key:
cftoken = your-key
cfuser = your-login-email
修改好后便储存盘案。
修改 jail.conf
现在需要修改 /etc/fail2ban/jail.conf 档案, 找到需要用 CloudFlare 封 IP 的 jails, 在里面的 action 改成:
|
1 2 |
action = cloudflare-api4 iptables-allports |
上面使用了两个 action, 第一个是连接 cloudflare 的 api, 把 ip 传送给 cloudflare 封阻, 第二个 iptables-allports 是本机的 iptables 封阻, 第二个 action 可以根据自己的需要修改, 或者不设定也可以。
修改后, 重新启动 Fail2Ban:
测试
进入设定了 Fail2Ban 保护的网页, 尝试登入失败, 达到预先设定了的次数, 试了几次后, 如果看到以下画面便成功封锁 IP 了, 等一会看看是否会解封 IP.
如果要立即把 IP 从 CloudFlare 解封, 可以登入 CloudFlare, 选择相关的网域, 按左边的 “Security” – “Tools”, 看到自己的 IP 后, 把它移除即可。