hashlimit 是 iptables 的一個**匹配模塊**,基於**令牌桶算法**實現速率匹配。單獨使用無法限速,必須配合「匹配放行 + 不匹配丟棄」兩條規則鏈聯使用。本文詳細講解令牌桶模型、核心參數、匹配項模式、實戰案例(SSH 防暴力、NAT 網關防洪水)、哈希表調優參數,助你精準構建連接級限速策略。
--hashlimit-burst:初始令牌數,允許突發流量。--hashlimit:如 5/sec、100/min、1000/hour。-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 |
srcip:每個源 IP 獨立限速(最常用)dstip:每個目標 IP 獨立限速srcport:每個源端口獨立限速dstport:每個目標端口獨立限速srcip,dstport 表示「同一源 IP 訪問同一目標端口」共享一個桶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 次嘗試將被丟包,正常用戶無感。
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/srcip,dstip,srcport,dstport 全組合,粒度過細導致限速失效,必須顯式指定。hashlimit = **令牌桶 + 多維度哈希表**。掌握「匹配放行 + 不匹配丟棄」雙規則模式、正確選擇 mode、根據業務調整 rate/burst/expire,即可在 iptables 層面實現高性能、精準的連接級限速,保護服務免受濫用與洪水衝擊。