搭建自己的WEB應用防火墻

搭建自己的WEB應用防火墻

之前給客戶搭建的網站服務近期頻繁遭受惡意掃描、暴力破解攻擊,日志里記錄著各種奇葩的請求地址,導致Tomcat線程資源耗盡,最終nginx報504(網關超時),在服務器上curl本地請求依然卡死,即讓網站無法正常訪問,也存在著巨大的安全隱患。奈何沒米買WAF防火墻,咱只能發揮老一輩精神擼起袖子自己干,我決定在服務器上搭建 fail2ban 安全工具!!!

名稱版本備注
操作系統CentOS 7.9
fail2ban0.10.2一個用于阻止暴力破解攻擊的安全工具
nginx1.6.3代理訪問服務,域名端口轉發、靜態資源和證書等
tomcat8.0.53網站實際部署的應用服務器

一、安裝 fail2ban

  1. 安裝 EPEL 源

    sudo yum install epel-release -y
    

    fail2ban 在 CentOS 默認源中不包含,需要添加 EPEL 源。

  2. 安裝 fail2ban

    sudo yum install fail2ban -y
    

    安裝很簡單,完成后系統會自動啟動和添加 fail2ban 相關服務及配置文件。

二、配置監控策略和過濾器

  1. 復制配置文件模板
    安裝后有默認主配置文件 /etc/fail2ban/jail.conf,復制一份到 jail.local,避免直接修改官方配置文件,便于后續更新。

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. 配置 jail.local 文件

    sudo vi /etc/fail2ban/jail.local
    

    jail.local作為用戶自定義的本地配置文件,用來覆蓋jail.conf的設置。Faile2ban會優先讀取并保留這個文件,Fail2ban升級時也不會被覆蓋。
    示例,我希望監控Tomcat服務,配置如下:

    [tomcat-access]
    enabled = true
    filter = tomcat-access
    logpath = /opt/tomcat/logs/localhost_access_log.*.txt
    maxretry = 5
    findtime = 300
    bantime = 3600
    backend = auto
    action = iptables-multiport[name=tomcat, port="80,443", protocol=tcp]
    

    參數說明:

    屬性說明
    enabled啟用該規則,true啟用,false禁用或者注釋該屬性。
    filter指定使用哪個過濾器定義文件,對應文件名前綴。
    logpath指定需要監控的日志路徑,可以使用通配符(例如按日期命名的日志文件)。Fail2Ban 會自動掃描這些文件并實時讀取新增日志。
    maxretry在 findtime 指定的時間段內(例如 5 分鐘),同一個 IP 如果觸發了 failregex 規則 5 次,就會被封禁。
    findtime監控時間窗口,單位為秒。表示 Fail2Ban 會在過去 300 秒(即 5 分鐘)內累計每個 IP 的違規次數。
    bantime封禁時間,單位為秒(這里是 1 小時)。一個 IP 被封后,在 bantime 時間結束前不能再次訪問。可設置為:-1 永久封禁;0 不封 IP,但會執行其他 action(如發郵件)。
    action指定封禁方式和封禁哪些端口及協議。iptables-multiport 是 Fail2Ban 提供的一個內置 action 模板,表示用 iptables 拒絕多個端口的訪問。
  3. 配置攔截器filter

    sudo vi /etc/fail2ban/filter.d/tomcat-access.conf
    

    前面介紹的jail.local是用來配置應用場景,而filter是用來定義攔截規則。可以理解為:

    • Filter = 你想攔截什么?(匹配什么日志內容)
    • Jail = 你在哪兒攔截?多久內攔截?封多久?怎么封?
      兩者配合使用,才能讓 Fail2Ban 正常工作。
      示例,我希望攔截非法訪問(匹配404、嘗試非法路徑、異常請求等等):
    [Definition]
    failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404^<HOST> -.*"(GET|POST).*wp-login.php.*HTTP.*"^<HOST> -.*"(GET|POST).*\.env.*HTTP.*"^<HOST> -.*"(GET|POST).*\.git.*HTTP.*"
    ignoreregex =
    

    參數說明:

    屬性說明
    Definition這是 Fail2Ban 規則文件的標準節名,表示你要定義一個“過濾器規則”。
    failregex核心正則表達式,用于匹配目標日志文件中可疑/惡意行為的日志行。每行一個正則表達式;關鍵是識別出 IP 地址(用 占位);一旦匹配,就會記錄這個 IP 的一次“違規行為”;如果同一個 IP 在 jail 設定的 findtime 時間內達到 maxretry 次數,就觸發封禁。
    ignoreregex這里你可以寫入要排除的正則表達式。如果某些請求雖然匹配 failregex,但你認為是“白名單”,可以寫在這里;它會被優先執行;通常為空即可。

    failregex正則表達式詳解,以上面示例說明如下:

    ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
    

    匹配如:
    192.168.1.100 - - [時間] “GET /test.php HTTP/1.1” 404,表示這個 IP 請求了一個不存在的路徑(404)。

    ^<HOST> -.*"(GET|POST).*wp-login.php.*HTTP.*"
    

    匹配 WordPress 登錄頁面攻擊(即使你不用 WordPress,也有很多掃描器會試圖訪問)。

    	^<HOST> -.*"(GET|POST).*\.env.*HTTP.*"
    

    .env 文件包含敏感環境變量,攻擊者掃描時常用路徑。

    ^<HOST> -.*"(GET|POST).*\.git.*HTTP.*"
    

    .git 被誤暴露時會泄露源碼,掃描器會嘗試訪問。

    <HOST>
    

    這是 Fail2Ban 特定的占位符,代表被攔截 IP 的位置。它告訴 Fail2Ban “從這部分提取 IP 地址”,并用于計數和封禁。

    例如日志文件內容如下:

    192.168.1.10 - - [24/Jun/2025:11:03:01 +0800] "GET /.env HTTP/1.1" 404 987
    

    Fail2Ban會提取 192.168.1.10,作為封禁目標。

    這里只是舉了一個簡單示例,還有很多攔截器配置內容,大家可以根據需要防護的內容去配置,具體配置內容可以搜索或AI詢問即可。

三、配置 SSH 防護

  1. 啟用 SSH 保護
    在 jail.local 文件中找到 [sshd] 部分,設置 enabled = true
  2. 自定義 SSH 端口防護(如果更改默認端口)
    若服務器 SSH 端口非默認 22,需添加以下內容:
    [sshd]
    port = 2222
    
    將 2222 替換為實際端口號。

四、啟動與管理

  1. 啟動 fail2ban

    sudo systemctl start fail2ban
    

    安裝完成系統已經自動啟動。

  2. 設置開機自啟

    sudo systemctl enable fail2ban
    
  3. 重啟服務

     sudo systemctl restart fail2ban
    

    每次修改配置后需要重啟生效。

  4. 查看狀態

    sudo fail2ban-client status
    

    可以查看當前防護攔截器的列表。

  5. 查看攔截日志

    sudo fail2ban-client status [攔截器名稱]
    

    例如:

    sudo fail2ban-client status tomcat-access
    

    返回結果如下:

    Status for the jail: tomcat-access
    |- Filter
    |  |- Currently failed:	0
    |  |- Total failed:	0
    |  `- File list:	/opt/tomcat/logs/localhost_access_log.2024-08-23.txt /opt/tomcat/logs/localhost_access_log.2025-06-02.txt 此處省略掉若干文件名稱......
    `- Actions|- Currently banned:	0|- Total banned:	0`- Banned IP list:	
    

    參數說明:

    屬性說明
    Status for the jail顯示當前你查看的是名為 tomcat-access 的 jail(監控規則塊)。
    Currently failed當前時間窗口(findtime,如 300 秒)內,有“多少個 IP 正在違反規則”。這表示當前沒有 IP 正在被 Fail2Ban 判斷為惡意(匹配到 failregex)。
    Total failed自 Fail2Ban 啟動以來,這個 jail 觸發過多少次 failregex。為 0 表示從未匹配成功,注意檢查:1.failregex 正則沒匹配到日志內容;2.日志路徑不對;3.日志格式與正則不符;4.服務本身沒有被攻擊。
    File listFail2Ban 正在讀取并監控的日志文件列表。在你的配置中,它包括多個 localhost_access_log.YYYY-MM-DD.txt 文件(Tomcat 的訪問日志),用于分析是否存在異常訪問行為。
    Currently failed當前時間窗口(findtime,如 300 秒)內,有“多少個 IP 正在違反規則”。這表示當前沒有 IP 正在被 Fail2Ban 判斷為惡意(匹配到 failregex)。
    Currently banned當前被封禁的 IP 數量為 0。說明沒有 IP 正在被防火墻屏蔽。
    Total banned歷史上這個 jail 封過多少 IP。0 表示你這條規則還沒有成功攔過任何人。
    Banned IP list當前封禁列表。為空表示沒有 IP 被 ban。

五、進階配置

  1. 配置郵件報警
    編輯 jail.local 文件,添加以下內容:

    destemail = your_email@example.com
    sender = fail2ban@example.com
    mta = sendmail
    action = %(action_mwl)s
    

    替換為實際郵箱地址,并確保郵件服務正常運行。

  2. 添加自定義過濾規則
    /etc/fail2ban/filter.d/ 目錄下創建自定義過濾文件,如 custom-sshd.conf,編寫正則表達式匹配日志中的攻擊行為。

六、注意事項與難點

  1. 文件權限
    配置文件權限不要過于開放,建議保持默認權限,避免安全風險。
  2. 日志路徑準確性
    確保 fail2ban 配置的日志路徑與實際服務日志路徑一致,否則無法正確識別攻擊。
  3. 誤封問題
    合理設置參數,避免因網絡波動等正常情況導致自己被誤封,可設置白名單:
    [sshd]
    ignoreip = 192.168.1.100 10.0.0.0/24
    

七、下一步思考

目前配置已有效抵御暴力破解攻擊,但還可以進一步完善:

  1. 集成更多服務防護規則,如 Apache、Nginx 等 Web 服務。
  2. 探索與云防火墻聯動,實現更高級的防護策略。
  3. 定期分析 fail2ban 日志,優化過濾規則,提升防護精準度。

通過在 CentOS 7 上部署 fail2ban,服務器的安全防線得到了顯著加強,惡意攻擊行為得到了有效遏制。后續會持續優化配置,構建更穩固的安全體系。

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

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

相關文章

MySQL:CRUD操作

目錄 XML模版一、結果返回集二、查詢三、查詢詳情四、新增4.1 不含逗號4.1 含逗號 五、修改5.1 不含逗號5.2 含逗號 六、刪除 XML模版 xml <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3…

智慧園區綜合管理平臺:提升園區運營效能的核心利器

在數字化浪潮席卷各個領域的當下&#xff0c;智慧園區的建設成為了推動產業升級、提升管理效率和服務質量的關鍵舉措。而綜合管理平臺作為智慧園區的 “大腦”&#xff0c;整合了園區運營的各類功能&#xff0c;為園區管理者和企業提供了全方位的支持。本文將基于一份智慧園區功…

碰一碰發視頻源碼搭建,支持OEM

在數字化生活日益普及的今天&#xff0c;便捷的信息傳輸方式成為用戶的迫切需求。“碰一碰發視頻” 功能憑借其新穎的交互體驗和高效的數據傳輸特性&#xff0c;在社交分享、文件傳輸等場景中備受青睞。本文將深入探討碰一碰發視頻源碼搭建的定制化開發流程&#xff0c;涵蓋核心…

Walrus為數據存儲帶來可編程性

要點總結 Walrus 是下一代去中心化存儲協議&#xff0c;旨在突破傳統中心化云存儲的局限&#xff0c;如高昂成本、單點故障、審查和隱私風險等&#xff0c;同時相較于其他去中心化存儲系統也做出了諸多創新&#xff0c;尤其是在可編程性與性能上的提升。“blob” 即 Binary La…

React:利用計算屬性名特點更新表單值

需求&#xff1a;三個input框&#xff0c;在input框輸入時候&#xff0c;獲取最新值&#xff0c;進行數據更新 思路&#xff1a;name屬性的變量設置的和表單的變量一樣&#xff0c;方便通過name屬性更新值 function TenantManage() {const [formData, setFormData] useState…

【軟考高項論文】論信息系統項目的范圍管理

摘要 在信息系統項目管理里&#xff0c;范圍管理極為關鍵。有效的范圍管理可保障項目按時、按質、按量完成&#xff0c;避免變更帶來的混亂與成本超支。本文結合作者參與的一個 2024 年 3 月啟動的信息系統項目&#xff0c;詳細闡述項目范圍管理的過程&#xff0c;包括范圍規劃…

蓋雅工場 2025 香港 SAP NOW 大會深度解析:AI 重構亞太勞動力管理數字化生態

一、前沿技術亮相&#xff1a;AI 驅動人力資源數字化轉型全景展示 在 6 月 13 日舉辦的 2025 香港 SAP NOW 大會上&#xff0c;亞太勞動力管理領軍企業蓋雅工場&#xff08;GaiaWorks&#xff09;以「AI 勞動力管理」為核心&#xff0c;通過主題演講與沉浸式展臺演示&#xf…

Latent Diffusion中VAE損失函數源碼解讀及對損失函數的理解

最近因為工作需求&#xff0c;接觸了Latent Diffusion中VAE訓練的相關代碼&#xff0c;其中損失函數是由名為LPIPSWithDiscriminator的類進行計算的&#xff0c;包括像素級別的重建損失&#xff08;rec_loss&#xff09;、感知損失&#xff08;p_loss&#xff09;和基于判別器&…

MIT 6.824學習心得(1) 淺談分布式系統概論與MapReduce

一個月前機緣巧合&#xff0c;有朋友向我推薦了麻省理工學院非常著名的分布式系統課程MIT 6.824&#xff0c;是由世界五大黑客之一&#xff0c;蠕蟲病毒之父Robert Morris教授進行授課。由于我自己也在做基于分布式微服務架構的業務項目&#xff0c;所以對構建分布式系統這個課…

PCL點云庫入門(第21講)——PCL庫點云特征之RSD特征描述Radius-based Surface Descriptor(RSD)

一、算法原理 RSD: Radius-based Surface Descriptor由 Marton Zsolt et al. 于 2010 年提出&#xff0c;主要用于 點云中物體的幾何形狀識別&#xff08;如球形、柱面、平面等&#xff09;&#xff0c;廣泛用于機器人抓取、點云分割和物體識別等任務中。 1.1、RSD 特征的核心…

zookeeper Curator(4):分布式鎖

文章目錄 分布式鎖分布式鎖的實現zookeeper 分布式鎖原理Curator 實現分布式鎖API1. InterProcessMutex&#xff08;分布式可重入互斥鎖&#xff09;2. InterProcessSemaphoreMutex&#xff08;分布式非可重入互斥鎖&#xff09;3. InterProcessReadWriteLock&#xff08;分布式…

設置方法區內存的大小

方法區內存配置 方法區&#xff08;Method Area&#xff09;是JVM內存模型的一部分&#xff0c;用于存儲類信息、常量、靜態變量等數據。在HotSpot虛擬機中&#xff0c;方法區的具體實現為永久代&#xff08;PermGen&#xff09;或元空間&#xff08;Metaspace&#xff09;&am…

用Flink打造實時數倉:生產環境中的“坑”與“解藥”

目錄 一、實時數倉的“野心”與“現實” 二、數據采集與接入:別讓“源頭”卡脖子 2.1 問題1:Kafka數據亂序與延遲 2.2 問題2:MySQL CDC數據同步異常 三、數據處理與計算:別讓“算力”成瓶頸 3.1 問題3:多表Join性能低下 3.2 問題4:窗口計算觸發延遲 四、狀態管理與…

linux 下 Doris 單點部署

目錄 1. Doris 下載 2. 環境準備 2.1 Linux 操作系統版本需求 2.2 部署依賴 3. Doris 部署 3.1 修改系統配置 3.1.1 修改系統句柄數 3.1.2 關閉swap分區 3.1.3 修改最大內存映射區域數量 3.2 開放端口 3.3 fe 部署 3.4 be 部署 3.5 be添加到Doris集群 4 驗證 4.…

mysql 小版本升級實戰分享

環境說明 當前版本:5.6.51 升級目標版本 mysql 5.7.41 服務啟停通過systemd管理 升級準備&#xff1a; 環境檢查 首先查看當前MySQL的版本信息&#xff0c;執行命令mysql -V&#xff0c;如圖&#xff1a; 備份數據 備份所有數據庫&#xff1a; 當數據量不是特別大的時候…

Python Ai語音識別教程

語音識別是將人類語音轉換為文本的技術&#xff0c;在現代應用中非常有用。本教程將介紹如何使用Python實現基本的AI語音識別功能。 一、文字轉語音 #文字轉語音 #安裝第三方庫 pip install pyttsx3 #導包 &#xff1a; import pyttsx3import pyttsx3#創建語音引擎 a1 pytts…

Day11 制作窗口

文章目錄 1. 顯示窗口&#xff08;harib08d&#xff09;2. 消除閃爍1&#xff08;harib08g&#xff09;3. 消除閃爍2&#xff08;harib08h&#xff09; 本章的前三節做了如下修改&#xff1a; 解決了鼠標無法隱藏在屏幕右側和下側的問題。當鼠標隱藏在右側時會在屏幕最左側產生…

python+uniapp基于微信小程序蜀味道江湖餐飲管理系統nodejs+java

文章目錄 具體實現截圖本項目支持的技術路線源碼獲取詳細視頻演示&#xff1a;文章底部獲取博主聯系方式&#xff01;&#xff01;&#xff01;&#xff01;本系統開發思路進度安排及各階段主要任務java類核心代碼部分展示主要參考文獻&#xff1a;源碼獲取/詳細視頻演示 ##項目…

postgresql增量備份系列二 pg_probackup

已經很久沒有發文章了,主要是最近工作上的內容都不適合發文章公開。可能往后文章發表也不這么頻繁了,不過大家有問題我們可以交流。之前有寫過PG增量備份的其他工具使用方法,pg_probackup也是應用比較多的PG備份工具。 一. pg_probackup pg_probackup 是一個用于管理 Postg…

云手機主要是指什么?

云手機是指一種可以運行在云服務器中的手機&#xff0c;主要是將云計算技術運用于網絡終端服務&#xff0c;通過云服務器來實現云服務的手機&#xff0c;也是一款深度結合了網絡服務的手機&#xff0c;通過自帶的系統和網絡終端可以通過網絡實現眾多功能。 那么&#xff0c;下面…