使用IPTABLES限制IP上傳下載速度,如何用iptables限速?


怎樣使用IPTABLES限制IP上傳下載速度,如何用iptables限速?我們先來看范例:

iptables限制某IP的上傳速度為1000KB/秒(8Mbps,流入服務器帶寬),即在此IP所在的服務器或VPS上wget的速度


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

取消iptables限速:


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

 

限制某IP的上傳速度為2000KB/秒(16Mbps,流入服務器帶寬),即在此IP所在的服務器或VPS上wget的速度


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

取消限制:


iptables -D FORWARD -m limit -d 208.8.14.53 --limit 1400/s --limit-burst 100 -j ACCEPT 
iptables -D FORWARD -d 208.8.14.53 -j DROP

如果要限制某IP下載速度(即網友通過網頁下載的帶寬/速度)參考

iptables -A FORWARD -s 208.8.14.36 -m limit --limit 700/s -j ACCEPT
iptables -A FORWARD -s 208.8.14.36 -j DROP

雙向限制:

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

 

Iptables 的limit匹配ctohome.com大致介紹

限制匹配數據包的頻率或速率,看清楚了,它是用來限制匹配的數據包的頻率和速率的.這里“limit”這個詞經常給別人“限制”的誤解, 其實准確說,應該是“按一定速率去匹配”,至於“限制”還是“放行”是后面 -j 動作來實現的,limit 僅僅是個 match 模塊,他的功能是匹配,匹配方式是按一定速率.

用iptables的limit模塊,目標是ACCEPT.當你設置300/s時,它大約每3ms發出一個令牌,獲得令牌的包可以發出去,沒有獲得令牌的包只能等待下一個令牌到來,這樣不會造成一些包丟失,更不會造成所謂“斷線”的. 

以下2條是對icmp的burst限制


iptables -A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

第一條ipables的意思是限制ping包每一秒鍾一個,10個后重新開始.

同時可以限制IP碎片,每秒鍾只允許100個碎片,用來防止DoS攻擊.


iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT


下面ctohome.com詳細的講述一下iptables的limit模塊的功能:


限制 ping (echo-request) 傳入的速度
限制前, 可正常每 0.2 秒 ping 一次
ping your.linux.ip -i 0.2

限制每秒只接受一個 icmp echo-request 封包
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

--limit 1/s 表示每秒一次; 1/m 則為每分鍾一次
--limit-burst 表示允許觸發 limit 限制的最大次數 (預設 5)

再以每 0.2 秒 ping 一次, 得到的響應是每秒一次
ping your.linux.ip -i 0.2

下面規則亦可達到每秒只接受一個 echo-request 封包
iptables -N pinglimit
iptables -A pinglimit -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A pinglimit -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j pinglimit

iptables限速原理解釋:

iptables limit 參數
· 限制特定封包傳入速度
· 限制特定端口口連入頻率
· iptables Log 記錄參數備忘
· 自定 Chain 使用備忘
· 防治 SYN-Flood 碎片攻擊
限制 ping (echo-request) 傳入的速度
限制前, 可正常每 0.2 秒 ping 一次
ping your.linux.ip -i 0.2
限制每秒只接受一個 icmp echo-request 封包
iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s –limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
–limit 1/s 表示每秒一次; 1/m 則為每分鍾一次
–limit-burst 表示允許觸發 limit 限制的最大次數 (預設 5)
再以每 0.2 秒 ping 一次, 得到的響應是每秒一次
ping your.linux.ip -i 0.2


限制 ssh 連入頻率
建立自訂 Chain, 限制 tcp 聯機每分鍾一次, 超過者觸發 Log 記錄 (記錄在 /var/log/messages)
iptables -N ratelimit
iptables -A ratelimit -p tcp -m state –state ESTABLISHED,RELATED -j ACCEPT  
iptables -A ratelimit -p tcp –syn -m limit –limit 1/m –limit-burst 1 -j ACCEPT
iptables -A ratelimit -p tcp -j LOG –log-level “NOTICE” –log-prefix “[RATELIMIT]”
iptables -A ratelimit -p tcp -j DROP
引用自訂 Chain, 限制 ssh (tcp port 22) 連入頻率
iptables -A INPUT -p tcp –dport 22 -s 192.168.0.0/16 -j ACCEPT (特定 IP 來源不受限制)
iptables -A INPUT -p tcp –dport 22 -j ratelimit

sshd_config 設定備忘:
· LoginGraceTime 30 密碼輸入時限為 30 秒
· MaxAuthTries 2 最多只能輸入 3 次密碼
同理可證
iptables -N pinglimit
iptables -A pinglimit -m limit –limit 1/s –limit-burst 1 -j ACCEPT
iptables -A pinglimit -j DROP
iptables -A INPUT -p icmp –icmp-type echo-request -j pinglimit
亦可達到每秒只接受一個 echo-request 封包
補充: 清除自訂 Chain
iptables -L -n –line-number
iptables -D INPUT n
iptables -F ratelimit
iptables -X ratelimit


防治 SYN-Flood 碎片攻擊
iptables -N syn-flood
iptables -A syn-flood -m limit –limit 100/s –limit-burst 150 -j RETURN
iptables -A syn-flood -j DROP
iptables -I INPUT -j syn-flood
模擬攻擊
wget http://www.xfocus.net/tools/200102/naptha-1.1.tgz
wget ftp://rpmfind.net/linux/freshrpms/redhat/7.0/libnet/libnet-1.0.1b-1.src.rpm
tar -zxf naptha-1.1.tgz
rpmbuild –recompile libnet-1.0.1b-1.src.rpm
cp -r /var/tmp/libnet-buildroot/usr/* /usr/local/
cd naptha-1.1
make
./synsend your.linux.host.ip 80 local.host.eth0.ip 0.1
若成功抵擋, 不久后會出現 Can’t send packet!: Operation not permitted 的訊息

 

參考文章:http://www.ctohome.com/FuWuQi/b4/682.html

 

限速實例:

做限速 30M
[root@ip# iptables -nvL
Chain INPUT (policy ACCEPT 68254 packets, 5601K bytes)
 pkts bytes target     prot opt in     out     source               destination         
54014 2838K ACCEPT     all  --  *      *       10.248.0.0/16        0.0.0.0/0            limit: avg 500/sec burst 100
11727  626K DROP       all  --  *      *       10.248.0.0/16        0.0.0.0/0           
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 
Chain OUTPUT (policy ACCEPT 71217 packets, 273M bytes)
 pkts bytes target     prot opt in     out     source               destination         
69440  271M ACCEPT     all  --  *      *       0.0.0.0/0            10.248.0.0/16        limit: avg 500/sec burst 100
28013   96M DROP       all  --  *      *       0.0.0.0/0            10.248.0.0/16     
 
 
 iptables -A INPUT -s 10.248.0.0/16  -m limit --limit 500/s --limit-burst 100 -j ACCEPT
 iptables -A INPUT -s 10.248.0.0/16  -j DROP
 iptables -A OUTPUT -d 10.248.0.0/16  -m limit --limit 500/s --limit-burst 100 -j ACCEPT
 iptables -A OUTPUT -d 10.248.0.0/16  -j DROP
 
 
做測試 
 
[root@ip]# iperf3 -u -c 10.248.1.6  -b 30M -t 60
Connecting to host 10.248.1.6, port 5201
[  4] local 10.248.1.5 port 36025 connected to 10.248.1.6 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-60.00  sec   225 MBytes  31.4 Mbits/sec
[ ID] Interval           Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  4]   0.00-60.00  sec   225 MBytes   31.4 Mbits/sec  0.158 ms  44/28784 (0.15%)
[  4] Sent 28784 datagrams
 
 
[root@ip]# iperf3 -u -c 10.248.1.6  -b 35M -t 60
Connecting to host 10.248.1.6, port 5201
[  4] local 10.248.1.5 port 46370 connected to 10.248.1.6 port 5201
iperf3: error - unable to write to stream socket: Operation not permitted
 
[root@ipi# iperf3  -c 10.248.1.6   -t 60
Connecting to host 10.248.1.6, port 5201
[  4] local 10.248.1.5 port 47891 connected to 10.248.1.6 port 5201
[ ID] Interval           Transfer     Bandwidth       Retransmits
[  4]   0.00-60.48  sec   110 MBytes  15.3 Mbits/sec  20
[ ID] Interval           Transfer     Bandwidth       Retransmits
      Sent
[  4]   0.00-60.48  se c   110 MBytes  15.3 Mbits/sec  20
      Received
[  4]   0.00-60.48  sec   109 MBytes  15.2 Mbits/sec
 
 


免責聲明!

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



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