用shell腳本實現自動監控并封禁連接數超過閾值的IP

寫一個 shell 腳本,創建腳本文件?/usr/local/bin/check_conn.sh

#!/bin/bash
if [[ $EUID -ne 0 ]]; thenecho "This script must be run as root." >&2exit 1
fi
# 連接數閾值
THRESHOLD=50# 白名單 IP(空格分隔)
WHITELIST_IPS="0.0.0.0 127.0.0.1"# 日志文件
ABUSE_LOG="/var/log/conn_abuse.log"# 封禁時間(秒)
BAN_TIME=86400# 獲取當前時間戳
NOW=$(date +%s)echo "[$(date '+%Y-%m-%d %H:%M:%S')] iptables 定時任務執行" >> "$ABUSE_LOG"# 統計連接數
netstat -ant | awk '{print $5}' | cut -d: -f1 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | \sort | uniq -c | sort -nr | while read count ip; doecho "$ip $count"# 過濾非法行或白名單 IP[[ ! "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] && continuefor white_ip in $WHITELIST_IPS; do[[ "$ip" == "$white_ip" ]] && continue 2done# 判斷是否超過閾值if [[ "$count" -gt "$THRESHOLD" ]]; then# 檢查是否已被封禁sudo iptables -L -n --line-numbers | grep "$ip"| grep DROP 2>/dev/nullif [[ $? -ne 0 ]]; thenecho "[$(date '+%Y-%m-%d %H:%M:%S')] Blocking $ip with $count connections" >> "$ABUSE_LOG"echo "----$ip--------$count"# 添加 iptables 封禁sudo iptables -I INPUT -s "$ip" -j DROP && echo "[debug]INPUT drop success for $ip" >> "$ABUSE_LOG"sudo iptables -I FORWARD -s "$ip" -j DROP && echo "[debug]FORWARD drop success for $ip" >> "$ABUSE_LOG"sudo iptables -I OUTPUT -d "$ip" -j DROP && echo "[debug]OUTPUT drop success for $ip" >> "$ABUSE_LOG"# 強制斷開現有連接(使用 conntrack 工具)if command -v conntrack &>/dev/null; thenconntrack -D -s "$ip" && echo "[debug]conntrack -D -s  $ip" >> "$ABUSE_LOG"conntrack -D -d "$ip" && echo "[debug]conntrack -D -d  $ip" >> "$ABUSE_LOG"fi# 設置定時任務自動解封echo "sudo iptables -D INPUT -s $ip -j DROP; sudo iptables -D FORWARD -s $ip -j DROP; sudo iptables -D OUTPUT -d $ip -j DROP" | \at NOW + $((BAN_TIME / 60)) minutes 2>/dev/nullfifi
done

配合 cron 定時執行這個腳本:

*/2 * * * * /usr/local/bin/check_conn.sh

?腳本功能介紹

  1. 定義變量:設置連接數閾值(200)、白名單IP、日志路徑和封禁時間(24小時)。

  2. 統計連接數:使用netstat獲取所有TCP連接,提取遠程IP并統計連接數。

  3. 過濾白名單和本地IP:跳過白名單中的IP,并檢查IP格式的有效性。

  4. 封禁處理:若IP連接數超過閾值且未被封禁,則通過iptables封禁,并記錄日志。

  5. 斷開現有連接:使用conntrack強制終止現有連接(如果可用)。

  6. 自動解封:使用at命令在封禁時間后移除iptables規則。

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

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

相關文章

VS 中Git 中本地提交完成,沒有推送,修改的內容如何還原

在 Visual Studio 中撤銷本地提交但未推送的修改,可以通過以下方法實現: 一、保留修改內容(僅撤銷提交記錄) 使用 git reset --soft 在 VS 的 Git 終端中執行: git reset --soft HEAD~1作用:撤銷最后一次提…

qt中的正則表達式

問題: 1.在文本中把dog替換成cat,但可能會把dog1替換成cat1,如果原本不想替換dog1,就會出現問題 2文本中想獲取某種以.txt為結尾的多有文本,普通的不能使用 3如果需要找到在不同的系統中尋找換行符,可以…

Linux命令-vim編輯

用vi或vim命令進入vim編輯器。 基礎: u 撤銷上一次操作。x剪切當前光標所在處的字符。yy復制當前行。dd剪切當前行。p粘貼剪貼板內容到光標下方。i切換到輸入模式,在光標當前位置開始輸入文本。:wq保存并退出Vim 編輯器。:q!不保存強制退出Vim 編輯器。 拓展: w光…

VS 基于git工程編譯版本自動添加版本號

目錄 概要 實現方案 概要 最近在用visual Studio 開發MFC項目時,需要在release版本編譯后的exe文件自動追加版本信息。 由于我們用的git工程管理,即需要基于最新的git 提交來打版本。 比如: MFCApplication_V1.0.2_9.exe 由于git 提交信…

nginx入門,部署靜態資源,反向代理,負載均衡使用

Nginx在linux上部署靜態資源 概念介紹 Nginx可以作為靜態web服務器來部署靜態資源。這里所說的靜態資源是指在服務端真實存在,并且能夠直接展示的一些文件,比如常見的html頁面、css文件、js文件、圖片、視頻等資源。 相對于Tomcat,Nginx處理…

【字節跳動AI論文】Seaweed-7B:視頻生成基礎模型的高成本效益培訓

摘要:本技術報告介紹了一種經濟有效的視頻生成基礎模型訓練策略。 我們提出了一種中等規模的研究模型,大約有70億個參數(7B),稱為Seaweed-7B,使用665,000個H100 GPU小時從頭開始訓練。 盡管使用適度的計算資…

Java單例模式:實現全局唯一對象的藝術

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 一、什么是單例模式? 單例模式(Singleton Pattern)是一種創建型設計模式,確保一個類只有一個實例&#xff0c…

Oracle 復制表結構(含索引、主鍵)操作指南

Oracle 復制表結構(含索引、主鍵)操作指南 1. 復制基礎表結構 -- 創建空表結構(不復制數據) CREATE TABLE new_table AS SELECT * FROM old_table WHERE 10;2. 復制主鍵約束 -- 查詢原表主鍵信息 SELECT constraint_name, co…

React 更新state中的對象

更新 state 中的對象 state 中可以保存任意類型的 JavaScript 值,包括對象。但是,你不應該直接修改存放在 React state 中的對象。相反,當你想要更新一個對象時,你需要創建一個新的對象(或者將其拷貝一份)…

基于 GoFrame 框架的電子郵件發送實踐:優勢、特色與經驗分享

1. 引言 如果你是一位有1-2年Go開發經驗的后端開發者,可能已經熟悉了Go語言在性能和并發上的天然優勢,也曾在項目中遇到過郵件發送的需求——無論是用戶注冊時的激活郵件、系統異常時的通知,還是營銷活動中的批量促銷郵件,郵件功…

AndroidStudio編譯報錯 Duplicate class kotlin

具體的編譯報錯信息如下: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) D…

后端面試問題收集以及答案精簡版

思路 不要問什么答什么 要學會擴充 比如問你go map的原理 map 是什么 數據結構,字典,k/v 結構map的應用場景有哪些 快速查找、計數器、配置管理、去重、緩存實現map有哪些限制 無序性、非線程安全的讀寫map的key的訪問 v: mp[key] v,ok : mp[key] for…

MicroPython 開發ESP32應用教程 之 I2S、INMP441音頻錄制、MAX98357A音頻播放、SD卡讀寫

本課程我們講解Micropython for ESP32 的i2s及其應用,比如INMP441音頻錄制、MAX98357A音頻播放等,還有SD卡的讀寫。 一、硬件準備 1、支持micropython的ESP32S3開發板 2、INMP441數字全向麥克風模塊 3、MAX98357A音頻播放模塊 4、SD卡模塊 5、面包板及…

UE5 物理模擬 與 觸發檢測

文章目錄 碰撞條件開啟模擬關閉模擬 多層級的MeshUE的BUG 觸發觸發條件 碰撞 條件 1必須有網格體組件 2網格體組件必須有網格,沒有網格雖然可以開啟物理模擬,但是不會有任何效果 注意開啟的模擬的網格體組件會計算自己和所有子網格的mesh范圍 3只有網格…

微信小程序 - swiper輪播圖

官方文檔&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html <swiper indicator-color"ivory" indicator-active-color"#d43c33" indicator-dots autoplay><swiper-item><image src"/images/banner…

深入探究C#官方MCP:開啟AI集成新時代

一、引言 在當今數字化時代&#xff0c;.NET 開發領域不斷演進&#xff0c;而 C# 官方 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;的出現&#xff0c;無疑為開發者們帶來了全新的機遇與挑戰。隨著人工智能技術的迅猛發展&#xff0c;將 AI…

二分查找法

使用二分查找法的前提&#xff1a;&#xff08;1&#xff09;數組為有序數組. &#xff08;2&#xff09;數組中無重復元素. 二分的兩種寫法&#xff1a; 方法一&#xff1a;[left&#xff0c;right] class Solution { public:int search(vector<int>& nums, int …

HarmonyOS:頁面滾動時標題懸浮、背景漸變

一、需求場景 進入到app首頁或者分頁列表首頁時&#xff0c;隨著頁面滾動&#xff0c;分類tab要求固定懸浮在頂部。進入到app首頁、者分頁列表首頁、商品詳情頁時&#xff0c;頁面滾動時&#xff0c;頂部導航欄&#xff08;菜單、標題&#xff09;背景漸變。 二、相關技術知識點…

鯤鵬+昇騰部署集群管理軟件GPUStack,兩臺服務器搭建雙節點集群【實戰詳細踩坑篇】

前期說明 配置&#xff1a;2臺鯤鵬32C2 2Atlas300I duo&#xff0c;之前看網上文檔&#xff0c;目前GPUstack只支持910B芯片&#xff0c;想嘗試一下能不能310P也部署試試&#xff0c;畢竟華為的集群軟件要收費。 系統&#xff1a;openEuler22.03-LTS 驅動&#xff1a;24.1.rc…

React中 點擊事件寫法 的注意(this、箭頭函數)

目錄 ?1、錯誤寫法?&#xff1a;onClick{this.acceptAlls()} ?2、正確寫法?&#xff1a;onClick{this.acceptAlls}&#xff08;不帶括號&#xff09; 總結 方案1&#xff1a;構造函數綁定 方案2&#xff1a;箭頭函數包裝方法&#xff08;更簡潔&#xff09; 方案3&am…