zoukankan      html  css  js  c++  java
  • 使用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  sec   110 MBytes  15.3 Mbits/sec  20
          Received
    [  4]   0.00-60.48  sec   109 MBytes  15.2 Mbits/sec
     
     
  • 相关阅读:
    负载均衡原理与实践详解 第十六篇 负载均衡网络设计 把负载均衡当作二层交换机还是三层路由器
    谈谈我对技术发展的一点感悟
    解析索引中数据列顺序的选择问题
    构建高性能.NET应用之配置高可用IIS服务器第四篇 IIS常见问题之:工作进程回收机制(上)
    关注分离的艺术(The Art of Separation of Concerns)
    如何修改.net framework
    [WPF Documents 之旅]System.Windows.Documents下的Class Diagram
    [转] 依赖注入&控制反转 oC 容器和Dependency Injection 模式(中文版)
    [WPF疑难]如何禁用窗口上的关闭按钮
    关于书写技术探讨性邮件的一点小小的建议
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/6805994.html
Copyright © 2011-2022 走看看