[转帖]ipset命令介绍与基本使用

ipset,命令,介绍,基本,使用 · 浏览次数 : 0

小编点评

* # ipset create test hash:ip,port~ * # ipset add test 192.168.1.0/24,80−82~ * # ipset add test 192.168.1.1,udp:53~ * # ipset add test 192.168.1.1,vrrp:0~ * # ipset test test 192.168.1.1,80Warning: 192.168.1.1,80 is in set test. 。归纳总结以上内容,生成内容时需要带简单的排版

正文

一. 介绍

        ipset命令是用于管理内核中IP sets模块的,如iptables之于netfilter。ipset字面意思是一些IP地址组成一个集合(set)。但是ipset用于用于存储IP地址,整个子网,端口号(TCP/UDP),MAC地址,网络接口名或者上述这些的组合。ipset主要是由iptables来使用,用于提高iptables的灵活性,简化iptables的规则。可能你在使用iptables时会感觉到以下不便:

        1. 使用iptables命令为一批IP地址或端口应用相同的iptables规则时,不得不为每个IP或端口都新建一条iptables规则。这有时会让iptables某个表特别庞大,但是规则看起来又非常冗余。

        2. 当需要给某个iptables规则应用到一个新的IP地址或端口时,我们不得不新建一条iptables规则;当需要给某个iptables规则删除其中某个IP地址或端口时,则需要直接删除那条iptables规则。这会让iptables操作特别繁琐。

ipset可以解决以上问题:

        1. 当需要把一批IP地址或端口都应用某个iptables规则时,只需要把一批IP地址和端口放入一个ipset中,把iptables规则应用到这个ipset就可以了。

        2. 当需要更新iptables规则的IP地址或端口时,只要更新对应ipset中的IP地址或端口就可以了,不需要修改iptables表。

二. ipset命令基本介绍与使用

格式:

  1. #ipset命令格式
  2. ipset [ OPTIONS ] COMMAND [ COMMAND−OPTIONS ]
  3. COMMANDS := { create | add | del | test | destroy | list | save | restore | flush | rename | swap | help |
  4. version | − }
  5. OPTIONS := { −exist | −output { plain | save | xml } | −quiet | −resolve | −sorted | −name | −terse | −file
  6. filename }
  7. ipset create SETNAME TYPENAME [ CREATE−OPTIONS ]
  8. ipset add SETNAME ADD−ENTRY [ ADDOPTIONS ]
  9. ipset del SETNAME DEL−ENTRY [ DEL−OPTIONS ]
  10. ipset test SETNAME TEST−ENTRY [ TESTOPTIONS ]
  11. ipset destroy [ SETNAME ]
  12. ipset list [ SETNAME ]
  13. ipset save [ SETNAME ]
  14. ipset restore
  15. ipset flush [ SETNAME ]
  16. ipset rename SETNAME−FROM SETNAME−TO
  17. ipset swap SETNAME−FROM SETNAME−TO
  18. ipset help [ TYPENAME ]
  19. ipset version
  20. ipset

COMMAND选项介绍:

n, create SETNAME TYPENAME [ CREATE−OPTIONS ]

        通过指定SETNAME和TYPENAME创建一个新IP集合。如果指定-exist选项,ipset在创建一个已经存在的IP集合时,ipset将不会报错。

add SETNAME ADD-ENTRY [ADD-OPTIONS]

        添加一个条目到SETNAME指定的IP集合中。如果指定-exist选项,IP集合存在此条目时,ipset将不会报错。

del SETNAME DEL-ENTRY [ DEL-OPTIONS ]

        从SETNAME指定的IP集合中删除一个条目。如果指定-exist选项,IP集合不存在此条目时,ipset将不会报错。

test SETNAME TEST-ENTRY [ TEST-OPTIONS ]

        测试一个条目是否在指定的IP集合中。如果在,ipset命令返回0,如果不在,则返回非0

x,destory [ SETNAME ]

        销毁指定的IP集合,如果不指定,则销毁所有的IP集合。如果某一IP集合正在被引用,则ipset不对该IP集合做任何操作。

list [ STENAME ] [ OPTIONS ]

        列出指定IP集合的头部数据和添加的条目,如果没有指定,则是所有的IP集。--sorted选项会把IP集合排序后输出。--output指定IP集合输出的格式:

  1. # 创建名称为test的IP集
  2. ~ # ipset create test hash:ip
  3. # 添加114.114.114.114test IP集中
  4. ~ # ipset add test 114.114.114.114
  5. # 以普通文本格式输出test IP集内容
  6. ~ # ipset list test -output plain
  7. Name: test
  8. Type: hash:ip
  9. Revision: 4
  10. Header: family inet hashsize 1024 maxelem 65536
  11. Size in memory: 8264
  12. References: 0
  13. Members:
  14. 114.114.114.114
  15. # 以保存格式输出test IP集内容
  16. ~ # ipset list test -output save
  17. create test hash:ip family inet hashsize 1024 maxelem 65536
  18. add test 114.114.114.114
  19. # 以XML格式输出test IP集内容
  20. ~ # ipset list test -output xml
  21. <ipsets>
  22. <ipset name="test">
  23. <type>hash:ip</type>
  24. <revision>4</revision>
  25. <header><family>inet</family><hashsize>1024</hashsize><maxelem>65536</maxelem>
  26. <memsize>8264</memsize>
  27. <references>0</references>
  28. </header>
  29. <members>
  30. <member><elem>114.114.114.114</elem></member>
  31. </members>
  32. </ipset>
  33. </ipsets>

save [ SETNAME ]

        保存指定的IP集,如果没有指定,则是所有的IP集。如果不指定-file则是输出到标准输出,指定则是输出到指定文件。

~ # ipset save test -file /tmp/234

flush [ SETNAME ]

        清空指定IP集,如果没有指定,则是所有的IP集。

e,rename SETNAME-FROM SETNAME-TO

        重命名一个IP集

~ # ipset rename test test1

w,swap SETNAME-FROM SETNAME-TO

        交换两个IP集的名称。但是两个IP集的必须存在而且SETTYPE兼容才可以。

其他选项:

timeout

        设置IP集合添加的新条目的默认超时时间,新加的条目的时间超过超时时间后,将从IP集中删除。

  1. # test IP集新添加的条目的默认超时时间300s
  2. ipset create test hash:ip timeout 300
  3. # 192.168.0.160s后从test IP集中移除
  4. ipset add test 192.168.0.1 timeout 60

SET TYPE:

bitmap:ip

CREATE−OPTIONS := range fromip−toip|ip/cidr [ netmask cidr ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := { ip | fromip−toip | ip/cidr }
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := { ip | fromip−toip | ip/cidr }
TEST−ENTRY := ip

举例:

range fromip−toip | ip/cidr:

  1. # example 1
  2. ~ # ipset create test3 bitmap:ip range 192.168.0.1-192.168.0.255
  3. ~ # ipset add test3 192.168.1/24
  4. ~ # ipset list test3
  5. Name: test3
  6. Type: bitmap:ip
  7. Revision: 3
  8. Header: range 192.168.0.1-192.168.0.255
  9. Size in memory: 92
  10. References: 0
  11. Members:
  12. 192.168.0.1
  13. .
  14. .
  15. .
  16. 192.168.0.255
  17. # example 2
  18. ~ # ipset create test4 bitmap:ip range 192.168.0.1-192.168.0.100
  19. ~ #
  20. ~ # ipset add test4 192.168.0/24
  21. ipset v7.15: Element is out of the range of the set
  22. ~ #
  23. ~ # ipset add test4 192.168.0.100
  24. ~ # ipset list test4
  25. Name: test4
  26. Type: bitmap:ip
  27. Revision: 3
  28. Header: range 192.168.0.1-192.168.0.100
  29. Size in memory: 76
  30. References: 0
  31. Members:
  32. 192.168.0.100
  33. # example 3
  34. ~ # ipset create test5 bitmap:ip range 192.168.1.0/16
  35. ~ # ipset add test5 192.168.1/16
  36. ~ # ipset list test5
  37. Name: test5
  38. Type: bitmap:ip
  39. Revision: 3
  40. Header: range 192.168.0.0-192.168.255.255
  41. Size in memory: 8252
  42. References: 0
  43. Members:
  44. 192.168.0.1
  45. .
  46. .
  47. .
  48. 192.168.0.255
  49. .
  50. .
  51. .
  52. 192.168.255.255
  53. # example 4
  54. ~ # ipset create test6 bitmap:ip range 192.168.1.0/16
  55. ~ # ipset add test6 192.168.5/24
  56. ~ # ipset list test6
  57. Name: test6
  58. Type: bitmap:ip
  59. Revision: 3
  60. Header: range 192.168.0.0-192.168.255.255
  61. Size in memory: 8252
  62. References: 0
  63. Members:
  64. 192.168.0.1
  65. .
  66. .
  67. .
  68. 192.168.0.255

bitmap:ip,mac

CREATE−OPTIONS := range fromip−toip|ip/cidr [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := ip[,macaddr]
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := ip[,macaddr]
TEST−ENTRY := ip[,macaddr]

举例:

range fromip−toip|ip/cidr:

  1. ~ # ipset create test bitmap:ip,mac range 192.168.0.0/16
  2. ~ # ipset add test 192.168.1.1,12:34:56:78:9A:BC
  3. ~ # ipset add test 192.168.1.2
  4. ~ # ipset list test
  5. Name: test8
  6. Type: bitmap:ip,mac
  7. Revision: 3
  8. Header: range 192.168.0.0-192.168.255.255
  9. Size in memory: 532532
  10. References: 0
  11. Members:
  12. 192.168.1.1,12:34:56:78:9A:BC
  13. 192.168.1.2

bitmap:port

CREATE−OPTIONS := range fromport−toport [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := { [proto:]port | [proto:]fromport−toport }
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := { [proto:]port | [proto:]fromport−toport }
TEST−ENTRY := [proto:]port

举例:

range [proto:]fromport−toport:

  1. ~ # ipset create test bitmap:port range 1024-4096
  2. ~ # ipset add test 30000
  3. ipset v7.15: Element is out of the range of the set
  4. ~ #
  5. ~ # ipset add test 2048
  6. ~ #
  7. ~ # ipset list test
  8. Name: test
  9. Type: bitmap:port
  10. Revision: 3
  11. Header: range 1024-4096
  12. Size in memory: 436
  13. References: 0
  14. Members:
  15. 2048

hash:ip

CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ netmask cidr ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := ipaddr
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := ipaddr
TEST−ENTRY := ipaddr

举例:

  1. ~ # ipset create test hash:ip
  2. ~ # ipset add test 192.168.100.1

hash:mac

CREATE−OPTIONS := [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := macaddr
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := macaddr
TEST−ENTRY := macaddr

举例:

  1. ~ # ipset create test hash:mac
  2. ~ # ipset add test 01:02:03:04:05:06
  3. ~ # ipset test test 01:02:03:04:05:06

hash:ip,mac

CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := ipaddr,macaddr
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := ipaddr,macaddr
TEST−ENTRY := ipaddr,macaddr

举例:

  1. ~ # ipset create test hash:ip,mac
  2. ~ # ipset add test 1.1.1.1,01:02:03:04:05:06
  3. ~ # ipset test test 1.1.1.1,01:02:03:04:05:06

hash:net

CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := netaddr
ADD−OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

举例:

  1. ~ # ipset create test hash:net
  2. ~ # ipset add test 192.168.0.0/24
  3. ~ # ipset add test 10.1.0.0/16
  4. ~ # ipset add test 192.168.0/24
  5. ~ # ipset add test 192.168.0/30 nomatch

hash:net,net

CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := netaddr,netaddr
ADD−OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := netaddr,netaddr
ADD−OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

举例:

  1. ~ # ipset create test hash:net,net
  2. ~ # ipset add test 192.168.0.0/24,10.0.1.0/24
  3. ~ # ipset add test 10.1.0.0/16,10.255.0.0/24
  4. ~ # ipset add test 192.168.0/24,192.168.54.0-192.168.54.255
  5. ~ # ipset add test 192.168.0/30,192.168.64/30 nomatch

hash:ip,port

CREATE−OPTIONS := [ family { inet | inet6 }]|[ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD−ENTRY := ipaddr,[proto:]port
ADD−OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL−ENTRY := ipaddr,[proto:]port
TEST−ENTRY := ipaddr,[proto:]port

举例:

  1. ~ # ipset create test hash:ip,port
  2. ~ # ipset add test 192.168.1.0/24,8082
  3. ~ # ipset add test 192.168.1.1,udp:53
  4. ~ # ipset add test 192.168.1.1,vrrp:0
  5. ~ # ipset test test 192.168.1.1,80
  6. Warning: 192.168.1.1,80 is in set test.

与[转帖]ipset命令介绍与基本使用相似的内容:

[转帖]ipset命令介绍与基本使用

一. 介绍 ipset命令是用于管理内核中IP sets模块的,如iptables之于netfilter。ipset字面意思是一些IP地址组成一个集合(set)。但是ipset用于用于存储IP地址,整个子网,端口号(TCP/UDP),MAC地址,网络接口名或者上述这些的组合。ipset主要是由ipt

[转帖]ipset详解

https://zhuanlan.zhihu.com/p/489103374 ipset创建:create 创建一个新的ipset集合:ipset create SETNAME TYPENAME SETNAME是创建的ipset的名称,TYPENAME是ipset的类型:TYPENAME := me

[转帖]Linux下使用 ipset 封大量IP及ipset参数说明

https://www.cnblogs.com/xiaofeng666/p/10952627.html Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添加成千上万条规则,对机器性能影响较大,使用ipset能解决这个问题。 iptables 包含几个表,

[转帖]IPSec VPN 与 SSL VPN 区别

https://www.cndba.cn/dave/article/3239 SSL VPN,与传统的IPSec VPN技术各具特色,各有千秋。SSL VPN比较适合用于移动用户的远程接入(Client-Site),而IPSec VPN则在网对网(Site-Site)的VPN连接中具备先天优势。这两

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地