admin avatar

免受暴力攻击使用Fail2Ban 保护服务器

🕝 by admin

Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。

基于 Python 编程语言编写的。

Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,

如 /var/log/auth.log、/var/log/apache/access.log 等,

并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。

通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。

支持发送邮件通知。

Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。

Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。

只是服务器防止暴力攻击的安全手段之一。

对于 Debian / Ubuntu,使用 APT-GET 命令或 APT 命令安装。

sudo apt install fail2ban

对于 Fedora,使用 DNF 命令安装。

sudo dnf install fail2ban

对于 CentOS/RHEL,启用 EPEL 库或 RPMForge 库,使用 YUM 命令安装。

sudo yum install fail2ban

对于 Arch Linux,使用 Pacman 命令安装。

sudo pacman -S fail2ban

对于 openSUSE , 使用 Zypper命令安装。

sudo zypper in fail2ban

默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。

主配置文件是 jail.conf,它包含一组预定义的过滤器。

所以,不要编辑该文件,这是不可取的,因为只要有新的更新,配置就会重置为默认值。

只需在同一目录下创建一个名为 jail.local 的新配置文件,并根据您的意愿进行修改。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

默认情况下,大多数选项都已经配置的很完美了,如果要启用对任何特定 IP 的访问,

则可以将 IP 地址添加到 ignoreip 区域,对于多个 IP 的情况,用空格隔开 IP 地址。

配置文件中的 DEFAULT 部分包含 Fail2Ban 遵循的基本规则集,您可以根据自己的意愿调整任何参数。

vi /etc/fail2ban/jail.local

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.100/24
bantime = 600
findtime = 600
maxretry = 3
destemail = [email protected]
ignoreip:本部分允许我们列出 IP 地址列表,Fail2Ban 不会禁止与列表中的地址匹配的主机
bantime:主机被禁止的秒数
findtime:如果在最近 findtime 秒期间已经发生了 maxretry 次重试,则主机会被禁止
maxretry:是主机被禁止之前的失败次数
如何配置服务
Fail2Ban 带有一组预定义的过滤器,用于各种服务,
如 ssh、apache、nginx、squid、named、mysql、nagios 等。 
我们不希望对配置文件进行任何更改,
只需在服务区域中添加 enabled = true这一行就可以启用任何服务。 
禁用服务时将 true 改为 false 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# SSH servers
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
enabled: 确定服务是打开还是关闭。
port:指明特定的服务。 如果使用默认端口,则服务名称可以放在这里。 如果使用非传统端口,则应该是端口号。
logpath:提供服务日志的位置
backend:指定用于获取文件修改的后端。
重启 Fail2Ban
进行更改后,重新启动 Fail2Ban 才能生效。

[For SysVinit Systems]
# service fail2ban restart

[For systemd Systems]
# systemctl restart fail2ban.service
验证 Fail2Ban iptables 规则
你可以使用下面的命令来确认是否在防火墙中成功添加了Fail2Ban iptables 规则。

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https
f2b-sshd tcp -- anywhere anywhere multiport dports 1234
ACCEPT tcp -- anywhere anywhere tcp dpt:1234

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain f2b-apache-auth (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

测试 Fail2Ban

使用失败的尝试来测试。 验证 /var/log/fail2ban.log 文件。

要查看启用的监狱列表,请运行以下命令。

1
2
3
4
# fail2ban-client status
Status
|- Number of jail:  2
`- Jail list:   apache-auth, sshd

通过运行以下命令来获取禁止的 IP 地址。

1
2
3
4
5
6
7
8
9
10
# fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 1
| `- Total failed: 3
`- action
 |- Currently banned: 1
 | `- IP list: 192.168.1.115
 `- Total banned: 1

要从 Fail2Ban 中删除禁止的 IP 地址,请运行以下命令。

fail2ban-client set ssh unbanip 192.168.1.115

💘 相关文章

写一条评论