挡不住的入侵者?试试Fail2ban,拦截黑客攻击

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云防火墙,500元 1000GB
简介: 挡不住的入侵者?试试Fail2ban,拦截黑客攻击

前言

在数字世界中,像是围绕着一座城堡的城墙一样,我们的服务器也需要一道坚固的防护墙来抵御恶意攻击。但是,这些入侵者们似乎总是能够找到突破口,试图以各种手段来入侵我们的系统。这时候,Fail2ban就像是一位机智的守卫,能够及时发现并封锁这些入侵者,保护我们的服务器免受攻击。现在,就让我们一起来揭开Fail2ban的神秘面纱,探索它的强大功能吧!

Fail2ban简介

Fail2Ban 是一个用于防止自动化攻击的开源软件工具。它主要用于UNIX系统,通过监控系统日志文件来检测恶意尝试的迹象(如多次登录失败、暴力破解等),并采取相应的措施来阻止这些攻击,通常是通过更新主机的防火墙规则来封禁发起攻击的IP地址。

作用和优势

  • 自动化监控和响应:Fail2Ban 会自动监控服务器日志,并根据预定义的规则识别可疑行为。一旦检测到攻击行为,它会立即采取措施,如封禁IP,无需管理员实时监控。
  • 高度可配置:Fail2Ban 允许用户自定义规则和动作。你可以根据自己的需要设定封禁时长、选择监控的服务(如SSH、FTP、SMTP等)以及定义攻击的阈值。
  • 减少资源浪费:通过阻止恶意尝试,Fail2Ban 帮助减少了服务器资源的浪费,因为频繁的非法登录尝试会消耗服务器资源。
  • 提高安全性:Fail2Ban 通过封禁潜在的攻击者IP,提高了服务器的安全性,减少了成功攻击的可能性。
  • 灵活性:Fail2Ban 可以与多种Unix系统和服务结合使用,能够监控各种服务的日志文件。

为什么需要使用Fail2Ban来保护服务器

  • 降低风险:服务器经常面临着来自网络的攻击尝试,尤其是被暴力破解。Fail2Ban 可以有效地减少这种风险。
  • 自动化的防御:手动检测和阻止攻击是不现实的,特别是在面对自动化攻击工具时。Fail2Ban 自动化这一过程,无需人工干预。
  • 保护敏感数据:服务器上可能存储有敏感数据。使用 Fail2Ban 可以帮助防止数据泄露。
  • 保持服务可用性:攻击可能会导致服务器服务不可用。通过阻止攻击,Fail2Ban 有助于保持服务的稳定性和可用性。
  • 应对快速变化的威胁景观:随着攻击手段的不断演变,Fail2Ban 的灵活性和可配置性使得它能够快速适应新的威胁。

总的来说,Fail2Ban 提供了一种有效且自动化的方式来增强服务器的安全性,减少被攻击的可能性,并且保护服务器免受持续的恶意尝试的影响。

安装和配置Fail2ban

Fail2ban是一款非常流行的安全工具,它能够帮助你防止暴力破解攻击,通过监控服务器的日志文件,对发现的恶意尝试进行封锁处理。在本文中,我们将详细介绍如何安装和配置Fail2ban,以及如何理解和使用它的配置文件。

安装Fail2ban

Fail2ban可以在多数Linux发行版中很容易地通过包管理器安装。以下是在一些常见的Linux发行版上安装Fail2ban的方法:

Debian/Ubuntu:

sudo apt-get update
sudo apt-get install fail2ban

CentOS/RHEL:

首先,需要确保已经启用了EPEL仓库:

sudo yum install epel-release

然后,使用以下命令安装Fail2ban:

sudo yum install fail2ban

配置Fail2ban

Fail2ban的配置文件位于/etc/fail2ban/目录。其中,jail.conf是主配置文件,但直接修改这个文件并不是一个好主意,因为它可能会在更新过程中被覆盖。相反,你应该在/etc/fail2ban/jail.local文件中进行配置,这个文件会覆盖jail.conf中的设置。

配置文件语法

Fail2ban的配置文件使用INI文件格式,分为几个部分:

  • [DEFAULT]: 这部分包含了全局设置,比如要封禁的时间、封禁的IP地址等。
  • [服务名]: 对于每个要保护的服务(如SSH、Apache等),都可以定义一个特定的部分。

一个典型的配置部分包含以下选项:

  • enabled: 是否启用该规则(true或false)。
  • filter: 使用哪个过滤器,过滤器定义在/etc/fail2ban/filter.d/目录。
  • action: 当匹配到恶意行为时执行的动作,动作定义在/etc/fail2ban/action.d/目录。
  • logpath: 要监控的日志文件路径。
  • bantime: 封禁的时间长度,单位是秒。
  • maxretry: 触发封禁前允许的最大尝试次数。
常用配置示例

以下是一个保护SSH服务的常用配置示例,放在/etc/fail2ban/jail.local文件中:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600

这个配置启用了对SSH服务的保护,设置了最大尝试次数为5次,封禁时间为10分钟。

Fail2ban工作原理

Fail2ban是一个使用Python编写的开源软件,主要用于防止暴力破解攻击。它通过监控服务器上的日志文件,自动识别恶意尝试,然后采取相应的措施(如封锁IP地址)来防止未经授权的访问。Fail2ban可以保护各种服务,包括SSH、FTP、SMTP等。

基本原理

Fail2ban的工作流程可以概括为以下几个步骤:

  1. 监控日志文件:Fail2ban监控配置中指定的日志文件,这些日志文件记录了对服务器的访问尝试,包括成功和失败的登录尝试。
  2. 使用过滤器识别恶意尝试:Fail2ban使用过滤器(正则表达式)来分析日志文件,并识别出恶意的登录尝试。每个服务(如SSH、Apache等)都可以有自己的过滤器规则,这些规则定义在/etc/fail2ban/filter.d/目录下的配置文件中。
  3. 触发动作:当Fail2ban根据过滤器识别到预设次数的失败尝试时,它会触发一个或多个动作。动作包括封锁IP地址、发送警告邮件等,具体动作由/etc/fail2ban/action.d/目录下的配置文件定义。
  4. 封禁IP地址:最常见的动作是封禁IP地址,Fail2ban会将识别为恶意的IP地址添加到防火墙规则中,从而阻止这些IP地址在封禁期内访问指定的服务。
  5. 解除封禁:封禁时间结束后,Fail2ban会自动从防火墙规则中移除IP地址,解除封禁。

监控日志文件

Fail2ban通过不断读取和分析指定的日志文件来监控服务状态。管理员可以在Fail2ban的配置文件中指定要监控的日志文件路径。例如,对于SSH服务的监控,通常会监控/var/log/auth.log(在Debian/Ubuntu系统中)或/var/log/secure(在CentOS/RHEL系统中)。

响应恶意行为

当Fail2ban识别出违反规则的行为(如连续多次登录失败)时,它会采取配置中定义的动作。动作可以包括:

  • 封禁IP地址:将IP地址添加到防火墙规则中,阻止该IP访问服务器。
  • 发送警告邮件:向管理员发送警告邮件,通知有恶意尝试发生。
  • 执行自定义脚本:执行特定的脚本,进行自定义的响应操作。

日志监控和警报通知

Fail2Ban 实现日志监控和警报通知的功能主要依赖于其过滤器和动作的机制。下面是这个过程的简要描述以及如何配置这些功能。

日志监控

Fail2Ban 通过 “jail” 配置来定义需要监控的服务。每个 “jail” 配置指定了以下内容:

  • 要监控的日志文件路径。
  • 使用的过滤器,即识别攻击模式的规则定义。
  • 触发动作的条件,比如连续登录失败的次数。

Fail2Ban 使用正则表达式来匹配日志文件中的行为。当日志行匹配到过滤器中定义的模式时,Fail2Ban 认为检测到了恶意行为。

警报通知

当检测到恶意行为时,Fail2Ban 会根据配置执行一系列动作。动作可以包括:

  • 修改防火墙规则以封禁攻击者的IP地址。
  • 发送电子邮件通知管理员攻击事件。

这些动作是通过配置文件中的 “action” 部分来定义的。Fail2Ban 提供了多种预定义的动作,包括发送邮件通知。

配置方法和建议

  1. 安装 Fail2Ban:确保你的系统上已经安装了 Fail2Ban。
  2. 配置 jail 文件:在 /etc/fail2ban/jail.local 文件中配置监控的规则(不要直接修改 jail.conf,因为它可能在更新时被覆盖)。
  3. 定义过滤器
  • /etc/fail2ban/filter.d/ 目录中创建或修改过滤器文件,使用正则表达式定义恶意行为的模式。
  1. 设置动作
  • /etc/fail2ban/action.d/ 目录中,确保有适合的动作脚本。通常你可以使用 Fail2Ban 提供的 iptables 动作来封禁IP。
  • 对于邮件通知,确保 sendmail 动作已正确配置,包括邮件发送者、接收者和邮件内容的模板。
  1. 调整动作参数:在 jail.local 文件中,为每个 jail 设置 action 参数,例如:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
action = %(action_mwl)s

在这个例子中,%(action_mwl)s 代表使用一个预定义的动作,它会封禁IP并发送包含更多信息的邮件。

  1. 测试配置:在实施任何新配置之前进行测试,以确保规则按预期工作。Fail2Ban 提供了 fail2ban-regex 工具来测试过滤器规则。
  2. 监控和维护:定期检查 Fail2Ban 的日志文件来确保它正常工作,并根据新出现的攻击模式更新过滤器。

通过上述步骤,你可以设置 Fail2Ban 来监控日志并在检测到攻击行为时发出警报通知。始终确保你的 Fail2Ban 版本是最新的,并且定期更新你的过滤器和动作配置,以保持系统安全。

定制化配置和优化

Fail2Ban 是一个非常灵活且可配置的工具,允许用户根据特定的需求进行定制。以下是一些关于如何定制化配置 Fail2Ban 以及优化其性能和效率的最佳实践和建议。

定制化配置选项

  1. 自定义过滤规则
  • Fail2Ban 使用过滤器来识别日志中的恶意行为。过滤器基于正则表达式,定义在 /etc/fail2ban/filter.d/ 目录下的 .conf 文件中。你可以根据需要创建新的过滤器文件或修改现有的过滤器。
  • 例如,创建一个简单的 SSH 登录失败的自定义过滤器:
[Definition]
failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port \d+ ssh2$
ignoreregex =
  • 这里 <HOST> 是 Fail2Ban 用来自动识别攻击来源 IP 地址的占位符。
  1. 封锁时长和重试次数
  • /etc/fail2ban/jail.local 文件中,你可以为每个监控的服务(jail)设置 bantime(封锁时长)和 maxretry(触发封锁前的最大重试次数)。
  • 例如,对于 SSH 服务:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 86400
  • 在这个示例中,如果有 IP 地址在监控周期内尝试失败 5 次,它将被封锁 24 小时(86400 秒)。
  1. 选择封锁策略
  • Fail2Ban 支持多种封锁策略,例如通过修改防火墙规则来封锁 IP 地址。在 action 部分定义你的封锁策略:
action = iptables[name=SSH, port=ssh, protocol=tcp]
  • 这里的 iptables 是一个动作名称,它会为匹配的 IP 地址设置 iptables 规则,封锁对应的 SSH 端口。

优化 Fail2Ban 性能和效率的最佳实践

  1. 仅监控必要的日志文件:减少监控的日志文件数量可以减轻 Fail2Ban 的负载。仔细选择需要保护的服务,并相应地配置监控。
  2. 优化正则表达式:过滤器中使用的正则表达式性能可能会大不相同。尽量使用高效的正则表达式,减少贪婪匹配,这可以显著提高 Fail2Ban 的处理速度。
  3. 调整扫描频率:Fail2Ban 通过 findtime 参数定义在指定时间窗口内需要匹配的失败尝试次数。合理设置 findtime 可以平衡反应速度和避免误封正常用户。
  4. 使用 Fail2Ban 过滤器测试工具:使用 fail2ban-regex 工具测试你的自定义过滤器规则,确保它们既准确又高效。
  5. 监控 Fail2Ban 性能:定期检查 Fail2Ban 的日志文件和系统资源使用情况,确保 Fail2Ban 正在有效地运行而不会过度占用系统资源。
  6. 更新和维护:保持 Fail2Ban 和系统的其他安全工具处于最新状态,以利用性能改进和新功能。

实战展示

centos7

  • 安装fail2ban
yum install epel-release
yum install fail2ban
  • 编写配置文件/etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 600

这里需要看清楚你的端口,如果你的ssh端口不是默认的22,你需要进行以下两步

  • 查看服务ssh端口

  • 如果你的ssh端口并非里面的22,将上面的脚本的port = 你的ssh端口
  • 启动fail2ban
# 启动/停止/状态命令
service fail2ban restart/stop/status
# 查看fail2ban规则
fail2ban-client status
# 查看明细
fail2ban-client status sshd
  • 效果展示
相关文章
|
监控 安全 Linux
百度搜索:蓝易云【如何使用 Fail2ban 防止对 Linux 的暴力攻击?】
通过上述步骤,你可以使用Fail2ban来防止对Linux系统的暴力攻击。Fail2ban将监视系统日志中的登录尝试,并根据配置的规则进行封禁。这样可以大大减少恶意用户的暴力破解尝试,提高系统的安全性。请注意,在使用Fail2ban之前,建议仔细阅读Fail2ban的文档和配置文件,以确保适当地调整设置以满足你的系统需求。
292 0
|
弹性计算 安全 Linux
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
Linux服务器总是被暴力破解,用fail2ban来加强防护(用法详解)
|
2月前
|
Ubuntu Linux 网络安全
Linux系统通过fail2ban对暴力破解进行防护
Linux系统通过fail2ban对暴力破解进行防护
|
3月前
|
监控 安全 Linux
在Linux中,如何配置和使用fail2ban来防止暴力攻击?
在Linux中,如何配置和使用fail2ban来防止暴力攻击?
|
6月前
|
安全 网络安全 数据安全/隐私保护
VulnHub 靶场--super-Mario-Host超级马里奥主机渗透测试过程
这篇文章描述了在一个网络安全靶场环境中进行渗透测试的过程。首先,从百度网盘下载并导入虚拟机镜像,然后将其网络设置为NAT或仅主机模式。接下来,通过扫描靶机IP地址的本地网络段,发现靶机IP为192.168.220.135,并且了解到靶机上有一个名为“mario.supermariohost.local”的Web服务,运行在8180端口。尝试SSH弱口令攻击失败后,通过信息收集找到一个名为“luigi.php”的页面,其中包含一段英文提示,提示需要将域名添加到hosts文件中。 通过cewl工具从luigi.php生成字典文件passwords,然后使用hydra工具尝试SSH登录,成功获得l
125 0
|
6月前
|
监控 Linux 网络安全
百度搜索:蓝易云【CentOS7如何使用fail2ban防范SSH暴力破解攻击?】
请注意,fail2ban还有其他功能和配置选项可供使用,您可以进一步定制以满足您的需求。您可以查阅fail2ban的官方文档或其他资源以了解更多详细信息和配置选项。
76 1
|
移动开发 安全 Oracle
Log4j2远程执行代码漏洞如何攻击? 又如何修复
Log4j2远程执行代码漏洞如何攻击? 又如何修复
745 0
Log4j2远程执行代码漏洞如何攻击? 又如何修复
|
安全 网络安全 数据安全/隐私保护
FreeSWITCH mod_cti模块 结合 fail2ban 实现封堵恶意IP(SIP安全,防攻击)
介绍 运行在公网的FreeSWITCH服务器,每天都会接收到很多恶意的呼叫请求和注册请求,尝试盗打电话。合理的配置可以防止电话给倒打,但是每天大量的攻击,会让FS产生很多日志,降低FreeSWITCH的处理能力,cti模块结合fail2ban可以把恶意IP,使用防火墙封堵掉。
|
Android开发
解决微信登录返回-6ERR_BAN 的方式
解决微信登录返回-6ERR_BAN 的方式
464 0
解决微信登录返回-6ERR_BAN 的方式
|
安全 PHP
[PiKaChu靶场通关]RCE远程代码执行(下)
[PiKaChu靶场通关]RCE远程代码执行
154 0
[PiKaChu靶场通关]RCE远程代码执行(下)