[linux][shell]通過分析 Nginx 的訪問日志,檢測異常 IP 地址并使用iptables 將其封禁

?????????這段腳本的作用是通過分析 Nginx 的訪問日志,檢測異常的 IP 地址,并使用 iptables 封禁這些 IP。

#!/bin/bash# 配置變量
LOG_FILE="/usr/local/nginx/logs/access.log"
THRESHOLD=10
DROP_LOG_FILE="/tmp/drop_ip.log"
DATE=$(date +"%d/%b/%Y:%H:%M")# 檢測異常 IP
ABNORMAL_IP=$(tail -n5000 "$LOG_FILE" | grep "$DATE" | awk '{a[$1]++} END {for(i in a) if(a[i]>'$THRESHOLD') print i}')# 封禁異常 IP
for IP in $ABNORMAL_IP; do# 檢查 IP 是否已經被封禁if ! iptables -C INPUT -s "$IP" -j DROP &> /dev/null; then# 封禁 IPiptables -I INPUT -s "$IP" -j DROPecho "$(date +'%F_%T') $IP - Access count exceeded threshold ($THRESHOLD)" >> "$DROP_LOG_FILE"fi
done

以下是腳本的詳細解析和一些需要注意的地方:

腳本功能

  1. 配置變量

    • LOG_FILE:指定 Nginx 的訪問日志文件路徑。

    • THRESHOLD:設置訪問次數的閾值,超過此值的 IP 將被認定為異常。

    • DROP_LOG_FILE:記錄被封禁 IP 的日志文件路徑。

    • DATE:獲取當前時間,格式為 日/月/年:時:分,用于篩選日志中當前時間的記錄。

  2. 檢測異常 IP

    • 使用 tail -n5000 "$LOG_FILE" 獲取日志文件的最后 5000 行。

    • 使用 grep "$DATE" 篩選出當前時間的記錄。

    • 使用 awk 統計每個 IP 的訪問次數,并篩選出訪問次數超過閾值的 IP。

  3. 封禁異常 IP

    • 遍歷檢測到的異常 IP。

    • 使用 iptables -C INPUT -s "$IP" -j DROP 檢查該 IP 是否已經被封禁。

    • 如果未被封禁,則使用 iptables -I INPUT -s "$IP" -j DROP 將其封禁,并將封禁信息記錄到 DROP_LOG_FILE 中。

注意事項

  1. 日志格式依賴

    • 腳本假設 Nginx 的日志格式是標準的 Combined Log Format,其中第一個字段是 IP 地址。如果日志格式不同,需要調整 awk 的字段索引。

  2. 時間格式匹配

    • DATE 的格式需要與 Nginx 日志中的時間格式完全匹配。如果日志中的時間格式不同(例如包含毫秒或時區信息),腳本可能無法正確篩選記錄。

  3. 權限問題

    • 腳本需要以 root 用戶運行,因為 iptables 命令需要管理員權限。

  4. 性能問題

    • 如果日志文件非常大,tail -n5000grep 操作可能會消耗較多資源。可以考慮優化日志處理方式,例如定期清理日志或使用更高效的數據處理工具。

  5. 誤封風險

    • 腳本簡單地根據訪問次數封禁 IP,可能會誤封正常用戶(例如爬蟲或高頻訪問的合法用戶)。建議結合其他檢測機制(如訪問頻率、請求類型等)來提高準確性。

  6. 日志記錄

    • 封禁日志記錄到 /tmp/drop_ip.log,但 /tmp 目錄可能會被定期清理。建議將日志存儲到更安全的路徑,例如 /var/log

改進建議

  • 日志格式檢查:在腳本開頭檢查日志文件是否存在以及是否符合預期格式。

  • 動態閾值:根據流量情況動態調整閾值,而不是固定值。

  • 白名單機制:維護一個白名單,避免誤封重要 IP。

  • 持久化封禁規則:使用 iptables-saveiptables-restore 保存和恢復規則,避免系統重啟后規則丟失。

  • 日志清理:定期清理封禁日志文件,避免文件過大。

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

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

相關文章

stm32cube ide如何將工具鏈替換成arm-none-eabi-gcc

在 STM32Cube IDE 中替換工具鏈為GNU Arm Embedded Toolchain (arm-none-eabi-gcc),可按以下步驟操作: 1. 檢查是否已安裝工具鏈 首先確認系統中是否已安裝 arm-none-eabi-gcc: Windows:檢查環境變量 PATH 中是否包含工具鏈路徑…

Linux 系統 /etc/ 配置

在Linux系統中,/etc/ 目錄是系統配置文件的核心存放位置,包含了各種系統服務、應用程序和硬件的配置信息。以下是該目錄下常見的重要配置文件和子目錄: 核心系統配置文件 /etc/hostname 系統主機名配置,直接決定當前系統的名稱。/…

【跟著PMP學習項目管理】項目管理 之 成本管理知識點

目錄 一、估算成本 1、知識點匯總 2、輸入 3、工具 4、輸出 二、預算成本 1、知識點匯總 2、輸入 3、工具 4、輸出 三、控制成本 1、知識點匯總 2、輸入 3、工具 4、輸出 一、估算成本 1、知識點匯總 1) 估算工具的用法 2、輸入 范圍基準、人力資源計劃、項…

TCP相關實驗

目錄 TCP相關實驗 理解CLOSE_WAIT狀態 理解???TIME_WAIT狀態 解決TIME_WAIT狀態引起的bind失敗的方法 理解listen的第二個參數 ?編輯 使用Wireshark分析TCP通信流程 TCP與UDP TCP與UDP對比 用UDP實現可靠傳輸(經典面試題) TCP相關實驗 理解…

Spring Boot項目初始化:官方與阿里云服務地址對比指南

服務提供商 官方(start.spring.io Spring) 官方提供的服務,由Pivotal(VMware)維護,是標準的初始化工具。 阿里云(start.aliyun.com) 阿里云提供的國內鏡像服務,針對中國開…

創客匠人創始人IP案例:從個人品牌到企業增長的全鏈路拆解

認知破局:為什么創客匠人創始人IP能撬動企業增長?在知識付費工具競爭同質化的當下,創客匠人創始人老蔣以“IP變現領軍人”的IP形象,為企業打開了差異化增長通道。當同行還在比拼“功能數量”時,老蔣通過《領導者請停止…

UVC(USB Video Class,USB 視頻類)協議

UVC(USB Video Class,USB 視頻類)協議并非專門僅用于相機,但其核心應用場景集中在視頻采集設備,相機是最典型的代表。其適用設備除了常見的 USB 相機(包括 webcam、工業相機、監控攝像頭等)&…

如何使用 eBPF 監控 Linux 內存情況:Linux 內存調優之 eBPF 內存監控分析

寫在前面 博文內容整理自 《BPF Performance Tools》 書中 內存部分對書中提到BPF工具配合實際Demo進行說明,以及一些變體的輸出涉及下面一些內存問題的 BPF 觀測 Demo:為什么進程的物理內存占用(RSS)不停增長?哪些代碼路徑會導致缺頁錯誤的發生,缺頁錯誤來自哪些文件?大頁的…

SQL 表結構轉 Go、Java、TS 自定義實體類,支持自編模板

SQL 表結構一鍵轉自定義模型,支持 Golang Template 自由編寫! 有沒有想過 —— 一份 SQL 表結構,不止能轉成 Java 實體類、Go struct,甚至可以: ? 一鍵生成 TypeScript 接口? 輸出 Protobuf 定義文件? 輸出任意你…

新型BERT勒索軟件肆虐:多線程攻擊同時針對Windows、Linux及ESXi系統

趨勢科技安全分析師發現,一個代號為BERT(內部追蹤名Water Pombero)的新型勒索軟件組織正在亞洲、歐洲和美國展開多線程攻擊。該組織主要針對醫療保健、科技和會展服務行業,其活動范圍顯示其正成為勒索軟件生態中的新興威脅力量。攻…

Three.js搭建小米SU7三維汽車實戰(1)搭建開發環境

1.基本概念 ![](https://i-blog.csdnimg.cn/img_convert/a4676122e207e058f3a335df2c99d4f8.png)1) 場景 如何理解場景 場景就是一個三維的世界, 在這個世界中可以放置各種各樣的物體 可以理解成一個**空間**, 或者**容器** 2) 相機 如何理解相機 🤔**思考: *…

Selenium 原理【selenium】

Selenium 是什么?Selenium 是一個專門用于自動化操作網頁的工具集,它能夠模擬人類在瀏覽器中進行的各種操作,如點擊按鈕、填寫表單、滾動頁面等。借助 Selenium,開發者可以編寫腳本來控制瀏覽器,實現自動化測試、數據采…

【音視頻】HLS-m3u8協議介紹

參考文檔:https://datatracker.ietf.org/doc/html/rfc8216 一、m3u8協議概述 m3u8 協議是基于 M3U 格式擴展而來的一種多媒體播放列表協議,主要用于流媒體的索引和分發,尤其在 HLS(HTTP Live Streaming)技術中扮演核…

unity入門:動畫等不顯示問題——畫布設置

unity入門:動畫等不顯示問題——畫布設置動畫等不顯示問題大部分原因畫布Canvas總結動畫等不顯示問題大部分原因 1、畫布設置渲染模式不對,下文再講這個問題。 2、在層級雙擊動畫查看動畫大小,有些動畫創建完之后在場景大小實際很小需要在R…

【機器學習筆記 Ⅱ】3 前向傳播

前向傳播(Forward Propagation)實現詳解 前向傳播是神經網絡中數據從輸入層流向輸出層的過程,通過逐層計算每一層的輸出,最終得到預測結果。以下是其實現原理和步驟的完整解析:1. 前向傳播的核心步驟 (1) 線性變換&…

人體坐姿檢測系統開發實戰(YOLOv8+PyTorch+可視化)

本文將手把手教你構建智能坐姿檢測系統,結合目標檢測與姿態估計技術,實現不良坐姿的實時識別與預警 ### 一、項目背景與價值 現代人每天平均坐姿時間超過8小時,不良坐姿會導致: - 脊椎壓力增加300% - 頸椎病發病率提升45% - 腰椎間盤突出風險增加60% 本系統通過計算機…

卷積神經網絡經典架構演進

LeNet-5 網絡架構 #mermaid-svg-8VgsGVLusLXKY5lE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8VgsGVLusLXKY5lE .error-icon{fill:#552222;}#mermaid-svg-8VgsGVLusLXKY5lE .error-text{fill:#552222;stroke:#5…

mybatis/mybatis-plus添加數據,自增id的值為負數

1、問題概述?使用mybatis-plus的insert方法添加數據的時候,數據雖然添加成功了,但是返回值為false,提示添加失敗。當觀察數據的時候,發現數據的自增主鍵id的值盡然為-1,或者無規律的長串負數,如…

商業創業融資項目計劃書PPT模版

創業融資計劃書PPT模版,營銷模式分析PPT模版,創業計劃書PPT模版,互聯網電商創業推廣手冊PPT模版,商業項目計劃書PPT模版,高端商業計劃通用PPT模版,商業計劃書,科技商業PPT模版 商業創業融資項目…

新人如何入門學習 STM32?

作為一個在嵌入式領域摸爬滾打了近10年的老兵,看到這個問題時我的思緒瞬間回到了當年那個懵懂的自己。說實話,2014年那個夏天,24歲的我剛從機械專業畢業卻被調劑到了廈門某馬的電子部門,第一次聽到"STM32"這個詞的時候&…