• Iptables防火墙limit模块扩展匹配规则


    limit模块的作用是针对报文的速率进行限制,限制的单位有秒、分钟、小时、天等,例如一分钟内只接收10个请求报文,多余的报文则会被丢弃。

    limit模块的常用参数:

    • --limit rate[/second|/minute|/hour|/day]:指定限制的平均速率单位,以秒(s)、分(m)、时(h)、天为单位,默认是3小时。
    • --limit-burst:要匹配的最大初始包的数量,例如1分钟内限制10个请求报文,那么首先一次性会接收我们指定初始化包的数量,剩余请求包按着速率单位来进行接收,默认值为5个报文。

    1.限制每分钟接收10个ICMP数据报文

    1. 1.先添加一条规则,限制1分钟内只收10个icmp协议的请求报文。
    2. [root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
    3. 2.然后添加第二条规则,超出10个报文后,其余的报文全部丢弃。
    4. [root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP
    5. 3.查看添加的防火墙规则
    6. [root@jxl-1 ~]# iptables -L -n -v --line-number
    7. Chain INPUT (policy ACCEPT 1331 packets, 1111K bytes)
    8. num pkts bytes target prot opt in out source destination
    9. 1 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 10/min burst 5
    10. 2 0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0
    11. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    12. num pkts bytes target prot opt in out source destination
    13. Chain OUTPUT (policy ACCEPT 1334 packets, 1844K bytes)
    14. num pkts bytes target prot opt in out source destination

    查看效果,可以看到前5个数据包都可以正常接收,那是因为limit默认初始包就是5个,因此没有任何问题,从第六个数据包开始后,每隔6秒才会正常处理一个数据包,因为1分钟限制10次数据包的接收,那就表示6秒收一个,效果如下图所示。

    也可以理解为是一开始可以快速通过5个数据报文,后面的数据报文是每分钟通过10个。

    2.允许10个数据报文快速通过,然后限制每分钟接收1个个ICMP数据报文

    实现思路和1)中一模一样,只不过就是调整一下初始包的数量。

    1. 1.先添加一条规则,限制1分钟内只收10个icmp协议的请求报文。
    2. [root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
    3. 2.然后添加第二条规则,超出10个报文后,其余的报文全部丢弃。
    4. [root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP

    效果如下,首先发送了10个数据包正常接收,剩下的数据包每隔1分钟接收1个。

    3.限速案例,限制网络传输的带宽不可以超过500k/s

    限速如何通过limit模块来实现呢?其实也很简单,我们可以计算出1个数据包的大小,然后用500k的大小除以数据包的大小,得出500k能换算出多少个数据包,例如是300个,那么最后设置1秒钟接收的数据包的数量为300个,就可以实现每秒的传输速率带宽在500k左右。

    一个数据包的大小大概在1500字节。

    公式:(限制的带宽速率*1000)/(单个数据包的大小)

    500k的限速,每秒可限制的数据包数量大概为(500*1000/150 = 300个)300个。

    1. [root@jxl-1 ~]# iptables -t filter -I OUTPUT -p tcp -m limit --limit 300/s -j ACCEPT
    2. [root@jxl-1 ~]# iptables -t filter -A OUTPUT -p tcp -j DROP

    速率带宽多多少少是由落差的,如果就想限制在500k以内,可以根据测试的结果来调整每秒数据包的效果,如下图所示,拉取文件的速率为327k/s,此时数据包的数量我是设置的120个。

  • 相关阅读:
    使用TF-IDF对文本集中的单篇文本制作词云
    【工具】Ubuntu开机黑屏、NVIDIA显卡驱动问题
    Uniapp 文件选择插件 Ba-FilePicker
    RF学习——器件的非线性失真分析
    安卓系统日历提醒
    VHDL菜鸟入门到精通之激励文件编写
    【GoWeb框架初探————XORM篇】
    音频文件播放与暂停
    Django后台项目实战之后台菜品类别信息管理
    快速实战SQL - 高级数据过滤
  • 原文地址:https://blog.csdn.net/Java_ttcd/article/details/126540802