zoukankan      html  css  js  c++  java
  • ipt_connlimit限制并发,ipt_recent限制单位时间内的请求数目

    xt_connlimit(别名ipt_connlimit)

    一.Centos5.8系统


    需要手动的执行modprobe ipt_connlimit命令把模板加入内核中去.
    先查看

    #lsmod |grep xt
    如未找到xt_connlimit

    则执行
    #modprobe ipt_connlimit

    查看xt_connlimit信息:

    #modinfo xt_connlimit


    二.Centos6.X


    已经包含到了内核中,不需要手动添加了.


    三.规则配置示例:

    1.connlimit:

    connlimit参数:
      --connlimit-above n    #限制为多少个
      --connlimit-mask n     #这组主机的掩码,默认是connlimit-mask 32 ,即每个IP.

    限制同一IP同时最多100个http连接(默认是B类IP)
    iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

    iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT

    只允许每组C类IP同时100个http连接
    iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT

    限制某IP最多同时100个http连接
    iptables -A INPUT -s 222.222.222.222 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

    2.recent(需要的模块是xt_recent)

    限制每IP在一定的时间(比如60秒)内允许新建立最多100个http连接数

    iptables -A INPUT -p tcp --dport 80 --syn -m recent --name BAD_HTTP_ACCESS --rcheck --seconds 60 --hitcount 100 -j LOG --log-prefix 'DDOS:' --log-ip-options
    iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT
    iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
    

    这个意思是建立一个的区块BAD_HTTP_ACCESS,60秒内允许100个请求;超过这个请求的拒绝;第一行是将超过请求的写入系统日志;

      
    ps:上面recent规则只适用于默认规则为DROP中,如果要适用默认ACCEPT的规则,需要--set放前面 并且无-j ACCEPT

    解决hitcount超出的错误

    xt_recent: hitcount (100) is larger than packets to be remembered (20)

    hitcount的值由/sys/module/xt_recent/parameters下的ip_pkt_list_tot做了限制,但是该文件是个只读文件.

    处理办法如下:

    在/etc/modprobe.d下新建xt_recent.conf,输入以下内容保存:

    options xt_recent ip_list_tot=1024 ip_pkt_list_tot=200

    移除xt_recent模块:

    modprobe -r xt_recent

    再加载该模块

    modprobe xt_recent

    再次查看

    /sys/module/xt_recent/parameters下的ip_pkt_list_tot,发现已经更改为200,需要注意该值不要大于255,否则可能有问题;

    附录:

    modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

    -a或--all:载入全部的模块;

    -c或--show-conf:显示所有模块的设置信息;

    -d或--debug:使用排错模式;

    -l或--list:显示可用的模块;

    -r或--remove:模块闲置不用时,即自动卸载模块;

    -t或--type:指定模块类型;

    -v或--verbose:执行时显示详细的信息;

    -V或--version:显示版本信息;

    -help:显示帮助。

    lsmod 可以查看挂载的模块

  • 相关阅读:
    ExtJS+DWR+Spring+Hibernate开发HRMS(5)
    ExtJS实战(9)疑难杂症分析
    ExtJS实战(8)CRUD+分页+复杂查询+排序
    ExtJS实战(7)登陆
    ExtJS+DWR+Spring+Hibernate开发HRMS(1)
    ExtJS+DWR+Spring+Hibernate开发HRMS(3)
    ExtJS实战(10)项目总结
    ExtJS+DWR+Spring+Hibernate开发HRMS(2)
    Hibernate QBC高级查询
    ExtJS+DWR+Spring+Hibernate开发HRMS(4)
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7953521.html
Copyright © 2011-2022 走看看