找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1513

积分

0

好友

193

主题
发表于 前天 17:15 | 查看: 5| 回复: 0

对于自行运维服务器的开发者和博主而言,保障服务器安全是一项核心职责。在缺乏有效防护的情况下,服务器极易成为恶意攻击的目标。虽然有诸多在线Web应用防火墙(WAF)方案,但为了从底层加固系统,一个名为 Fail2ban 的开源工具至关重要。它通过监控日志,能在多次失败的登录尝试后,临时封禁攻击者的IP地址,从而有效抵御暴力破解等威胁。

Fail2ban的监控能力不限于SSH,还可扩展至FTP、邮件服务器等多种服务。本文将详细介绍在Ubuntu 24.04或22.04 LTS系统上安装、配置和使用Fail2ban的完整流程。

在Ubuntu上安装Fail2ban

Fail2ban软件包已收录于Ubuntu官方仓库,我们可以直接使用APT包管理器进行安装。

首先,更新系统软件包列表以获取最新信息:

sudo apt update

接着,执行安装命令:

sudo apt install fail2ban

安装完成后,系统将提供以下核心程序:

  • fail2ban-server – 守护进程,负责监控与封禁。
  • fail2ban-client – 客户端程序,用于配置服务器与查询状态。
  • fail2ban-regex – 用于测试过滤规则中正则表达式的工具。

安装后,需要启用Fail2ban服务并检查其运行状态:

sudo systemctl enable fail2ban
sudo systemctl status fail2ban

理解Fail2ban配置框架

Fail2ban的配置文件主要分为三种类型,理解其结构是进行有效配置的关键。配置文件有 .conf.local 两种扩展名。.conf 文件是软件包提供的默认配置,在升级时会被覆盖。因此,所有自定义设置都应在对应的 .local 文件中进行,该文件中的值会覆盖 .conf 文件中的默认设置。

主要的配置文件目录和文件包括:

  1. /etc/fail2ban/action.d/*.conf - 定义封禁和解除封禁IP地址时所执行的具体动作(如使用iptablesufw)。
  2. /etc/fail2ban/filter.d/*.conf - 包含用于解析不同服务日志文件的正则表达式规则。
  3. /etc/fail2ban/jail.conf - 主配置文件,用于将“过滤器”(filter)和“动作”(action)组合成具体的“监狱”(jail),并定义全局和特定服务的监控规则。
  4. /etc/fail2ban/jail.d/*.conf - 用于存放额外的监狱配置。

动作(Action)配置详解

action.d 目录下的文件定义了执行封禁的逻辑。每个动作文件通常包含 [Definition][Init] 两部分。

以下是一个基于 iptables-multiport 动作的选项概览:

选项 描述 示例
[Definition]
actionstart 在Fail2ban启动时执行的命令,用于初始化(如创建iptables链)。 actionstart = iptables -N fail2ban-<name> ...
actionstop 在Fail2ban停止时执行的命令,用于清理。 actionstop = iptables -D <chain> -p <protocol> ... ...
actioncheck 在执行actionban前验证环境是否就绪的命令。 actioncheck = iptables -n -L <chain> | grep -q 'fail2ban-<name>[ \t]'
actionban 当IP达到封禁条件时执行的命令。 actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>
actionunban 解除IP封禁时执行的命令。 actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>
[Init]
name 使用的iptables链的默认名称。 name = default
port 要监控的端口(可以是服务名如ssh,或端口号)。 port = ssh
protocol 使用的协议。 protocol = tcp
chain 添加规则的iptables链,默认为INPUT chain = INPUT

过滤器(Filter)配置详解

filter.d 目录下的文件包含用于分析日志、提取恶意IP地址的正则表达式。核心部分是 [Definition]

选项 描述 示例
[Definition]
failregex 用于在日志中匹配失败尝试的正则表达式。<HOST>标签用于提取IP或主机名。 failregex = ^%(__prefix_line)sFAIL: \S+ address from=<HOST>$
ignoreregex 定义例外规则,即使匹配failregex也会被忽略。 ignoreregex =
[INCLUDES]
before 指定在解析本文件前要包含的其他文件。 before = common.conf
after 指定在解析本文件后要包含的其他文件。 after = example_after.local

监狱(Jail)配置详解

jail.conf (或 jail.local) 是核心配置文件,它将特定的过滤器、日志路径和封禁动作关联起来,并设置触发阈值。

选项 描述 示例
[DEFAULT] 全局默认设置
ignoreip 永不封禁的IP或网段(白名单),用空格分隔。 ignoreip = 127.0.0.1/8 192.168.1.33
bantime IP被封禁的时长(秒),负值表示永久封禁。 bantime = 86400 (24小时)
findtime 统计失败尝试的时间窗口(秒)。 findtime = 660 (10分钟)
maxretry findtime时间窗口内,触发封禁的最大失败次数。 maxretry = 2
backend 指定读取日志的方式,如systemdauto(自动选择)。 backend = auto
usedns 设置是否对日志中的主机名进行反向DNS查询,可选yes, no, warn usedns = warn
[服务名称] 特定服务的监狱设置 [sshd]
enabled 是否启用此监狱。 enabled = true
port 该服务监听的端口。 port = ssh
filter 使用的过滤器名称(对应filter.d/下的文件名)。 filter = sshd
logpath 要监控的日志文件路径。 logpath = /var/log/auth.log
maxretry 可在此处覆盖[DEFAULT]中的值。 maxretry = 3

创建与配置自定义监狱

不建议直接修改 jail.conf。正确的做法是创建其本地副本 jail.local 进行自定义。

sudo cp /etc/fail2ban/jail.{conf,local}

接下来,编辑这个本地配置文件:

sudo nano /etc/fail2ban/jail.local

基础安全策略定制

  1. 设置IP白名单 (ignoreip)
    在文件中找到 #ignoreip 行,删除注释符号 #,并添加你信任的IP地址或网段,例如你的办公网络IP或管理服务器IP。

    ignoreip = 127.0.0.1/8 192.168.1.0/24 10.0.0.5
  2. 调整封禁时间 (bantime)
    默认封禁时间为10分钟(600秒)。你可以根据安全策略调整,例如设置为1小时或1天。使用 m 表示分钟,h 表示小时,d 表示天。

    bantime = 1h

    若要永久封禁,可设置为负值(如 -1)。但需谨慎使用。

  3. 调整容错次数 (maxretry)
    此值定义了在 findtime 时间窗口内,允许的最大失败尝试次数。默认是5次,你可以根据服务的敏感度调低(更严格)或调高。

    maxretry = 3
  4. 调整检测时间窗口 (findtime)
    这个设置与 maxretry 协同工作。例如,默认 findtime = 10mmaxretry = 5 意味着:如果某个IP在10分钟内失败了5次,则触发封禁。你可以缩短这个窗口以更快响应攻击。

    findtime = 5m

配置Fail2ban发送邮件警报

Fail2ban可以在IP被封禁时发送邮件通知。首先,需要安装一个邮件传输代理(MTA),如Sendmail:

sudo apt install sendmail

安装后,需要在 jail.local 文件的 [DEFAULT] 部分进行配置:

  1. 设置收件人 (destemail):填写接收警报的邮箱地址。
  2. 设置发件人 (sender):填写Fail2ban发送邮件时使用的发件人地址。
  3. 更改默认动作 (action):找到 action = %(action_)s 这一行,将其替换为以下两种之一:
    • action = %(action_mw)s:当IP被封禁时,发送邮件通知,并在邮件中包含“whois”查询信息。
    • action = %(action_mwl)s:发送邮件通知,并包含“whois”信息以及触发封禁的相关日志行。

配置示例:

destemail = admin@yourdomain.com
sender = fail2ban-alert@yourdomain.com
action = %(action_mwl)s

启用与管理监狱服务

Fail2ban预定义了多种服务的监狱(如sshd, apache-auth, postfix等),但默认只启用了sshd

查看已启用的监狱

使用以下命令查看当前活跃的监狱:

sudo fail2ban-client status

输出类似:

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

启用更多监狱

要启用其他监狱(例如 apache-auth 用于防护Apache认证失败攻击),只需在 jail.local 文件中找到对应的监狱段(如 [apache-auth]),并将其中的 enabled = false 改为 enabled = true。确保你的系统上已安装并运行了该服务(此处即Apache),且日志路径正确。

重启服务并验证

修改配置后,必须重启Fail2ban服务以使更改生效:

sudo systemctl restart fail2ban

再次检查状态,此时应能看到新启用的监狱:

sudo fail2ban-client status

输出可能变为:

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

你可以查看特定监狱的详细状态:

sudo fail2ban-client status apache-auth

常见错误:如果启用某个监狱后Fail2ban启动失败(通过 systemctl status fail2ban 查看),通常是因为该监狱对应的服务未安装或日志文件路径不存在。例如,未安装Apache却启用了apache-auth监狱就会导致此问题。此时需要禁用该监狱或安装相应服务。

Fail2ban客户端常用操作

Fail2ban客户端 (fail2ban-client) 是一个强大的管理工具。

查看所有可用命令:

fail2ban-client -h

手动封禁/解封IP(谨慎使用):

  • 封禁一个IP到指定监狱:sudo fail2ban-client set <JAIL_NAME> banip <IP_ADDRESS>
  • 解封一个IP:sudo fail2ban-client set <JAIL_NAME> unbanip <IP_ADDRESS>

示例:手动封禁IP 192.168.0.100sshd 监狱。

sudo fail2ban-client set sshd banip 192.168.0.100

通过上述步骤,你可以在Ubuntu服务器上成功部署和配置Fail2ban,构建一道有效的自动入侵防御屏障。合理的配置和定期的 运维监控 是维持服务器长期稳定安全运行的关键。

参考资料

[1] 在 Ubuntu 24.04 或 22.04 LTS 服务器上安装、配置和使用 Fail2ban, 微信公众号:mp.weixin.qq.com/s/Itxpt6pOanG27Azsw8RD6A

版权声明:本文由 云栈社区 整理发布,版权归原作者所有。




上一篇:英伟达战略转型与AI芯片护城河:从CUDA到产业狂热的深度分析
下一篇:从微米到纳米:解析薄膜生长四大核心工艺(PVD/CVD/ALD/外延)的技术演进与挑战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-25 09:11 , Processed in 0.543874 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表