Fail2ban防止暴力破解工具使用教程

Fail2ban防止暴力破解工具使用教程

  • 場景
  • Fail2ban安裝和配置
    • 安裝
    • 配置
  • 原理
  • 遇到的問題以及解決辦法
    • 問題1:設置的策略是10分鐘內ssh連接失敗2次的ip進行封禁,日志中實際卻出現4次連接。
    • 問題2:策略設置為1分鐘內失敗兩次,封禁ip。但通過日志發現,暴力破解也修改了策略,每分鐘嘗試1次ssh連接,這樣導致該ip無法被封禁。

場景

物理主機服務器托管于第三方機房中,僅僅提供電源以及網絡服務,并未提供安全防護管理。因此,我們經常遇到網絡攻擊,常見的就是通過ssh進行暴力破解,進入服務器,植入病毒和程序,進而造成經濟損失。

ssh連接日志記錄:

/var/log/secure
Mar  9 03:40:00 localhost sshd[78060]: Failed password for root from 14.103.109.71 port 49730 ssh2
Mar  9 03:40:00 localhost sshd[78060]: Connection closed by 14.103.109.71 port 49730 [preauth]
Mar  9 03:40:00 localhost unix_chkpwd[78088]: password check failed for user (root)
Mar  9 03:40:00 localhost sshd[78086]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=14.103.132.8  user=root
Mar  9 03:40:00 localhost sshd[78086]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Mar  9 03:40:01 localhost unix_chkpwd[78107]: password check failed for user (root)
Mar  9 03:40:01 localhost sshd[78090]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=14.103.109.71  user=root
Mar  9 03:40:01 localhost sshd[78090]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Mar  9 03:40:02 localhost sshd[78086]: Failed password for root from 14.103.132.8 port 37816 ssh2
Mar  9 03:40:02 localhost sshd[78086]: Received disconnect from 14.103.132.8 port 37816:11: Bye Bye [preauth]
Mar  9 03:40:02 localhost sshd[78086]: Disconnected from 14.103.132.8 port 37816 [preauth]
Mar  9 03:40:03 localhost sshd[78090]: Failed password for root from 14.103.109.71 port 49742 ssh2
Mar  9 03:40:03 localhost sshd[78090]: Connection closed by 14.103.109.71 port 49742 [preauth]
Mar  9 03:40:03 localhost unix_chkpwd[78125]: password check failed for user (root)
Mar  9 03:40:03 localhost sshd[78123]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=14.103.109.71  user=root
Mar  9 03:40:03 localhost sshd[78123]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Mar  9 03:40:06 localhost sshd[78123]: Failed password for root from 14.103.109.71 port 54450 ssh2
Mar  9 03:40:06 localhost sshd[78123]: Connection closed by 14.103.109.71 port 54450 [preauth]
Mar  9 03:40:06 localhost unix_chkpwd[78131]: password check failed for user (root)
Mar  9 03:40:06 localhost sshd[78129]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=14.103.109.71  user=root
Mar  9 03:40:06 localhost sshd[78129]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Mar  9 03:40:08 localhost sshd[78129]: Failed password for root from 14.103.109.71 port 54458 ssh2
Mar  9 03:40:08 localhost sshd[78129]: Connection closed by 14.103.109.71 port 54458 [preauth]
Mar  9 03:40:09 localhost unix_chkpwd[78138]: password check failed for user (root)
Mar  9 03:40:09 localhost sshd[78136]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=14.103.109.71  user=root
Mar  9 03:40:09 localhost sshd[78136]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"

從ssh記錄中可以看到,這10秒鐘有4次ssh請求,差不多1分鐘24次記錄,已經屬于惡意暴力破解了。

Fail2ban安裝和配置

安裝

  • Linux(CentOS/RHEL)
yum install epel-release -y  # 先安裝 EPEL 源(CentOS 7)yum install fail2ban -ysystemctl enable --now fail2ban
  • Linux(Ubuntu/Debian)
apt update && apt install fail2ban -ysystemctl enable --now fail2ban

配置

  1. 安裝路徑:
(base) [root@localhost fail2ban]# cd /etc/fail2ban/
(base) [root@localhost fail2ban]# pwd
/etc/fail2ban
(base) [root@localhost fail2ban]# ls
action.d  fail2ban.conf  fail2ban.d  filter.d  jail.conf  jail.d  jail.local  paths-common.conf  paths-fedora.conf
(base) [root@localhost fail2ban]# 
  1. 配置文件路徑

(1) 主配置文件(不推薦直接修改)

/etc/fail2ban/jail.local

(1) 主配置文件(不推薦直接修改)

/etc/fail2ban/jail.conf

注意:(系統默認配置,升級時會被覆蓋)

(2) 自定義配置文件(推薦修改)

/etc/fail2ban/jail.local

注意:(用戶自定義配置,優先級高于 jail.conf,不會被升級覆蓋)

  1. 自定義配置文件注釋
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure  # CentOS
maxretry = 5               # 允許5次失敗嘗試(平衡安全與誤封風險)
findtime = 300             # 5分鐘內的失敗嘗試計入統計(實時響應攻擊)
bantime = 86400            # 封禁24小時(足夠阻止暴力破解,避免長期誤封)
ignoreip = 127.0.0.1 192.168.1.0/24  # 信任內網IP
  1. 相關命令

重啟fail2ban應用:

systemctl restart fail2ban

實時監控fail2ban工具的日志:

tail -f /var/log/fail2ban.log

輸出封禁ip列表:

fail2ban-client status sshd | grep "Banned IP list"

原理

遇到的問題以及解決辦法

問題1:設置的策略是10分鐘內ssh連接失敗2次的ip進行封禁,日志中實際卻出現4次連接。

日志內容:

Jul 17 14:43:07 localhost sshd[105931]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.37.23.232  user=root
Jul 17 14:43:07 localhost sshd[105931]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Jul 17 14:43:09 localhost sshd[105931]: Failed password for root from 101.37.23.232 port 41776 ssh2
Jul 17 14:43:09 localhost sshd[105931]: Connection closed by 101.37.23.232 port 41776 [preauth]
Jul 17 14:45:42 localhost sshd[126373]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.37.23.232  user=root
Jul 17 14:45:42 localhost sshd[126373]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
Jul 17 14:45:42 localhost sshd[126375]: Invalid user pi from 101.37.23.232 port 43878
Jul 17 14:45:42 localhost sshd[126375]: input_userauth_request: invalid user pi [preauth]
Jul 17 14:45:42 localhost sshd[126375]: pam_unix(sshd:auth): check pass; user unknown
Jul 17 14:45:42 localhost sshd[126375]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.37.23.232
Jul 17 14:45:43 localhost sshd[126499]: Invalid user hive from 101.37.23.232 port 44702
Jul 17 14:45:43 localhost sshd[126499]: input_userauth_request: invalid user hive [preauth]
Jul 17 14:45:43 localhost sshd[126499]: pam_unix(sshd:auth): check pass; user unknown
Jul 17 14:45:43 localhost sshd[126499]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.37.23.232
Jul 17 14:45:44 localhost sshd[126373]: Failed password for root from 101.37.23.232 port 43054 ssh2
Jul 17 14:45:44 localhost sshd[126373]: Connection closed by 101.37.23.232 port 43054 [preauth]
Jul 17 14:45:44 localhost sshd[126375]: Failed password for invalid user pi from 101.37.23.232 port 43878 ssh2
Jul 17 14:45:44 localhost sshd[126375]: Connection closed by 101.37.23.232 port 43878 [preauth]
Jul 17 14:45:44 localhost sshd[126499]: Failed password for invalid user hive from 101.37.23.232 port 44702 ssh2
Jul 17 14:45:44 localhost sshd[126499]: Connection closed by 101.37.23.232 port 44702 [preauth]
Jul 17 14:57:58 localhost sudo:    root : TTY=pts/5 ; PWD=/root ; USER=root ; COMMAND=/bin/grep Ban /var/log/fail2ban.log
Jul 17 14:57:58 localhost sudo: pam_unix(sudo:session): session opened for user root by root(uid=0)

問題分析:

  1. 攻擊行為分析
    從日志來看,IP 101.37.23.232 在短時間內進行了多次SSH暴力破解嘗試:

14:43:07

嘗試 root 登錄 → 失敗(1次)

14:45:42

嘗試 root 登錄 → 失敗(2次)

嘗試 pi 用戶登錄 → 無效用戶(3次)

嘗試 hive 用戶登錄 → 無效用戶(4次)

總計失敗登錄嘗試次數:

root 用戶:2次

無效用戶(pi、hive):2次

總失敗次數:4次

  1. Fail2Ban 策略匹配
    您設置的策略是 10分鐘內限制2次(maxretry = 2),但Fail2Ban 默認只統計同一用戶的失敗登錄:

sshd jail 的默認 failregex 會分別統計:

root 的失敗登錄(2次)→ 未達到 maxretry=2 的封禁閾值(剛好等于,但可能未觸發)。

pi 和 hive 的失敗登錄(各1次)→ 未達到單獨封禁條件。

關鍵問題:

Fail2Ban 默認不合并不同用戶的失敗登錄,因此雖然總失敗次數是4次,但每個用戶的失敗次數均未達到 maxretry=2 的封禁條件。

  1. 為什么IP沒有被封禁?
    原因說明:

分用戶統計失敗次數: Fail2Ban 默認按用戶名分別計算 maxretry,root 2次,pi 1次,hive 1次,均未達到封禁條件。
時間窗口 (findtime):所有嘗試均在 2分鐘 內發生(14:43-14:45),遠小于findtime=10m,但按用戶分開統計導致未觸發。
無效用戶未計入:部分Fail2Ban配置可能忽略 invalid user 的日志(需檢查 filter.d/sshd.conf 的 failregex)。

處理問題:

方案一:修改 filter.d/sshd.conf 合并統計所有失敗登錄

編輯 Fail2Ban 的 SSH 過濾規則:

sudo vim /etc/fail2ban/filter.d/sshd.conf

在 failregex 部分取消用戶區分,例如:

failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from <HOST>( port \d+)? ssh2$^%(__prefix_line)sFailed password for .* from <HOST>( port \d+)? ssh2$^%(__prefix_line)sConnection closed by <HOST> port \d+ \[preauth\]$

然后重載配置:

sudo fail2ban-client reload sshd

方案二:降低 maxretry 或縮短 findtime

sudo vim /etc/fail2ban/jail.local

調整參數:

maxretry = 2     # 保持當前值,但修改過濾規則后會更敏感
findtime = 1m    # 縮短統計窗口至1分鐘
bantime = 1h     # 封禁1小時

重啟 Fail2Ban:

sudo systemctl restart fail2ban

方案三:手動封禁該IP(臨時措施)

sudo fail2ban-client set sshd banip 101.37.23.232

驗證是否生效

檢查封禁列表:

sudo fail2ban-client status sshd

模擬攻擊測試:

使用另一臺服務器嘗試多次失敗登錄,觀察是否觸發封禁。

總結

當前策略問題:Fail2Ban 默認分用戶統計失敗次數,導致攻擊者通過切換用戶名繞過封禁。

修復方法:

  1. 修改 sshd.conf 合并所有失敗登錄統計。

  2. 調整 maxretry 和 findtime 提高敏感性。

  3. 手動封禁 確認的惡意 IP。

最終效果:調整后,同一IP的多次失敗登錄(無論用戶名)將在 findtime 窗口內累計,達到 maxretry 后自動封禁。

問題2:策略設置為1分鐘內失敗兩次,封禁ip。但通過日志發現,暴力破解也修改了策略,每分鐘嘗試1次ssh連接,這樣導致該ip無法被封禁。

解決方法:

將findtime修改時間長一點,保證安全,例如:1小時,1天

findtime = 6000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89191.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

亞遠景科技助力長城汽車,開啟智能研發新征程

亞遠景科技助力長城汽車&#xff0c;開啟智能研發新征程在汽車智能化飛速發展的當下&#xff0c;軟件研發管理成為車企決勝未來的關鍵。近日&#xff0c;亞遠景科技胡浩老師應邀為長城汽車開展了一場主題深刻且極具實用價值的培訓。本次培訓聚焦軟件研發管理導論 - 建立機器學習…

圖算法在前端的復雜交互

引言 圖算法是處理復雜關系和交互的強大工具&#xff0c;在前端開發中有著廣泛應用。從社交網絡的推薦系統到流程圖編輯器的路徑優化&#xff0c;再到權限依賴的拓撲排序&#xff0c;圖算法能夠高效解決數據之間的復雜關聯問題。隨著 Web 應用交互復雜度的增加&#xff0c;如實…

Prometheus Operator:Kubernetes 監控自動化實踐

在云原生時代&#xff0c;Kubernetes 已成為容器編排的事實標準。然而&#xff0c;在高度動態的 Kubernetes 環境中&#xff0c;傳統的監控工具往往難以跟上服務的快速變化。Prometheus Operator 應運而生&#xff0c;它將 Prometheus 及其生態系統與 Kubernetes 深度融合&…

一種融合人工智能與圖像處理的發票OCR技術,將人力從繁瑣的票據處理中解放

在數字化浪潮席卷全球的今天&#xff0c;發票OCR技術正悄然改變著企業財務流程的運作模式。這項融合了人工智能與圖像處理的前沿技術&#xff0c;已成為財務自動化不可或缺的核心引擎。核心技術&#xff1a;OCR驅動的智能識別引擎發票OCR技術的核心在于光學字符識別&#xff08…

時空大數據:數字時代的“時空羅盤“

引言&#xff1a;為何需要“時空大數據”&#xff1f;“大數據”早已成為熱詞&#xff0c;但“時空大數據”的提出卻暗含深刻邏輯。中國工程院王家耀院士指出&#xff0c;早期社會存在三大認知局限&#xff1a;過度關注商業大數據而忽視科學決策需求&#xff1b;忽視數據的時空…

PySide筆記之信號連接信號

PySide筆記之信號連接信號code review! 在 PySide6&#xff08;以及 Qt 的其他綁定&#xff0c;如 PyQt&#xff09;中&#xff0c;信號可以連接到信號。也就是說&#xff0c;可以把一個信號的發射&#xff0c;作為另一個信號的觸發條件。這樣做的效果是&#xff1a;當第一個信…

Linux操作系統之線程:線程概念

目錄 前言&#xff1a; 一、進程與線程 二、線程初體驗 三、分頁式存儲管理初談 總結&#xff1a; 前言&#xff1a; 大家好啊&#xff0c;今天我們就要開始翻閱我們linux操作系統的另外一座大山&#xff1a;線程了。 對于線程&#xff0c;大體結構上我們是劃分為兩部分…

windows利用wsl安裝qemu

首先需要安裝wsl,然后在swl中啟動一個子系統。這里我啟動一個ubuntu22.04。 接下來的操作全部為在子系統中的操作。 檢查虛擬化 在開始安裝之前,讓我們檢查一下你的機器是否支持虛擬化。 要做到這一點,請使用以下命令: sean@DESKTOP-PPNPJJ3:~$ LC_ALL=C lscpu | grep …

如何使用 OpenCV 打開指定攝像頭

在計算機視覺應用中&#xff0c;經常需要從特定的攝像頭設備獲取視頻流。例如&#xff0c;在多攝像頭環境中&#xff0c;當使用 OpenCV 的 cv::VideoCapture 類打開攝像頭時&#xff0c;如果不指定攝像頭的 ID&#xff0c;可能會隨機打開系統中的某個攝像頭&#xff0c;或者按照…

JAVA面試寶典 -《分布式ID生成器:Snowflake優化變種》

&#x1f680; 分布式ID生成器&#xff1a;Snowflake優化變種 一場訂單高峰&#xff0c;一次鏈路追蹤&#xff0c;一條消息投遞…你是否想過&#xff0c;它們背后都依賴著一個“低調卻關鍵”的存在——唯一ID。本文將帶你深入理解分布式ID生成器的核心原理與工程實踐&#xff0…

蘋果的機器學習框架將支持英偉達的CUDA平臺

蘋果專為Apple Silicon設計的MLX機器學習框架即將迎來CUDA后端支持&#xff0c;這意義重大。原因如下。 這項開發工作由GitHub開發者zcbenz主導&#xff08;據AppleInsider報道&#xff09;&#xff0c;他于數月前開始構建CUDA支持的原型。此后他將項目拆分為多個模塊&#xff…

golang語法-----變量、常量

變量1、聲明與初始化&#xff08;1&#xff09;標準聲明 (先聲明&#xff0c;后賦值)var age int // 聲明一個 int 類型的變量 age&#xff0c;此時 age 的值是 0 fmt.Println(age) // 輸出: 0age 30 // 給 age 賦值 fmt.Println(age) // 輸出: 30//int 的零…

Jenkins+Docker(docker-compose、Dockerfile)+Gitee實現自動化部署

項目目錄結構 project-root/ ├── pom.xml ├── docker │ ├── copy.sh │ ├── file │ │ ├── jar │ │ │ └── 存放執行copy.sh以后jar包的位置 │ │ └── Dockerfile │ └── docker-compose.yml ├── docker-only-test │ ├─…

TASK01【datawhale組隊學習】地瓜機器人具身智能概述

https://github.com/datawhalechina/ai-hardware-robotics 參考資料地址 具身智能&#xff08;Embodied AI&#xff09; 具身智能 智能的大腦 行動的身體。 比例&#xff08;Proportional&#xff09;、積分&#xff08;Integral&#xff09;、微分&#xff08;Derivative&a…

uni-app 配置華為離線推送流程

1、首先需要創建一個華為開發者賬號&#xff0c;我這個是個人開發賬號 申請開發者賬號 2、去AppGallery Connect登陸我們剛剛創建好的賬號&#xff0c;點擊頁面的APP進入到如下3 AppGallery Connect ????? ?3、在AppGallery Connect 網站中創建一個 Android應用、點擊…

當下主流攝像頭及其核心參數詳解

&#x1f4d6; 推薦閱讀&#xff1a;《Yocto項目實戰教程:高效定制嵌入式Linux系統》 &#x1f3a5; 更多學習視頻請關注 B 站&#xff1a;嵌入式Jerry 當下主流攝像頭及其核心參數詳解 一、攝像頭發展概述 攝像頭作為現代智能設備&#xff08;如手機、安防、車載、工業等&am…

下載了docker但是VirtualBox突然啟動不了了

今天下docker后發現 eNSP 路由器&#xff0c;防火墻啟動不了了去virtualbox檢查的時候發現無法啟動&#xff1a;報錯&#xff1a;不能為虛擬電腦 AR_Base 打開一個新任務.Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT).返回代碼: E_F…

C++11之lambda表達式與包裝器

lambda與包裝器lambda語法捕捉列表lambda的應用lambda的原理包裝器functionbindlambda語法 lambda 表達式本質是?個匿名函數對象&#xff0c;跟普通函數不同的是他可以定義在函數內部。 lambda 表達式語法使?層??沒有類型&#xff0c;所以我們?般是?auto或者模板參數定義…

有痛呻吟!!!

XiTuJueJin:YYDS 分盤 有些平臺吃相太難看&#xff0c;同樣的文章&#xff0c;我還先選擇現在這里發布&#xff0c;TMD. 莫名其妙將我的文章設置為僅VIP可見&#xff0c;還是今天才發現&#xff0c;之前只是將一兩篇設置為僅VIP可見&#xff0c;今天突然發現這種標識的都自動…

2025年7-9月高含金量數學建模競賽清單

2025年7-9月高含金量數學建模競賽 ——“高教社杯”國賽 & “華為杯”研賽作為過來人&#xff0c;真心覺得參加數學建模比賽是我本科階段做的最值的事之一。 它鍛煉的那種把實際問題轉化成模型求解的思維&#xff0c;對做研究、寫論文甚至以后工作都幫助很大。我當時就是靠…