VPS Fail2Ban 安装教程:保护你的服务器免受恶意攻击
Fail2Ban 是一款入侵防御软件,通过监控日志文件来检测恶意行为,并根据预设规则自动更新防火墙规则,从而阻止可疑 IP 地址的访问。在 VPS(虚拟专用服务器)上安装和配置 Fail2Ban 是提升服务器安全性的重要步骤,尤其对于防范暴力破解 SSH 等常见攻击非常有效。
本教程将指导你如何在常见的 Linux 发行版上安装和配置 Fail2Ban。
前提条件:
- 一台正在运行的 VPS。
- 具有 root 或 sudo 权限的用户。
- 已安装防火墙(如 UFW 或 firewalld,Fail2Ban 会与它们配合工作)。
步骤一:更新系统
在安装任何新软件之前,建议先更新你的系统软件包列表和已安装的软件包。
对于 Debian/Ubuntu 系统:
Bash
sudo apt update
sudo apt upgrade -y
对于 CentOS/RHEL 系统:
Bash
sudo yum update -y
步骤二:安装 Fail2Ban
Fail2Ban 通常在主流 Linux 发行版的官方软件源中都可用。
对于 Debian/Ubuntu 系统:
Bash
sudo apt install fail2ban -y
安装完成后,Fail2Ban 服务会自动启动。
对于 CentOS/RHEL 系统:
首先,你可能需要启用 EPEL (Extra Packages for Enterprise Linux) 软件源:
Bash
sudo yum install epel-release -y
然后安装 Fail2Ban:
Bash
sudo yum install fail2ban -y
安装完成后,启动并设置 Fail2Ban 开机自启:
Bash
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
步骤三:配置 Fail2Ban
Fail2Ban 的主要配置文件是 /etc/fail2ban/jail.conf
。但是,强烈建议不要直接修改这个文件,因为软件包更新时可能会覆盖你的更改。正确的做法是创建一个本地配置文件 /etc/fail2ban/jail.local
,Fail2Ban 会优先加载此文件中的配置,从而覆盖 jail.conf
中的默认设置。
-
复制配置文件:
Bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
-
编辑
jail.local
文件:使用你喜欢的文本编辑器(如 nano 或 vim)打开
/etc/fail2ban/jail.local
文件。Bash
sudo nano /etc/fail2ban/jail.local
下面是一些你需要关注和可能需要修改的关键配置项:
-
[DEFAULT]
段落: 此段落中的设置将应用于所有未明确指定配置的 “jails” (监狱,即监控规则)。ignoreip
: 设置不受 Fail2Ban 限制的 IP 地址列表,用空格分隔。可以是你自己的静态 IP 地址或信任的 IP 地址。例如:Ini, TOML
ignoreip = 127.0.0.1/8 ::1 YOUR_STATIC_IP_HERE
bantime
: IP 地址被禁止的时长。默认值通常是 10 分钟 (600 秒)。你可以根据需要调整,例如设置为 1 小时 (1h
) 或更长时间。Ini, TOML
bantime = 1h
findtime
: Fail2Ban 监控日志的时间窗口。如果一个 IP 在此时间段内达到maxretry
次数的失败尝试,就会被禁止。Ini, TOML
findtime = 10m
maxretry
: 在findtime
时间窗口内允许的最大失败尝试次数。Ini, TOML
maxretry = 5
destemail
: 如果你希望在 IP 被禁止时收到邮件通知,可以在这里设置你的邮箱地址。你需要确保你的服务器配置了邮件发送功能 (例如 sendmail 或 postfix)。Ini, TOML
destemail = [email protected]
sendername
: 邮件通知的发件人名称。Ini, TOML
sendername = Fail2BanAlert
banaction
: 用于禁止 IP 的动作。通常 Fail2Ban 会自动检测你使用的防火墙。如果需要,可以手动指定,例如ufw
或firewalld-ipset
。Ini, TOML
# banaction = ufw # 如果你使用 UFW # banaction = firewallcmd-ipset # 如果你使用 firewalld
一般来说,保持默认或让 Fail2Ban 自动检测即可。
-
Jails (监狱) 配置:
jail.local
文件中包含了针对特定服务的预定义 “jails”。最重要的通常是[sshd]
,用于保护 SSH 服务。找到
[sshd]
段落(或者其他你想要启用的服务的段落,例如[apache-auth]
、[nginx-http-auth]
等)。默认情况下,sshd
jail 通常是启用的。你可以为特定的 jail 覆盖
[DEFAULT]
中的设置。例如,如果你想为 SSH 设置更长的禁止时间:Ini, TOML
[sshd] enabled = true port = ssh # 或者你的 SSH 端口号,如果不是默认的 22 # filter = sshd # 通常不需要修改 # logpath = /var/log/auth.log # Debian/Ubuntu # logpath = /var/log/secure # CentOS/RHEL (通常 Fail2Ban 会自动检测) maxretry = 3 bantime = 24h
重要提示:
- 确保
enabled = true
来启用你想要保护的服务对应的 jail。 - 如果你的 SSH 服务运行在非标准端口,请务必修改
port
的值。 logpath
通常会被自动检测,但如果遇到问题,可以手动指定正确的日志文件路径。
- 确保
-
-
保存并关闭文件。
步骤四:重启 Fail2Ban 服务
在你修改了 jail.local
文件后,需要重启 Fail2Ban 服务以使更改生效。
Bash
sudo systemctl restart fail2ban
步骤五:检查 Fail2Ban 状态和活动
你可以使用 fail2ban-client
命令来检查 Fail2Ban 的状态和被禁止的 IP 地址。
-
检查 Fail2Ban 服务状态:
Bash
sudo systemctl status fail2ban
或者
Bash
sudo fail2ban-client status
-
检查特定 jail 的状态 (例如 sshd):
Bash
sudo fail2ban-client status sshd
这将显示关于
sshd
jail 的信息,包括当前被禁止的 IP 地址列表。 -
手动禁止 IP (不常用,但可用于测试):
Bash
sudo fail2ban-client set sshd banip YOUR_TEST_IP_ADDRESS
-
手动解禁 IP:
Bash
sudo fail2ban-client set sshd unbanip BANNED_IP_ADDRESS
高级配置和技巧:
- 创建自定义 Filters: 如果你需要监控标准 jails 未覆盖的应用程序日志,可以创建自定义的 filter 文件 (在
/etc/fail2ban/filter.d/
目录下) 来定义匹配恶意行为的正则表达式。 - 创建自定义 Actions: 你可以定义除了封禁 IP 之外的其他动作 (在
/etc/fail2ban/action.d/
目录下),例如发送更详细的邮件通知或执行特定脚本。 - 使用
fail2ban-regex
测试 Filter: Fail2Ban 提供了一个fail2ban-regex
工具,可以让你测试你的日志文件和 filter 规则,以确保它们能够正确匹配。Bash
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
- 定期检查日志: 定期查看 Fail2Ban 的日志文件 (
/var/log/fail2ban.log
),以了解其运行情况和检测到的威胁。
总结:
通过以上步骤,你应该已经成功在你的 VPS 上安装并配置了 Fail2Ban。这将显著提高你的服务器安全性,有效抵御来自网络的恶意扫描和暴力破解尝试。记住,安全是一个持续的过程,定期检查和更新你的系统及 Fail2Ban 配置是非常重要的。