Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

iptables hashlimit 模塊深度解析:基於令牌桶的連接限速實戰與參數全解

編輯:Linux 教學

hashlimit 是 iptables 的一個**匹配模塊**,基於**令牌桶算法**實現速率匹配。單獨使用無法限速,必須配合「匹配放行 + 不匹配丟棄」兩條規則鏈聯使用。本文詳細講解令牌桶模型、核心參數、匹配項模式、實戰案例(SSH 防暴力、NAT 網關防洪水)、哈希表調優參數,助你精準構建連接級限速策略。

核心原理:令牌桶模型

  • 桶容量 --hashlimit-burst:初始令牌數,允許突發流量。
  • 令牌生成速率 --hashlimit:如 5/sec、100/min、1000/hour。
  • 每個**匹配項**擁有獨立令牌桶,互不影響。
  • 數據包到達 → 有令牌 → 消耗 1 個 → **匹配成功** → 走 -j ACCEPT。
    無令牌 → **匹配失敗** → 繼續下一條規則 → 走 -j DROP。

核心參數速查

參數說明示例
--hashlimit-name哈希表文件名(/proc/net/ipt_hashlimit/ 下),必填--hashlimit-name ssh
--hashlimit令牌生成速率5/sec, 100/min
--hashlimit-burst桶容量(初始令牌數)10
--hashlimit-mode匹配項維度,可組合srcip,dstport
--hashlimit-htable-expire條目過期時間(毫秒)90000 (90秒)
--hashlimit-htable-size哈希表桶數量(桶數,非條目數)10000
--hashlimit-htable-max最大條目數(防記憶體耗盡)1000000

匹配項模式(--hashlimit-mode)

  • srcip:每個源 IP 獨立限速(最常用)
  • dstip:每個目標 IP 獨立限速
  • srcport:每個源端口獨立限速
  • dstport:每個目標端口獨立限速
  • 可組合:srcip,dstport 表示「同一源 IP 訪問同一目標端口」共享一個桶

實戰案例 1:SSH 防暴力破解(每 IP 5 連/秒,突發 10)

iptables -A INPUT -p tcp --dport 22 -m hashlimit \
  --hashlimit-name ssh \
  --hashlimit 5/sec \
  --hashlimit-burst 10 \
  --hashlimit-mode srcip \
  --hashlimit-htable-expire 90000 \
  -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j DROP

效果:單 IP 短時間內超過 10 次嘗試將被丟包,正常用戶無感。

實戰案例 2:NAT 網關防內網主機對外 Flood(每 IP 10 連/秒)

iptables -N DEFLOOD
iptables -A FORWARD -s 192.168.1.0/24 -m state --state NEW -j DEFLOOD
iptables -A DEFLOOD -m hashlimit \
  --hashlimit-name deflood \
  --hashlimit 10/sec \
  --hashlimit-burst 10 \
  --hashlimit-mode srcip \
  -j ACCEPT
iptables -P DEFLOOD DROP
  • 自定義鏈 DEFLOOD 隔離邏輯
  • 僅對 NEW 狀態連接限速,不影響已建立連接吞吐
  • 策略鏈默認 DROP 處理超速包

哈希表參數調優建議

  • 高併發場景:增大 --hashlimit-htable-size(如 65536)減少哈希碰撞,配合 --hashlimit-htable-max 防止內存耗盡。
  • 短連接場景:縮小 --hashlimit-htable-expire(如 30000ms)加速釋放非活躍條目。
  • 查看當前表:cat /proc/net/ipt_hashlimit/

常見誤區

  1. 單條規則以為能限速:hashlimit 只匹配,**必須有後續 DROP 規則**處理不匹配包。
  2. 混淆 burst 與 rate:burst 是「一次性額度」,rate 是「持續補給速度」。
  3. 忽略 mode 選擇:默認 srcip,dstip,srcport,dstport 全組合,粒度過細導致限速失效,必須顯式指定。

總結

hashlimit = **令牌桶 + 多維度哈希表**。掌握「匹配放行 + 不匹配丟棄」雙規則模式、正確選擇 mode、根據業務調整 rate/burst/expire,即可在 iptables 層面實現高性能、精準的連接級限速,保護服務免受濫用與洪水衝擊。

Copyright © Windows教程網 All Rights Reserved