用途:当机器受到网络攻击时,使用 iptables 封 IP,有时候可能会封禁成千上万个 IP,如果添加成千上万条规则,
在一台注重性能的服务器或者本身性能就很差的设备上就不在适用了。ipset 就是为了避免这个问题而生的。

ipset的参数:
ipset [-exist | -output { plain | save | xml } | -quiet | -resolve | -sorted | -name | -terse | -file filename ] Command [ Command-Options ]
  -o,-output plain|save|xml
       #为清单集指定输出模式。“list”命令的默认值是“plain”模式,“save”命令的默认值是“save”模式。
  -f,-file    #restore时,指定从文件中恢复,list/save时,保存数据到文件.
  -s,-sorted   #打印排序的元素(如果集合类型支持)。
  -!,-exist      #创建或添加已存在的set,或 删除不存在的set时,不报错
  -q,-quiet    #静默模式
  -r,-resolve  #反向解析IP地址.
  -n,-name   #仅列出内核中的setname。
  -t,-terse     #仅从内核中列出setnames和set header。

  ipset的可用 Command 选项:
    create  SETNAME  TYPENAME   [Command-Options]
    add  SETNAME  ENTRY [Command-Options]   #在指定集合中添加条目(Entry),仅在创建时,
                        指定了Command-Options才能使用相应的参数.
    del  SETNAME    ENTRY
    flush [SETNAME]      #清空指定集合或全部集合中所有条目
    destroy [SETNAME]       #删除一个指定的集合,或删除所有集合

    test SETNAME ENTRY   #测试一个条目是否包含在该集合

    list [SETNAME]          #显示一个指定的集合,或列出所有集合

    save [SETNAME]      #保存一个指定的集合,或保存所有集合
    restore            #恢复已保存的状态

    rename  FROM-SETNAME  TO-SETNAME    #重命名集合名
    swap  FROM-SETNAME  TO-SETNAME        #交换两个集合的内容

  TYPENAME: 是集合类型,它包括存储数据的 存储方法 和存储在集合中的 数据类型
    格式:
      TYPENAME := method:datatype[,datatype[,datatype]]
      当前方法列表为 bitmap, hash, 和list,可能的数据类型为ip、net、mac、port和iface。
      bitmap和list:   使用固定大小的存储.
      hash:   使用hash表来存储元素。但为了避免Hash表键冲突,在ipset会在hash表key用完后,
          若又有新增条目,则ipset将自动对hash表扩大,假如当前哈希表大小为100条,则它将
          扩展为200条。当在iptables/ip6tables中使用了ipset hash类型的集合,则该集合将
          不能再新增条目。

  集合的dimension(维度)等于其类型名称中的数据类型的数量。
   如:
    ipset create test hash:ip,port,net
    ipset add test 1.1.1.1,80,1.1.1.0/24   #这就是所谓的集合维度,有几个类型,就必须有几个与其对应的类型值.

     另注:
    #若使用非ip,net,port等数字或编号类,而使用域名或服务名等时,必须使用中括号括起来.
      若提供了域名,ipset内部通过DNS解析为多个IP时,ipset将使用第一个IP.
      ipset add foo [test-hostname],[ftp-data]  
    

    TYPENAME使用注意事项:
      hash:port
        port的格式有三种:
          1.直接写端口号.
          2.udp:端口号, 默认是tcp
          3.端口范围,如:8000-9000
      hash:mac
        mac: 只能是源MAC. 因为iptables无法获取互联网上的目标MAC.

  集合存储方式有三类:
    bitmap: 是将条目存储到内存中一段连续的空间中.
    hash: 使用hash表来存储集合条目
    list: 是存储集合的集合

CentOS7上可用的集合类型名:
  注: 这些类型名都是固定格式,每种类型名支持的Command-Options不同,具体可看man手册.
    hash:net
    hash:ip
    hash:ip,port
    hash:net,port
    hash:net,iface
    hash:ip,port,net
    hash:ip,port,ip
    bitmap:ip
    bitmap:port
    bitmap:ip,mac
    list:set

  Command-Options:

    hash自增参数:
      hashsize:指定了创建集合时初始大小
      maxelem:指定了集合最大存储记录的数量
      例:
       ipset create test1 hash:ip,port hashsize 4096 maxelem 1000000

      family [inet |int6] : 指定集合是ipv4 或ipv6的集合.

      nomatch:
       若使用hash:net, 指定了一个网段为192.168.0.0/24,但我不想让此集合包含0~4这一段,
         即:192.168.0.0~192.168.0.4,怎么办? 这就可以使用nomatch参数.
         注: nomatch参数是在追加条目时,使用的参数。
        ipset create test hash:net
        ipset add test 192.168.0.0/24
        ipset add test 192.168.0.0/30 nomatch
        注: 这句就表示192.168.0.0/30此网段中第一段子网将从test集合中移除.

       timeout:
      集合中的条目超时后自动删除,需在创建集合时指定此参数,否则后期无法给集合中的条目追加超时参数.
      timeout 0:表示永不超时,但在添加条目时,可手动指定其超时值,若不指定则默认为永不超时.
      如:
       ipset create test2 hash:net timeout 1000
          注: 这就创建了一个test2的集合,其内部每个条目均在1000秒后,自动删除.

         ipset add test2 192.168.1.0/24 timeout 100
       注: 这表示不使用默认值,手动指定其超时值.【必须在集合创建时,指定了超时参数才可用】

         counters:
        计数器选项,可用于统计条目匹配的数据包和字节数,也可在新增或重新添加时指定这些初始计数值.
        注: 此参数需要在创建时指定后,集合内的条目才能支持计数器.

      comment:
        注释选项,需在创建集合时指定,集合内的条目才能使用comment来添加注释.
         例:
          ipset create test4 hash:net comment
          ipset add test4 1.1.1.0/24 comment "This is a test."
          ipset add test4 1.1.2.0/24 comment "This comment is \"bad\""
          ipset add test4 1.1.3.0/24 comment "This is file:\\\\Bad\\"
          注: 以上是对双引号和“\”的转义,但不建议使用,这可能导致save和restore时出错。

       skbinfo:
         此扩展选项支持在每个条目中存储metainfo(firewall mark, tc class和hardware queue),
      并使用SET netfilter target 的 --map-set选项将其映射到数据包中。
      skbmark:其值为MARK[/MASK]其中MARK和MASK是带有0x前缀的32位十六进制数,
      若仅指定了MARK 则掩码默认为:0xffffffff
     

         skbprio: 此选项具有tc class格式:MAJOR:MINOR,它们都是无0x前缀的十六进制数.
         skbqueue: 此选项是一个整数。
        例:
         ipset create test5 hash:ip skbinfo
            ipset add test5 skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10

     forceadd: 当hash集合满时,追加依然能成功,但它会随机从集合中删除一个条记录.

简单例子:
  #创建集合指定初始hash大小是4096,如果满了,这个hash会自动扩容为之前的两倍。
    最大能存储的数量是100000个
  ipset create black_list hash:net,port hashsize 4096 maxelem 1000000
  ipset add black_list 3.4.5.6,80 #指定端口80,但是没指定协议,默认是TCP
  ipset add black_list 5.6.7.8,udp:53 #
  ipset add black_list 1.2.3.4,80-86 #指定一个端口范围

  ipset add black_list 123.123.123.0/24
  ipset add black_list 123.123.123.0/30 nomatch

  #黑名单用法(拒绝规则集里的地址)
    iptables -I INPUT -m set --match-set black_list src -j DROP

  #白名单用法(不拒绝规则集里的地址)
    iptables -I INPUT -m set --match-set black_list src -j ACCEPT

ipset 学习总结的更多相关文章

  1. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  2. Kubernetes学习之路(四)之Node节点二进制部署

    K8S Node节点部署 1.部署kubelet (1)二进制包准备 [root@linux-node1 ~]# cd /usr/local/src/kubernetes/server/bin/ [r ...

  3. 学习openstack(八)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  4. 学习openstack(三)

      一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...

  5. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  6. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. 子结点childNodes

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. U盘 文件被隐藏解决办法

    原地址:http://www.deyi.com/thread-351635-1-1.html 方法:运行cmd( 在任意目录都行)单个文件 :attrib c:\"要修改的文件夹名字&quo ...

  3. IOS 获取设备本地音视频

    1.检索音视频 PHFetchOptions *allPhotosOptions; @property (nonatomic, strong) PHFetchResult *assetsFetchRe ...

  4. Apache Qpid消息通讯模型和消息地址简介

    Broker知识准备 Broker内置两种节点类型:一种是 queue,一种是 topic. 1.  queue 节点能够缓存消息,直到被读取走为止.queue节点满足两个重要的 PTP 通信的特征, ...

  5. 浅谈JavaScript的事件(事件流)

     事件流描述的是从页面中接收事件的顺序.IE的事件流失事件冒泡,而Netspace的事件流失事件捕获. 事件冒泡 IE的事件流叫事件冒泡,即事件开始时,由具体的元素(文档中嵌套层次最深的节点)接收,然 ...

  6. 基于mqtt协议实现手机位置跟踪

    Mqtt协议是物联网领域的一个标准协议,具有轻巧,对设备,带宽要求低,可靠稳定的特点,适合用来实现手机定位跟踪功能. 目前我初步搭建起来了整个可运行的框架,大致为如下思路:1.手机端通过位置服务,获取 ...

  7. 处理TCP连包的一小段代码

    学习网络编程也有一段时间了,一直听说TCP数据会连包,但一直不知道怎么测试好.最近测试了下:发送方使用对列,将发送的数据存入队列,然后开线程,专门发送.发送多包数据之间不延时.在接收方,他们确实连在一 ...

  8. pyenv 安装本地版本

    最近在用pyenv安装python的时候发现官网特别慢,经常出现拒绝访问的情况.看了一些解决方法,发现可以使用本地的python源码进行安装,让pyenv从本地下载就可以了~步骤如下: 首先从官网下载 ...

  9. python读取一个英文文件,并记录每个单词出现的次数,降序输出

    对文中出现的句号,逗号和感叹号做了相应的处理 sorted排序函数用法: 按照value值降序排列: sorted(dict.items(),key=lambda k:k[1],reverse=Tru ...

  10. ios 图片拉伸方法

     前提:要注意图片的size和展示的图片view的size的大小. 假如图片高度50,展示图片view的高度30,拉伸会变成剪切. 如果图片尺寸不对,可以用mac自带的图片编辑器修改大小: 双击打开图 ...