每天掌握一个Linux命令 - fail2ban

Linux 命令工具 fail2ban 使用指南

目录

  • Linux 命令工具 fail2ban 使用指南
    • 一、工具概述
    • 二、安装方式
      • 1. 包管理器安装(推荐)
        • Debian/Ubuntu 系统
        • CentOS/RHEL 系统
        • Arch Linux 系统
      • 2. 手动编译安装(适用于自定义需求)
    • 三、核心功能
    • 四、基础用法
      • 1. 配置文件结构
      • 2. 启用 SSH 防护(示例)
        • 步骤 1:编辑服务配置
        • 步骤 2:启动服务
        • 步骤 3:验证状态
    • 五、进阶操作
      • 1. 自定义过滤规则
        • 场景:防护 Web 服务(Nginx 恶意请求)
      • 2. 自定义动作(邮件报警)
      • 3. 多服务批量配置
    • 六、实战案例:防护 WordPress 登录暴力破解
      • 步骤 1:配置 WordPress 日志
      • 步骤 2:创建过滤规则 `/etc/fail2ban/filters.d/wordpress.conf`
      • 步骤 3:配置服务规则 `jail.d/wordpress.conf`
      • 步骤 4:重启服务使配置生效
    • 案例二:防护 SSHD 服务暴力破解
      • 步骤 1:检查和调整默认配置
      • 步骤 2:重启 fail2ban 服务
      • 步骤 3:验证防护效果
    • 七、注意事项

一、工具概述

fail2ban 是一款基于 Python 的 Linux 安全工具,主要用于监控系统日志文件,通过分析日志中的失败登录尝试(如 SSH、FTP、Web 服务等),自动封禁频繁尝试登录的 IP 地址,从而有效抵御暴力破解攻击。其核心原理是通过正则表达式匹配日志中的失败记录,结合预设的过滤规则和动作(如调用 iptables 防火墙封禁 IP),实现自动化的安全防护。

二、安装方式

1. 包管理器安装(推荐)

Debian/Ubuntu 系统
sudo apt update
sudo apt install fail2ban
CentOS/RHEL 系统
sudo yum install epel-release  # 若未安装 EPEL 源
sudo yum install fail2ban
Arch Linux 系统
sudo pacman -S fail2ban

2. 手动编译安装(适用于自定义需求)

wget https://github.com/fail2ban/fail2ban/archive/refs/tags/v1.0.0.tar.gz  # 替换为最新版本号
tar -zxvf v1.0.0.tar.gz
cd fail2ban-1.0.0
sudo python3 setup.py install

三、核心功能

功能模块说明
日志监控实时扫描指定日志文件(如 /var/log/sshd.log),匹配失败登录模式。
过滤规则通过正则表达式定义失败登录的匹配规则,支持自定义规则文件(.filter)。
动作执行触发封禁动作(如调用 iptablesfirewalld 或发送邮件报警),支持自定义动作(.action)。
封禁管理支持设置封禁时间(bantime)、最大失败次数(maxretry)和检测间隔(findtime)。
多服务支持内置常见服务(SSH、HTTP、FTP 等)的默认规则,可快速启用防护。

四、基础用法

1. 配置文件结构

/etc/fail2ban/
├── fail2ban.conf       # 全局配置(一般不修改)
├── jail.conf          # 服务配置模板(修改此文件或创建自定义文件)
├── jail.d/            # 自定义服务配置目录(优先级高于 jail.conf)
├── filters.d/         # 过滤规则目录
└── actions.d/         # 动作定义目录

2. 启用 SSH 防护(示例)

步骤 1:编辑服务配置
sudo nano /etc/fail2ban/jail.conf

[sshd] 部分取消注释并配置参数:

[sshd]
enabled = true          # 启用服务
port    = ssh           # 监控端口(默认 22)
filter  = sshd          # 使用内置过滤规则
logpath = /var/log/sshd.log  # 日志路径
maxretry = 3            # 最大失败次数
bantime  = 3600         # 封禁时间(秒,默认 10 分钟)
findtime = 600          # 检测时间窗口(秒,默认 10 分钟内)
步骤 2:启动服务
sudo systemctl start fail2ban
sudo systemctl enable fail2ban  # 开机自启
步骤 3:验证状态
sudo fail2ban-client status sshd  # 查看 SSH 服务防护状态
sudo fail2ban-client banned        # 查看当前封禁的 IP 列表

五、进阶操作

1. 自定义过滤规则

场景:防护 Web 服务(Nginx 恶意请求)
  1. 创建过滤规则文件 /etc/fail2ban/filters.d/nginx-malicious.conf
[Definition]
failregex = ^<HOST> - .* "(GET|POST) /(admin|login|api) HTTP/1.1" 403
ignoreregex =  # 可选:忽略特定模式

2. 自定义动作(邮件报警)

  1. 修改动作文件 /etc/fail2ban/actions.d/mail-action.conf
[Definition]
actionstart = sendmail -t <<EOF
From: fail2ban <alert@example.com>
To: admin@example.com
Subject: fail2ban startedService: <service>
EOFactionban = sendmail -t <<EOF
From: fail2ban <alert@example.com>
To: admin@example.com
Subject: [Banned] <ip> tried to attack <service>IP: <ip>
Service: <service>
Time: < bantime >
EOF

3. 多服务批量配置

jail.conf 中添加通用配置:

[DEFAULT]
bantime = 28800  # 全局封禁时间(8 小时)
findtime = 3600  # 全局检测窗口(1 小时)[ssh]
enabled = true
port = 22,2222   # 监控多个端口[ftp]
enabled = true
port = ftp,ftps
logpath = /var/log/xferlog

六、实战案例:防护 WordPress 登录暴力破解

步骤 1:配置 WordPress 日志

确保 WordPress 启用调试日志(在 wp-config.php 中添加):

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

步骤 2:创建过滤规则 /etc/fail2ban/filters.d/wordpress.conf

[Definition]
failregex = ^.*POST /wp-login.php.*(Invalid username|The password you entered for the username).*IP: <HOST>
ignoreregex = 

步骤 3:配置服务规则 jail.d/wordpress.conf

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/www/wordpress/wp-content/debug.log
maxretry = 5
bantime = 43200  # 封禁 12 小时

步骤 4:重启服务使配置生效

sudo systemctl restart fail2ban

案例二:防护 SSHD 服务暴力破解

假设服务器近期频繁遭受 SSHD 服务的暴力破解尝试,导致系统负载升高,为保障服务器安全,利用 fail2ban 进行防护。

步骤 1:检查和调整默认配置

一般情况下,fail2ban 安装后对 SSHD 服务有默认配置,但可能需根据实际情况调整。打开 /etc/fail2ban/jail.conf/etc/fail2ban/jail.d/sshd.conf(若存在)文件。

sudo nano /etc/fail2ban/jail.d/sshd.conf

确认或修改以下关键参数:

\[sshd]enabled = true&#x20;port = ssh&#x20;filter = sshd&#x20;logpath = /var/log/sshd.log&#x20;maxretry = 3&#x20;bantime = 3600&#x20;findtime = 600&#x20;

这里将 maxretry 设置为 3,表示 600 秒(findtime)内,若同一 IP 地址登录失败超过 3 次,该 IP 将被封禁 3600 秒(bantime)。

步骤 2:重启 fail2ban 服务

配置完成后,重启 fail2ban 服务使新配置生效。

sudo systemctl restart fail2ban

步骤 3:验证防护效果

使用另一台主机模拟错误的 SSH 登录尝试,故意输入错误密码多次。随后,通过以下命令查看 SSHD 服务的 fail2ban 状态:

sudo fail2ban-client status sshd

若配置生效,可看到 Currently failed(当前失败次数)和 Total failed(总失败次数)增加,当达到 maxretry 设定值后,该 IP 会被封禁,Currently banned(当前封禁数)和 Banned IP list(封禁 IP 列表)中会出现对应信息。若需解除对某个 IP 的封禁,可使用以下命令:

sudo fail2ban-client set sshd unbanip \<ip\_address>

<ip_address> 替换为实际被封禁的 IP 地址。通过上述配置和操作,可有效利用 fail2ban 防护 SSHD 服务,抵御暴力破解攻击,保障服务器安全。

七、注意事项

  1. 误封处理

    • 使用 sudo fail2ban-client set sshd unbanip <ip> 解封指定 IP。
    • 添加白名单:在 jail.conf 中配置 ignoreip = 192.168.1.0/24 10.0.0.0/8(允许内网 IP)。
  2. 性能优化

    • 避免监控过大的日志文件,可通过 logrotate 定期切割日志。
    • 减少正则表达式复杂度,避免过度消耗 CPU 资源。
  3. 规则测试

    • 使用 fail2ban-regex <logfile> <filterfile> 验证规则匹配效果:
      fail2ban-regex /var/log/sshd.log /etc/fail2ban/filters.d/sshd.conf
      
  4. 防火墙依赖

    • 确保 iptablesfirewalld 已启用,且 fail2ban 有权限操作防火墙。
    • 若使用 firewalld,需在动作中指定 action = firewallcmd-ipset
  5. 日志权限

    • 确保 fail2ban 服务用户(默认 fail2ban)有读取日志文件的权限。

通过合理配置 fail2ban,可显著提升系统抵御暴力破解的能力,同时结合定期审计封禁日志和优化过滤规则,能进一步增强安全防护的准确性和有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/83493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网大厂智能体平台体验笔记字节扣子罗盘、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台

互联网大厂 字节扣子、阿里云百炼、百度千帆 、腾讯元器、TI-ONE平台、云智能体开发平台 体验 开始动手 了解 智能体&#xff0c;发现已经落后时代太远 光头部互联网大厂对开 公开的平台就已经这么多&#xff0c;可以学习和了解&#xff0c;相关的信息 整理了对应的平台地址…

ansible-playbook 进阶 接上一章内容

1.异常中断 做法1&#xff1a;强制正常 编写 nginx 的 playbook 文件 01-zuofa .yml - hosts : web remote_user : root tasks : - name : create new user user : name nginx-test system yes uid 82 shell / sbin / nologin - name : test new user shell : gete…

LRC and VIP

//首先排除所有数相等的情况,再把最大值放在一个组&#xff0c;那么最大值的gcd就等于其本身&#xff0c;再判断剩下的gcd是否等于最大值就可以了 #include<bits/stdc.h> using namespace std;const int N1e3100; int a[N]; map<int,int>mapp; int main(){int t;ci…

企业应用AI对向量数据库选型思考

一、向量数据库概述 向量数据库是一种专门用于存储和检索高维向量数据的数据库系统&#xff0c;它能够高效地处理基于向量相似性的查询&#xff0c;如最近邻搜索等&#xff0c;在人工智能、机器学习等领域的应用中发挥着重要作用&#xff0c;为处理复杂的向量数据提供了有力的…

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…

Java8 list集合根据属性分组

在Java8中&#xff0c;可以使用Collectors.groupingBy方法对List集合根据属性进行分组。以下是一个完整的示例&#xff0c;展示如何根据对象的不同属性分组。 根据对象属性分组 假设有一个Student类&#xff0c;包含name、age和grade属性&#xff1a; public class Student …

更新已打包好的 Spring Boot JAR 文件中的 class 文件

# 1. 解压原始 JAR unzip -q original-app.jar -d temp # 2. 替换 class 文件 cp ~/projects/new-classes/*.class temp/BOOT-INF/classes/com/example/ # 3. 保留原始清单 cp temp/META-INF/MANIFEST.MF . # 4. 重新打包 jar -cf0m new-app.jar MANIFEST.MF -C temp/ . # …

《HelloGitHub》第 110 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对开源感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

当 “欧洲版 Cursor” 遇上安全危机

在 AI 编程助手蓬勃发展的当下&#xff0c;安全问题正成为行业不容忽视的隐忧。近期&#xff0c;AI 编程助手公司 Replit 与号称 “欧洲版 Cursor” 的 Lovable 之间&#xff0c;因安全漏洞问题掀起了一场风波&#xff0c;引发了业界的广泛关注。​ Replit 的员工 Matt Palmer…

centos挂载目录满但实际未满引发系统宕机

测试服务器应用系统突然挂了&#xff0c;经过排查发现是因为磁盘“满了”导致的&#xff0c;使用df -h查看磁盘使用情况/home目录使用率已经到了100%,但使用du -sh /home查看发现实际磁盘使用还不到1G&#xff0c;推测有进程正在写入或占用已删除的大文件&#xff08;Linux 系统…

乾坤qiankun的使用

vue2 为主应用 react 为子应用 在项目中安装乾坤 yarn add qiankun # 或者 npm i qiankun -Svue主应用 在main.js中新增 &#xff08;需要注意的是路由模型为history模式&#xff09; registerMicroApps([{name: reactApp,entry: //localhost:3011,container: #container,/…

PostgreSQL的扩展 auth_delay

PostgreSQL的扩展 auth_delay auth_delay 是 PostgreSQL 提供的一个安全相关扩展&#xff0c;主要用于防止暴力破解攻击。它通过在认证失败后引入人为延迟来增加暴力破解的难度。 一、扩展基础 功能&#xff1a;在认证失败后增加延迟目的&#xff1a;减缓暴力破解和字典攻击…

Web前端为什么要打包?Webpack 和 Vite 如何助力现代开发?

一. 为什么要使用框架库? 1.1 传统网页与现代前端的差异 在最早期的网页开发中,我们只需要写几个.html文件,配上.css和.js文件,浏览器直接加载就能展现页面,每个文件都是独立的静态资源,简单且直观 但现在网站越来越复杂了: 需要用到最新的js语法(比如ES6)使用框架(Vue…

使用pdm+uv替换poetry

用了好几年poetry了&#xff0c;各方面都还挺满意&#xff0c;就是lock实在太慢&#xff1b; 已经试用pdmuv一段时间了&#xff0c;确实是快&#xff0c;也基本能覆盖poetry的功能。 至于为什么用pdmuv&#xff0c;而不是只用uv&#xff0c;原因很多&#xff0c;有兴趣的可以…

java后端生成心电图-jfreechart

用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…

微软Build 2025:Copilot Studio升级,解锁多智能体协作未来

微软Build 2025大会圆满落幕&#xff0c;作为年度科技盛会&#xff0c;它一直是开发与AI技术突破性创新的重要展示平台。对于工程师、创作者和领域专家来说&#xff0c;这是了解微软生态未来动向的关键时刻。今年&#xff0c;Microsoft Copilot Studio推出了一系列新功能&#…

LabVIEW杂草识别与精准喷洒

基于LabVIEW构建了一套集成机器视觉、智能决策与精准控制的农业杂草识别系统。通过高分辨率视觉传感器采集作物图像&#xff0c;利用 LabVIEW 的 NI Vision 模块实现图像颜色匹配与特征分析&#xff0c;结合 Arduino 兼容的工业级控制硬件&#xff0c;实现杂草定位与除草剂精准…

使用 Akamai 分布式云与 CDN 保障视频供稿传输安全

作者简介&#xff1a;David Eisenbacher 是 EZDRM 公司的首席执行官兼联合创始人&#xff0c;该公司是首家提供 "DRM 即服务" 的企业。作为 CEO&#xff0c;David 始终秉持为企业确立的使命&#xff1a;为视频服务商提供简洁有效的数字版权管理方案&#xff0c;助力其…

javascript 实战案例 二级联动下拉选框

本案例完全使用原生javascript实现&#xff0c;使用时只需填充platform_list二维数组即可&#xff0c;platform_list填充规则如下&#xff1a; [‘一级选项1’,‘二级选项11’,‘二级选项12’,‘二级选项13’,‘二级选项14’,…], [‘一级选项2’,‘二级选项21’,‘二级选项22’…

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景&#xff1a;重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少&#xff1f; 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…