高效管理網絡段和端口集合的工具之ipset

目錄

1. 核心命令速查

2. 集合類型

3. 實戰案例:使用 ipset 封禁 IP

案例 1:基礎黑名單封禁(手動添加)

案例 2:自動過期和解封

案例 3:封禁 IP 和端口組合

案例 4:白名單模式

案例 5:自動化封禁(SSH 暴力破解)

案例 6:自動化封禁(Web 服務 CC 攻擊)

案例 7:屏蔽特定國家/地區的 IP 訪問

案例 8:動態域名白名單

4. ipset 規則持久化

方法一:使用ipset-service服務

1. 安裝與配置

2. 手動保存規則

3. 自動持久化配置

方法二:systemd自定義服務

1. 保存當前規則

2. 創建服務文件

3. 啟用服務

方法三:手動恢復(臨時/應急)

1. 導出規則

2. 重啟后恢復

保存 iptables 規則

6. 注意事項


ipset是Linux系統中一個強大的命令行工具,用于創建、維護和管理一組IP地址、端口號、MAC地址、網絡接口或其他網絡元素的集合(set)。它通過與防火墻系統(如iptables或nftables)集成,顯著提升規則管理的效率和性能。以下是基于其核心特性、功能及實戰案例的介紹:

1. 核心命令速查

先通過一個表格快速了解 ipset 的常用命令:

命令示例作用說明
ipset create blacklist hash:ip創建名為?blacklist,類型為?hash:ip?的集合
ipset add blacklist 192.168.2.100向?blacklist?集合添加一個 IP
ipset add blacklist 203.204.205.0/24向?blacklist?集合添加一個網段
ipset del blacklist 192.168.2.100從?blacklist?集合刪除一個 IP
ipset list blacklist查看?blacklist?集合的內容
ipset list查看所有集合
ipset flush blacklist清空?blacklist?集合中的所有條目
ipset destroy blacklist徹底銷毀?blacklist?集合
ipset save blacklist導出?blacklist?集合的內容
ipset restore -f ipset.txt從文件恢復集合內容

2. 集合類型

ipset 支持多種集合類型,以適應不同的匹配需求:

集合類型存儲內容適用場景
hash:ip單個 IP 地址封禁或允許特定的主機
hash:net網絡段(CIDR)封禁或允許整個網段
hash:ip,portIP 地址和端口號(如?192.168.8.1,80封禁或允許特定 IP 對特定端口的訪問
hash:net,port網絡段和端口號(如?203.8.100.0/24,443封禁或允許特定網段對特定端口的訪問
hash:ip,port,ipIP、端口、IP(三層結構)更復雜的匹配條件
hash:ip,markIP 和數據包標記與 iptables 的 MARK 動作結合使用
hash:macMAC 地址基于物理地址進行過濾
bitmap:ipIPv4 地址的位圖,范圍固定適用于較小的、連續的 IP 范圍
bitmap:port端口號的位圖適用于端口范圍
list:set集合的列表嵌套集合,將多個集合組合成一個更大的集合

3. 實戰案例:使用 ipset 封禁 IP

案例 1:基礎黑名單封禁(手動添加)

這是最直接的場景:手動將可疑 IP 加入黑名單并封禁。

# 1. 創建一個名為 `blacklist` 的 IP 集合,類型為 hash:ip
sudo ipset create blacklist hash:ip# 2. 添加一條 iptables 規則,拒絕所有來自 `blacklist` 集合中 IP 的輸入流量
sudo iptables -I INPUT -m set --match-set blacklist src -j DROP# 3. 現在,你可以向黑名單中添加 IP 了
sudo ipset add blacklist 192.168.8.100    # 添加單個 IP
sudo ipset add blacklist 200.10.100.0/24 # 添加整個網段# 4. (可選)檢查 blacklist 集合的內容
sudo ipset list blacklist

效果:所有來自?192.168.8.100?和?200.10.100.0/24?網段的流量將被服務器立即丟棄。

案例 2:自動過期和解封

對于臨時封禁(例如 SSH 密碼嘗試失敗多次),可以設置超時(timeout),讓 IP 自動從黑名單中移除。

# 1. 創建名為 `ssh-ban` 的集合,并設置默認超時時間為 1 小時 (3600 秒)
sudo ipset create ssh-ban hash:ip timeout 3600# 2. 設置 iptables 規則,對 SSH (22端口) 的訪問如果來自 `ssh-ban` 集合則拒絕
sudo iptables -I INPUT -p tcp --dport 22 -m set --match-set ssh-ban src -j DROP# 3. 當檢測到惡意嘗試時,添加 IP,并可以指定不同的超時時間
sudo ipset add ssh-ban 192.168.8.200       # 默認 1 小時后解封
sudo ipset add ssh-ban 198.168.100.55 timeout 7200 # 此 IP 2 小時 (7200秒) 后解封

注意:如果創建集合時沒有指定?timeout?參數,則集合中的條目不會自動過期

案例 3:封禁 IP 和端口組合

有時需要封禁某個 IP 對特定服務(端口)的訪問,但允許訪問其他服務。

# 1. 創建一個類型為 `hash:ip,port` 的集合,用于存儲 IP 和端口對
sudo ipset create service-abusers hash:ip,port# 2. 設置 iptables 規則,拒絕訪問 `service-abusers` 集合中定義的 IP 和端口組合
sudo iptables -I INPUT -m set --match-set service-abusers src,dst -j DROP# 3. 添加違規的 IP 和端口
sudo ipset add service-abusers 192.0.2.10,80    # 封禁該 IP 訪問 80 端口
sudo ipset add service-abusers 198.51.100.20,443 # 封禁該 IP 訪問 443 端口
sudo ipset add service-abusers 203.0.113.30,udp:53 # 封禁該 IP 訪問 UDP 53 端口

案例 4:白名單模式

ipset 也可以用于創建白名單,只允許特定集合中的 IP 訪問。

# 1. 創建一個名為 `whitelist` 的白名單集合,并添加允許的 IP
sudo ipset create whitelist hash:ip
sudo ipset add whitelist 192.0.2.1
sudo ipset add whitelist 203.0.113.5# 2. 設置 iptables 規則:**非白名單即拒絕**
# 注意這里的 `!` 表示取反
sudo iptables -I INPUT -m set ! --match-set whitelist src -j DROP

應用場景:嚴格限制訪問源,例如數據庫端口、管理后臺等。

案例 5:自動化封禁(SSH 暴力破解)

結合日志分析和 cron 定時任務,實現自動封禁 SSH 暴力破解的 IP。

#!/bin/bash
# 文件名: /root/ban_ssh_abuse.sh
# 監控 /var/log/secure(CentOS/RHEL)或 /var/log/auth.log(Debian/Ubuntu),將多次嘗試失敗的 IP 加入 ipsetLOG_FILE="/var/log/secure"
FAILED_THRESHOLD=5 # 失敗次數閾值
BAN_SET="ssh-ban"   # ipset 集合名,需要預先創建好(帶 timeout)# 分析過去一小時的日志,找出失敗次數超過閾值的 IP
grep "Failed password" "$LOG_FILE" | awk -v threshold="$FAILED_THRESHOLD" '
{# 提取 IP 地址(根據你的日志格式調整 awk 字段)if (match($0, /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)) {ip = substr($0, RSTART, RLENGTH)count[ip]++}
}
END {for (ip in count) {if (count[ip] > threshold) {print ip}}
}' | while read -r malicious_ip; do# 將惡意 IP 添加到 ipset 集合中ipset add "$BAN_SET" "$malicious_ip" 2>/dev/null && echo "[$(date)] Banned IP: $malicious_ip"
done

然后,使用?crontab -e?添加定時任務,每 5 分鐘運行一次此腳本:

*/5 * * * * /root/ban_ssh_abuse.sh

案例 6:自動化封禁(Web 服務 CC 攻擊)

類似地,可以監控 Nginx 或 Apache 日志,封禁請求頻率過高的 IP。

#!/bin/bash
# 文件名: /root/ban_http_abuse.shLOG_FILE="/var/log/nginx/access.log"
REQ_THRESHOLD=1000 # 一分鐘內請求數閾值
BAN_SET="http-ban"  # ipset 集合名# 分析上一分鐘的日志,統計每個 IP 的請求數
DATE=$(date -d '1 minute ago' +%d/%b/%Y:%H:%M)
grep "$DATE" "$LOG_FILE" | awk '{print $1}' | sort | uniq -c | sort -nr | \
while read -r count ip; doif [[ "$count" -gt "$REQ_THRESHOLD" ]]; thenipset add "$BAN_SET" "$ip" 2>/dev/null && echo "[$(date)] Banned IP: $ip (Requests: $count)"fi
done

同樣地,設置 cron 任務定時執行(例如每分鐘)。

案例 7:屏蔽特定國家/地區的 IP 訪問

這個需求很常見,可以利用現成的國家 IP 段列表。

  1. 獲取國家的 IP 段列表

    # 例如下載中國的 IP 段(假設我們要創建白名單)
    wget -O cn.zone http://www.ipdeny.com/ipblocks/data/countries/cn.zone
  2. 創建 ipset 集合并導入 IP 段

    # 創建一個 hash:net 類型的集合來存儲網絡段
    sudo ipset create cn-whitelist hash:net# 將下載的 IP 段添加到集合中
    for i in $(cat cn.zone); dosudo ipset add cn-whitelist "$i"
    done
  3. 設置 iptables 規則

    # 示例:只允許來自中國 IP 段的流量訪問 80 和 443 端口
    sudo iptables -A INPUT -p tcp --dport 80 -m set --match-set cn-whitelist src -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 443 -m set --match-set cn-whitelist src -j ACCEPT
    # 然后設置相應的 DROP 規則(務必謹慎,以免鎖自己于服務器之外)

案例 8:動態域名白名單

如果你的服務器需要允許訪問一些域名,但這些域名的 IP 可能會變,可以用腳本定期解析并更新 ipset。

#!/bin/bash
# 文件名: /root/update_dynamic_whitelist.shDOMAIN_LIST="api.example.com some-cdn.com"
WHITELIST_SET="dynamic-whitelist"# 清空集合(或者先創建一個臨時集,然后交換)
sudo ipset flush "$WHITELIST_SET"for domain in $DOMAIN_LIST; do# 解析域名獲取 IPdig +short "$domain" | while read -r ip; doif [[ ! -z "$ip" ]]; thensudo ipset add "$WHITELIST_SET" "$ip"fidone
done

設置 cron 任務定期運行(例如每小時),確保 IP 地址是最新的。

4. ipset 規則持久化

重要提示默認情況下,ipset 規則和 iptables 規則一樣,重啟后會丟失。必須手動保存和恢復。

方法一:使用ipset-service服務

1. 安裝與配置

# CentOS為例
yum install -y   ipset-service ?
systemctl enable ipset ? --now

2. 手動保存規則

ipset save > /etc/ipset.conf  # 導出規則至配置文件  

3. 自動持久化配置

編輯/etc/sysconfig/ipset-config,確保以下參數啟用

IPSET_SAVE_ON_STOP="yes"             # 停止服務時自動保存  
IPSET_SAVE_FILE="/etc/ipset.conf"    # 配置文件路徑  

方法二:systemd自定義服務

1. 保存當前規則

ipset save > /etc/ipset.conf  

2. 創建服務文件

vim   /etc/systemd/system/ipset-persistent.service  

內容如下:

[Unit]  
Description=ipset persistent configuration  
Before=network.target  [Service]  
Type=oneshot  
ExecStart=/usr/sbin/ipset restore -f /etc/ipset.conf  
ExecStop=/usr/sbin/ipset  save -f /etc/ipset.conf  
RemainAfterExit=yes  [Install]  
WantedBy=multi-user.target  

3. 啟用服務

systemctl daemon-reload  
systemctl enable ipset-persistent --now  

方法三:手動恢復(臨時/應急)

1. 導出規則

ipset save > /etc/ipset.conf  

2. 重啟后恢復

ipset restore < /etc/ipset.conf  
  • 自動加載可將命令加入/etc/rc.local(確保文件有執行權限)。

保存 iptables 規則

同樣,別忘了保存和持久化 iptables 規則。

sudo iptables-save > /etc/iptables/rules.v4 # 對于 IPv4
sudo ip6tables-save > /etc/iptables/rules.v6 # 對于 IPv6
# 然后啟用 iptables-persistent 服務,或配置相應機制。

6. 注意事項

  1. 謹慎操作:錯誤的 iptables 或 ipset 規則可能導致你把自己鎖在服務器外面。務必在本地控制臺或通過一個不會受規則影響的獨立連接(例如管理控制臺)上進行操作

  2. 備份規則:在對規則進行重大更改之前,先備份當前的 ipset 和 iptables 規則。

  3. 性能考慮:對于非常龐大的集合(數十萬條),hashsize?和?maxelem?參數的初始設置會影響性能和內存使用。根據情況調整。

  4. 組合使用:ipset 通常與 iptables 結合使用,單獨使用 ipset 不會產生任何效果。

  5. 列表優化:對于大型的 IP 地址段列表,可以使用?iprange?這樣的工具來合并相鄰的 IP 范圍,有助于減少 ipset 中的條目數量并提升性能。

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

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

相關文章

實例和對象的區別

對象&#xff08;Object&#xff09;是一個概念&#xff0c;它表示“某個類的一個成員”&#xff0c;是“邏輯上的個體”。實例&#xff08;Instance&#xff09;是一個現實&#xff0c;指的是在內存中真正分配了空間的對象。實例一定是對象&#xff0c;但對象不一定是實例。例…

Win10 Chrome認不出新Emoji?兩個擴展搞定顯示與輸入

前言 用Win10電腦在Chrome里發消息、刷網頁時&#xff0c;你是否遇到過這樣的尷尬&#xff1a;別人發的、或者頁面顯示的 Emoji&#xff0c;在你屏幕上變成了空白方框&#xff0c;像“文字里缺了一塊拼圖”&#xff1f;其實這不是Chrome的錯&#xff0c;也不用換電腦&#xff0…

Golang中逃逸現象, 變量“何時棧?何時堆?”

目錄 什么是棧 什么是堆 棧 vs 堆&#xff08;核心區別&#xff09; GO編譯器的逃逸分析 什么是逃逸分析&#xff1f; 怎么看逃逸分析結果&#xff1f; 典型“會逃逸”的場景 閉包捕獲局部變量 返回或保存帶有“底層存儲”的容器 經由接口/反射/fmt 等導致裝箱或被長…

MySQL入門指南:從安裝到工作原理

什么是MySQL MySQL是一個開源的關系型數據庫管理系統&#xff0c;由瑞典MySQL AB公司開發&#xff08;目前屬于Oracle公司&#xff09;&#xff0c;被廣泛地應用在大中小型網站中 MySQL是一個小型的開源的關系型數據庫管理系統&#xff0c;與其他大型數據庫管理系統例如&…

dask.dataframe.shuffle.set_index中獲取 divisions 的步驟分析

dask.dataframe.shuffle.set_index 中獲取 divisions 的步驟分析 主要流程概述 在 set_index 函數中&#xff0c;當 divisionsNone 時&#xff0c;系統需要通過分析數據來動態計算分區邊界。這個過程分為以下幾個關鍵步驟&#xff1a; 1. 初始檢查和準備 if divisions is None:…

ai生成ppt工具有哪些?10款主流AI生成PPT工具盤點

隨著人工智能技術的飛速發展&#xff0c;AI生成PPT工具逐漸成為職場人士、學生和創作者提升效率的得力助手。這類工具通過智能算法&#xff0c;能夠快速將文本、數據或創意轉化為結構化、視覺化的演示文稿&#xff0c;大幅節省設計時間。1、AiPPT星級評分&#xff1a;★★★★★…

Qt多線程編程學習

Qt多線程編程學習 1. 項目概述 本項目展示了Qt中多線程編程的基本用法&#xff0c;通過繼承QThread類創建自定義線程&#xff0c;并演示了線程的啟動、執行和銷毀過程。項目包含一個簡單的用戶界面&#xff0c;用戶可以通過按鈕控制線程的啟動和結束。 1.1 項目結構 項目包含以…

加密貨幣武器化:惡意npm包利用以太坊智能合約實現隱蔽通信

ReversingLabs研究人員發現兩個惡意npm包利用以太坊&#xff08;Ethereum&#xff09;智能合約隱藏并傳播惡意軟件。這兩個名為colortoolsv2和mimelib2的軟件包于2025年7月被識別&#xff0c;展現了開源安全攻防戰中的新戰術。惡意軟件包偽裝成實用工具攻擊活動始于7月7日發布的…

Spring Boot 全局字段處理最佳實踐

在日常開發中&#xff0c;我們總會遇到一些瑣碎但又無處不在的字段處理需求&#xff1a;? 請求處理: 用戶提交的表單&#xff0c;字符串前后帶了多余的空格&#xff0c;需要手動 trim()。? 響應處理: 返回給前端的 BigDecimal 金額&#xff0c;因為精度問題導致JS處理出錯&am…

三坐標測量機在汽車制造行業中的應用

在汽車制造業中&#xff0c;零部件精度決定著整車性能。從發動機活塞的微米級公差&#xff0c;到車身焊接的毫米級間隙&#xff0c;汽車制造“差之毫厘&#xff0c;謬以千里” &#xff0c;任何細微偏差都可能引發連鎖反應&#xff1a;發動機抖動、異響、油耗飆升&#xff0c;車…

機床夾具設計 +選型

機床夾具設計—第2組&#xff08;鉆床夾具&#xff09;仿真組裝視頻_嗶哩嗶哩_bilibili 夾具-商品搜索-怡合達一站式采購平臺 米思米FA標準品電子目錄new 可能要吧這些定位塊單獨用yolo訓練一邊才能搞識別分析 3長條一短銷定位&#xff0c;黃色的用來夾緊 一個面加一短軸一棱…

表格識別技術:通過計算機視覺和OCR,實現非結構化表格向結構化數據的轉換,推動數字化轉型。

在日常工作和生活中&#xff0c;我們無處不在與表格打交道。從財務報表、發票收據&#xff0c;到科研論文中的數據表、醫療報告&#xff0c;表格以其清晰、結構化的方式&#xff0c;承載著大量關鍵信息。然而&#xff0c;當這些表格以紙質或圖片等非結構化形式存在時&#xff0…

Go基礎(②Viper)

Viper 讀取配置創建一個配置文件 config.yamlserver:port: 8080timeout: 30 # 超時時間&#xff08;秒&#xff09; database:host: "localhost"user: "root"password: "123456"name: "mydb"然后用 Viper 讀取這個配置&#xff0c;代…

kafka Partition(分區)詳解

一、什么是 PartitionPartition&#xff08;分區&#xff09; 是 Kafka Topic&#xff08;主題&#xff09; 的最小并行單位。一個 Topic 可以包含多個 Partition&#xff0c;每個 Partition 底層對應一個有序、不可變的消息隊列&#xff0c;消息只會順序追加。Partition 內部消…

中創中間件適配HGDB

文章目錄環境文檔用途詳細信息環境 系統平臺&#xff1a;Microsoft Windows (64-bit) 10 版本&#xff1a;5.6.5 文檔用途 本文章主要介紹中創中間件簡單適配HGDB。 詳細信息 一、數據源配置 1.數據庫準備 &#xff08;1&#xff09;安裝HGDB并創建一個名為myhgdb的數據…

服務器內存和普通計算機內存在技術方面有什么區別?

服務器內存和普通計算機內存在技術上的區別&#xff0c;主要體現在為滿足不同工作場景和要求而采用的設計和特性上。下面這個表格匯總了它們的主要技術差異&#xff0c;方便你快速了解&#xff1a; ?技術特性??服務器內存??普通計算機內存??錯誤校驗 (ECC)??支持ECC(…

哪款AI生成PPT工具對職場新人最友好?操作門檻最低的是哪個?

一句話生成專業PPT&#xff0c;職場新人也能輕松做出高質量演示文稿現代職場節奏快&#xff0c;PPT制作已成為必備技能。然而&#xff0c;職場新人常面臨兩大挑戰&#xff1a;缺乏設計經驗&#xff0c;以及需要在有限時間內完成高質量演示。傳統PPT制作耗時費力&#xff0c;需梳…

1.注解的力量:Spring Boot如何用注解重構IoC容器

文章目錄1.1 IoC容器&#xff1a;Spring的智能管家1.2 注解驅動&#xff1a;給管家下指令1.2.1 SpringBootApplication&#xff1a;總管家的聘書1.2.2 組件注解&#xff1a;員工的身份標識1.2.3 Autowired&#xff1a;依賴注入的三種方式1.2.4 Bean注解&#xff1a;手動招聘特殊…

【算法】92.翻轉鏈表Ⅱ--通俗講解

一、題目是啥?一句話說清 給你一個鏈表和兩個整數 left 和 right,反轉從第 left 個節點到第 right 個節點的子鏈表,并返回反轉后的鏈表。其他部分保持不變。 示例: 輸入:head = [1,2,3,4,5], left = 2, right = 4 輸出:[1,4,3,2,5](反轉了從第2到第4個節點) 二、解題…

Nature子刊:新發現!深層腦網絡中發現強迫癥癥狀的神經生物標志物

強迫癥&#xff08;OCD&#xff09;是一種令人困擾的精神疾病&#xff0c;患者常常被強迫思維和強迫行為所困擾。例如&#xff0c;有些人會反復洗手&#xff0c;無法控制自己的清潔沖動&#xff1b;還有些人會不斷檢查門窗是否關好&#xff0c;即便他們已經確認過無數次。這些行…