fail2ban是怎么工作的

Fail2ban防爆破

讲解1:利用fail2ban服务对服务器ssh端口进行防爆破防护。

讲解2:利用fail2ban服务对自定义的端口进行防护,这里用个人的frps端口进行举例。

简介fail2ban是怎么工作的

fail2ban是利用对日志的监控,根据不同的正则规则从日志中找出那些“行为异常”的IP,一旦这些IP发送了触犯监狱规则的请求达到阈值就会在iptables里直接封禁屏蔽,并且可以设置屏蔽这个IP的时间来避免误伤造成的危害过大。

所以用好Fail2ban最重要的就是如何根据日志制定有效的监狱规则,规则制定完了还需要测试一下这个规则是否生效了,是否真的可以起到预期的目的。

Fail2ban保护SSH

我们是使用Linux的,要记得一切皆文件,so!首先要学习一下目录和文件:

1
2
3
4
5
6
7
8
.
action.d # 配置生效的规则,包含触发封禁发送邮件等动作的配置
fail2ban.d # 存放fail2ban的应用配置文件
filter.d # 各个规则的正则文件
jail.d #
fail2ban.conf # 主配置文件
jail.conf # 规则配置文件
jail.local # 规则配置文件备份

启用fail2ban要修改配置文件: /etc/fail2ban/jail.conf (或者是该目录下jail.local)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#
# SSH servers
#

[sshd]

enabled = true # 此项设置为true启用规则
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
port = ssh # 此项设置对应的端口,有一些内置的端口例如ssh,http,也可以自定义端口
logpath = %(sshd_log)s # 设置日志的目录,这个利用了配置文件中定义的变量
backend = %(sshd_backend)s # 博主也暂时没研究这项是什么,推测是日志的切分备份文件

filter = sshd # 匹配过滤规则,可在filter.d中配置
banaction = iptables # 使用何种方式对IP进行封禁
findtime = 600 # 规则生效,对IP的采集时间
maxretry = 6 # findtime内的最大错误尝试数

此时的fail2ban已经准备好进行防御了,我们启用规则用以下命令:

1
2
3
sudo fail2ban-client reload

sudo systemctl restart fail2ban

检查一下规则有没有在运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo fail2ban-client status

Status
|- Number of jail: 2
`- Jail list: sshd

sudo fail2ban-client status sshd

Status for the jail: sshd
|- Filter
| |- Currently failed: 5
| |- Total failed: 28859
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 16
|- Total banned: 563
`- Banned IP list: 122.53.26.173 181.48.134.66

利用Fail2ban保护端口自定义规则