每天掌握一個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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83493.shtml
英文地址,請注明出處:http://en.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 問題解決方…