使用iptables給特定IP或端口限流


上篇文章《linux/VPS使用WonderShaper限制網卡上傳/下載帶寬速率》介紹了使用WonderShaper對服務器自身的上傳帶寬下載帶寬進行限流,比較適合長期大量占用帶寬而可能被IDC定義為服務濫用最終導致被停機的一種使用場景,可以有效的進行規避。今天主要記錄下如何使用 iptables 對訪問和請求的IP/端口進行限流或限制並發量,基於公平原則改善網絡訪問體驗,並緩解CC攻擊對服務器造成的影響。

限制指定端口並發數

首先輸入命令service iptables stop關閉iptables(注意:iptables可能會有問題,貌似在舊版本中不被認為是一個服務,而是防火牆)

限制端口並發數很簡單,IPTABLES就能搞定了,假設你要限制端口8388IP最大連接數為5,兩句話命令:

iptables -I INPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP iptables -I OUTPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP

我再舉個例子,比如你想限制從1024-10240的端口

iptables -I INPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP iptables -I OUTPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP

保存IPTABLES規則即可(service iptables save),其他端口以此類推。

輸入命令service iptables start啟動

最后用命令查看是否生效

iptables -L -n -v

限制指定端口傳輸速度

首先輸入命令 service iptables stop 關閉 iptables

限制端口並發數很簡單,IPTABLES就能搞定了,假設你要限制端口5037的最大連接速度為60個包每秒,兩句話命令:

iptables -A INPUT -p tcp --sport 5037 -m limit --limit 60/s -j ACCEPT iptables -A INPUT -p tcp --sport 5037 -j DROP

也就是限制每秒接受60個包,一般來說每個包大小為64—1518字節(Byte)。

限制IP的訪問速度

原理:每秒對特定端口進行速度控制,比如每秒超過700個的數據包直接DROP,從而限制特定端口的速度

iptables -A FORWARD -m limit -d 208.8.14.53 --limit 700/s --limit-burst 100 -j ACCEPT iptables -A FORWARD -d 208.8.14.53 -j DROP

Linux/VPS下通過iptables限制流量,可通過以下腳本即可實現(首先需要將這台機器配置成網關)。下面給出一個腳本的簡單示例:

#限制網段 for ((i = 1; i < 253; i++)) do /sbin/iptables -A FORWARD -s 192.168.2.$i -m limit \ --limit 60/s -j ACCEPT /sbin/iptables -A FORWARD -s 192.168.2.$i -j DROP done #限制單個ip /sbin/iptables -A FORWARD -s 192.168.1.135/32 -m limit \ --limit 60/s -j ACCEPT /sbin/iptables -A FORWARD -s 192.168.1.135/32 -j DROP #當流量小於60/s的時候,iptables 接受並轉發。當流量大於60/s 的時候,iptables丟棄數據包 

最后說一下如何解決防火牆重啟后失敗的問題

iptables-save >/etc/sysconfig/iptables echo 'iptables-restore /etc/sysconfig/iptables' >> /etc/rc.local chmod +x /etc/rc.d/rc.local
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM