前言
有时候我们遇到一些不法分子对我们的VPS进行ssh扫描爆破,为了防止暴力破解ssh,我们可以用到一款很好的防止暴力破解工具——Fail2Ban。
安装 Fail2Ban 主要是为了增强系统的安全性,防止暴力破解攻击和其他恶意行为:
防止暴力破解攻击:Fail2Ban 会监控系统日志,检测到反复失败的登录尝试(如 SSH、FTP、Web 应用登录等),并自动将这些恶意 IP 地址封禁,避免攻击者通过暴力破解密码进入系统。
提高安全性:它为服务器提供额外的安全防护层,减少系统暴露给网络攻击者的机会,尤其是在常见的弱密码攻击面前,Fail2Ban 能有效减少风险。
自动化防护:Fail2Ban 可以自动响应和阻止攻击,避免了管理员手动阻止攻击的麻烦。它能根据预设的规则快速识别并应对攻击行为,降低人工干预的需求。
实时反应:Fail2Ban 能实时监控系统日志文件,一旦发现异常登录或恶意行为,它会立即采取措施,将攻击者的 IP 封禁在防火墙中,从而防止攻击的扩展。
灵活配置和扩展:Fail2Ban 支持针对不同服务进行单独配置,可以根据不同的需求自定义规则和封禁策略。比如,针对 SSH 登录、Web 服务(如 Apache 或 Nginx)等,都能进行个性化防护设置。
减少系统负担:通过自动封禁攻击 IP,Fail2Ban 有助于减轻服务器负担。它减少了暴力破解攻击带来的登录压力,防止攻击者浪费服务器资源,确保系统性能不受影响。
开源且低资源消耗:作为一款开源工具,Fail2Ban 不仅免费,而且对系统资源的占用非常少,适合用于各种规模的服务器,既能保障安全,又不影响服务器的性能。
本文以Debian12系统举例,Ubuntu系统也差不多类似的操作,其他系统自行搜索网上教程。
升级系统安装包
apt update -y
apt upgrade -y
安装rsyslog
sudo apt install rsyslog -y
Debian12默认没有安装rsyslog,没有它可能会无法启动Fail2Ban。rsyslog 是一种日志管理工具,主要用于在 Unix 和 Linux 系统中收集、存储和转发日志信息。它是一个强大的日志系统,常用于系统监控、安全审计、故障排查等。
修改ssh配置文件
nano /etc/ssh/sshd_config
在/etc/ssh/sshd_config
中找到PermitRootLogin
,如果其后是no
,改为yes
。并确保PermitRootLogin
前无#
,已被启用。
重启 ssh 服务
sudo service sshd restart
安装UFW
sudo apt install ufw -y
启动UFW
sudo ufw enable
允许SSH登录
sudo ufw allow ssh #默认22端口
如果修改过ssh登录端口
sudo ufw allow 端口/tcp comment 'SSH'
重启UFW
sudo ufw reload
安装Fail2ban
sudo apt install fail2ban -y
配置Fail2ban
在Debian12中,Fail2ban使用的是jail.local
,可以在/etc/fail2ban/
中创建jail.local
文件,然后使用vi或nano等工具,把下方配置信息填入其中。或者直接输入nano /etc/fail2ban/jail.local
,把下方配置信息复制进去并保存退出。配置信息根据自身需求调整。
[DEFAULT]
backend = systemd
banaction = ufw
bantime = 15m
findtime = 15m
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
以下是配置信息的解释:
[DEFAULT]
部分这个部分包含 Fail2Ban 的全局默认设置,适用于所有监控的服务,除非在单个服务配置中被覆盖。
backend = systemd
这个参数指定了日志后端的类型。在这里,
systemd
表示 Fail2Ban 会使用systemd
的日志系统来跟踪系统日志。如果使用的是其他日志系统(如
syslog
),可以将其更改为相应的后端。
banaction = ufw
这个配置指定了当 Fail2Ban 检测到攻击时,采取的封禁措施。
ufw
表示使用 Uncomplicated Firewall (UFW) 工具来阻止恶意 IP 地址。其他可选的封禁方法包括
iptables
(如果未使用 UFW)等。
bantime = 15m
封禁时间,即 Fail2Ban 在发现恶意 IP 地址后,会将其封禁多长时间。这里设置为
15m
,表示封禁 15 分钟。你可以根据需要将其更改为
m
(分钟)、h
(小时)或d
(天)。
findtime = 15m
这是 查找时间窗口,它定义了 Fail2Ban 在多长时间内监测指定数量的失败登录尝试(由
maxretry
定义)。在这里,15m
表示在 15 分钟内,如果检测到超过maxretry
次的失败尝试,将触发封禁。如果在此时间窗口内失败的尝试次数超过
maxretry
,Fail2Ban 就会采取行动。
[sshd]
部分这是针对 SSH 服务(
sshd
)的配置,定义了 SSH 登录尝试的限制和封禁规则。
enabled = true
这个参数启用了 SSH 服务的 Fail2Ban 监控。如果设置为
false
,则 Fail2Ban 不会监控 SSH 服务的日志。这里设置为
true
,表示启用对 SSH 服务的监控。
port = ssh
这个参数指定了监控的服务端口。
ssh
是一个预定义的端口名,指的是默认的 SSH 端口(22)。如果你使用的是非默认端口(比如
2222
),可以改为port = 2222
。
filter = sshd
这个配置指定了 Fail2Ban 用于过滤 SSH 服务的日志文件的过滤器。
sshd
是预定义的过滤器,用于匹配与 SSH 登录相关的日志条目。过滤器会基于日志中出现的特定关键字(如
Failed password
)来识别失败的登录尝试。
logpath = /var/log/auth.log
日志路径,指定了 Fail2Ban 需要监控的日志文件。在这里,它指定了
/var/log/auth.log
,这是大多数基于 Debian 系统(如 Ubuntu)中保存认证相关日志的文件。如果你使用的是其他日志文件,可以修改为相应的路径。
maxretry = 3
最大重试次数,这个参数定义了在
findtime
时间窗口内允许的最大失败登录尝试次数。这里设置为3
,意味着如果在 15 分钟内尝试 SSH 登录失败 3 次以上,Fail2Ban 会认为这是恶意攻击并封禁该 IP 地址。
设置开机启动
sudo systemctl enable fail2ban
启动Fail2ban
sudo systemctl start fail2ban
查看Fail2ban状态
sudo systemctl status fail2ban
查看日志和活动
tail -f /var/log/fail2ban.log
解除被禁封的IP
sudo fail2ban-client set sshd unbanip 需要解禁的IP
一些Fail2ban的命令
sudo service fail2ban restart #重启
sudo fail2ban-client status #查看状态
sudo fail2ban-client status sshd #查看sshd的详细状态
总结
至此,已经成功安装Fail2ban。简单来说,安装 Fail2Ban 可以帮助你抵御常见的网络攻击,增加安全性并减轻维护负担,是任何需要保护的服务器的必备工具。
评论区