[转帖]ipset详解
https://zhuanlan.zhihu.com/p/489103374
ipset创建:create
创建一个新的ipset集合:ipset create SETNAME TYPENAME
- SETNAME是创建的ipset的名称,TYPENAME是ipset的类型:TYPENAME := method:datatype[,datatype[,datatype]]
2.method指定ipset中的entry存放的方式,随后的datatype约定了每个entry的格式。
可以使用的method:(后面会详细解释)
bitmap, hash, list
可以使用的datatype:(后面会详细解释)
ip, net, mac, port, iface
例如:
添加条目:add
将ip/port/ip-ip等添加到ipset集合中:ipset add SETNAME ENTRY
向集合中添加条目时需要注意,创建的集合属于哪种类型,在添加时的数据就要符合对应的类型,如下所示
查询条目:list / test
1. 查询对应集合中的具体ip条目内容: ipset list [SETNAME]
2. 检查目标ip是否在ipset集合中:ipset test SETNAME ENTRY
删除条目:del / flush
1. 删除集合中的某ip条目:ipset del SETNAME ENTRY
2. 删除ipset某集合的所有ip条目:flush 【SETNAME】
3. 清空ipset中所有集合的ip条目(删条目,不删集合):ipset flush
4. 删除ipset中的某个集合或者所有集合:ipset destroy [SETNAME]
创建和添加选项(CREATE&ADD-OPTIONS):
1. timeout 超时时间/生效时间 (所有集合适用)
timeout设置超时时间,如果设置为0,表示永久生效,超时时间可以通过 -exist来进行修改
2. counters, packets, bytes (所有集合适用)
如果指定了该选项,则使用每个元素支持的包和字节计数器创建集合。当元素(重新)添加到集合中时,除非包和字节选项显式指定包和字节计数器值,否则包和字节计数器将初始化为零。
3. comment 备注(所有集合适用)
在ipset上启用此扩展可以使用任意字符串注释ipset条目。内核和ipset本身完全忽略这个字符串,纯粹是为了提供一种方便的方法来记录条目存在的原因。注释不能包含任何引号,通常的转义字符()没有任何意义。
4. skbinfo, skbmark, skbprio, skbqueue (所有集合适用)
这个扩展允许您存储每个条目的metainfo(防火墙标记、tc类和硬件队列),并使用SET netfilter target和——map- SET选项将其映射到包。skbmark选项格式:MARK或MARK/MASK,其中MARK和MASK为32位十六进制数字,前缀为0x。如果只指定标记,则使用掩码0xffffffff。skbprio选项有tc类格式:MAJOR:MINOR,其中MAJOR和MINOR号是十六进制,没有0x前缀。skbqueue选项只是一个小数。
ps:这里不是很懂,就没有做案例了,有了解的大神,希望可以指导一下。
5. hashsize 集合的初始哈希大小(hsah集合适用)
它定义了集合的初始哈希大小,默认值为1024。哈希大小必须是2的幂,内核会自动舍入两个哈希大小的非幂到第一个正确的值。
6. maxelem 集合存储最大数量(hsah集合适用)
它定义了可以存储在集合中的元素的最大数量,默认值为65536
7. family { inet | inet6 } IPv4/IPv6 (适用hash集合(hash:mac除外))
这个参数对于除hash:mac之外的所有hash类型集的create命令都是有效的。它定义了要存储在集合中的IP地址的协议族
8. nomatch (hash:net适用 ):
可以存储网络数据类型的哈希集类型(即hash:net)在添加条目时支持可选的nomatch选项。当匹配集合中的元素时,将跳过标记为nomatch的条目,就好像这些条目没有添加到集合中一样,这使得在异常情况下构建集合成为可能。参见下面的hash类型hash:net中的示例。当ipset测试元素时,会考虑nomatch标志。如果想要测试集合中使用nomatch标记的元素是否存在,那么也必须指定该标志。
也就是说,这个通常与hash:net搭配使用,用来跳过 hash:net指定的ip netmask address.
9. forceadd 集合满时,随机删除(所有集合适用)
当使用此选项创建的集合已满时,集合的下一个添加项可能成功并从集合中删除随机项。
SET TYPES 集合类型:
method存储方式:
存储方式有 bitmap, hash, list;
bitmap和list: 使用固定大小的存储.
hash: 使用hash表来存储元素。但为了避免Hash表键冲突,在ipset会在hash表key用完后,若又有新增条目,则ipset将自动对hash表扩大,假如当前哈希表大小为100条,则它将扩展为200条。当在iptables/ip6tables中使用了ipset hash类型的集合,则该集合将不能再新增条目。
hash的自增
前面说过:bitmap link 的储存方式的集合大小是固定,hash类型的储存大小是可变的
下面回顾一下hash的两个参数
- hashsize:指定了创建集合时初始大小
2. maxelem:指定了集合最大存储记录的数量
默认hashsize大小是1024,如果满了 hash 会自动扩容为之前的两倍,最大能存储的数量是 65536 个.
这时我们可以进行默认值大小的设置和最大值的设置:
如果集合中最大存储数量不能满足配置的ip数量,则会出现下面的问题:
这也再次证明,其实在hash:ip和hash:ip,port中,即使配置的时候是以ip段的方式配置的,但是存储的时候还是按照单个ip进行保存的。
这里需要注意的是,一旦使用 hash:ip和hash:ip,port 方式 进行ipset配置,而ip又非常多的话,可能会出现下面的情况.(最后是使用hash:net替换hash:ip解决的)
datatype数据类型:
支持的类型有:ip, net, mac, port, iface,即除了ip外,还可以是网络段,端口号(支持指定 TCP/UDP 协议),mac 地址,网络接口名称,或者多种。在创建的时候,指定是什么类型,在添加的时候,数据就要按照对应的格式来,不然就会报错
Supported set types 支持的集合类型:
1. hash:ip
使用哈希存储ip主机地址(默认)或网络地址。零值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
关于netmask :当指定可选的netmask参数时,网络地址将存储在集合中,而不是IP主机地址。cidr前缀值必须在IPv4的1-32和IPv6的1-128之间。如果网络地址是用netmas屏蔽的,则IP地址将在集合中
2. hash:net
使用集合存储不同大小的IP网络地址。前缀大小为零的网络地址不能存储在这种类型的集合中。
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 ]
DEL-ENTRY := netaddr
TEST-ENTRY := netaddr
where netaddr := ip[/cidr]
在添加/删除/测试条目时,如果没有指定cidr前缀参数,则假定主机前缀值。当添加/删除条目时,内核将添加/删除确切的元素,并且不检查重叠元素。当测试条目时,如果测试了主机地址,那么内核将尝试匹配添加到集的网络中的主机地址,并相应地报告结果。netfilter匹配从集合的角度寻找匹配总是从最小的尺寸用于网段(最具体的前缀)最大的一个(至少特定前缀)添加到集合。当添加/删除IP地址设置netfilter设定的目标,它将被添加/删除最特定的前缀,可以发现在一组,或由主机前缀值如果设置为空。查找时间随着添加到集合中的不同前缀值的数量线性增长。
3. hash:ip,port
使用hash存储IP地址和端口号对。端口号与协议(默认TCP)一起,不能使用零协议号
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
注意:
如果创建集合是指定的存储内容包含 ip, 例如 hash:ip 或 hash:ip,port ,在添加记录时,可以填 IP 段,但是仍然是以单独一个个 IP 的方式来存储的
4. hash:ip,port,net
使用hash存储IP地址、端口号和IP网络地址三元组。端口号与协议(默认TCP)一起,不能使用零协议号。前缀大小为零的网络地址也不能存储。
CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
ADD-ENTRY := ipaddr,[proto:]port,netaddr
ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
DEL-ENTRY := ipaddr,[proto:]port,netaddr
TEST-ENTRY := ipaddr,[proto:]port,netaddr
where netaddr := ip[/cidr]
上面仅做4个常用的进行介绍,还有很多其他的类型可供使用
还有下面几个未做介绍(有空再更)
bitmap:ip
bitmap:ip,mac
bitmap:port
hash:mac
hash:ip,mac
hash:net,net
hash:net,port
hash:ip,port,ip
hash:ip,mark
hash:net,port,net
hash:net,iface
list:set
ipset和iptables:
在iptables中使用ipset,只要加上-m set --match-set即可。(这里只做简单的介绍)
- 目的ip使用ipset(ipset集合为bbb)
iptables -I INPUT -s 192.168.100.36 -m set --match-set bbb dst -j DROP
源ip使用ipset(ipset集合为aaa)
iptables -I INPUT -m set --match-set aaa src -d 192.168.100.36 -j DROP
源和目的都使用ipset(源ip集合为aaa,目的ip集合为bbb)
iptables -I INPUT -m set --match-set aaa src -m set --match-set bbb dst -j DROP
[转帖]ipset详解的更多相关文章
- [转帖]万字详解Oracle架构、原理、进程,学会世间再无复杂架构
万字详解Oracle架构.原理.进程,学会世间再无复杂架构 http://www.itpub.net/2019/04/24/1694/ 里面的图特别好 数据和云 2019-04-24 09:11:59 ...
- [转帖]HBase详解(很全面)
HBase详解(很全面) very long story 简单看了一遍 很多不明白的地方.. 2018-06-08 16:12:32 卢子墨 阅读数 34857更多 分类专栏: HBase [转自 ...
- [转帖]批处理-For详解
批处理-For详解 https://www.cnblogs.com/DswCnblog/p/5435300.html for 循环的写法 感觉非常好. 今天下午的时候简单测试了下. 多学习提高 非常重 ...
- [转帖]前端-chromeF12 谷歌开发者工具详解 Network篇
前端-chromeF12 谷歌开发者工具详解 Network篇 https://blog.csdn.net/qq_39892932/article/details/82493922 blog 也是原作 ...
- [转帖]Linux的wget命令详解
Linux的wget命令详解 来源不明 找到的也是转帖的 https://www.cnblogs.com/cindy-cindy/p/6847502.html Linux wget是一个下载文件的工具 ...
- 字符编码详解及由来(UNICODE,UTF-8,GBK)[转帖]
相信許多人對字符編碼都不是很了解,透過下文可以清晰的理解各种字符编码方式详解及由来. 一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS ...
- PHP5 session 详解【经典】 -- 转帖
PHP5 session 详解[经典] http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议.所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的.而越 ...
- [转帖]Sqlcmd使用详解
Sqlcmd使用详解 2018年09月17日 13:36:39 吥輕誩放棄 阅读数:3053 版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- [转帖]cmd批处理常用符号详解
cmd批处理常用符号详解 https://www.jb51.net/article/32866.htm 很多符号 还是不清楚的.. 批处理能够极大的提高 工作效率 需要加强深入学习. 1.@一般在 ...
- [转帖]Windows注册表内容详解
Windows注册表内容详解 来源:http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html 对 windows注册表一知半解 不是很清晰 这里学习一下 ...
随机推荐
- 从标准到开发,解读基于MOF的应用模型管理
摘要:为了打破技术与业务的壁垒,搭建技术与业务的桥梁,因此基于如下流程实现应用业务模型管理 ROMA ABM. 在数字经济时代,数据正在成为企业极其重要的战略性资产.在政府方面,数据第一次作为新型生产 ...
- 华为云FusionInsight助力宇宙行打造金融数据湖新标杆
摘要:工行采用了华为云FusionInsight MRS大数据存算分离方案,实现了大数据平台与OBS对象存储服务的对接,将原有的HDFS数据无缝迁移到OBS上.在保证性能的前提下,实现了计算与存储独立 ...
- 云图说丨什么是应用身份管理服务OneAccess
摘要: OneAccess是华为云提供的应用身份管理服务,具备集中式的身份管理.认证和授权能力,保证企业用户根据权限访问受信任的云端和本地应用系统,并对异常访问行为进行有效防范,真正做到事前预防.事中 ...
- Nacos是什么?
摘要:Nacos是 Dynamic Naming and Configuration Service的首字母简称,相较之下,它更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. 本文分享自华 ...
- GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率
摘要:GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障.因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员 ...
- 带你了解敏捷和DevOps的发布策略
摘要:随着数字化.信息化.网络化和智能化的普及和发展,企业对软件服务的质量和上线速度要求越来越高.传统研发模式难以满足要求,企业的开发运维模式逐渐向敏捷和DevOps 转型,敏捷和DevOps理念正被 ...
- Solon 的热插拔能力框架 “solon.hotplug” 介绍
<dependency> <groupId>org.noear</groupId> <artifactId>solon.hotplug</arti ...
- CountDownLatch、CyclicBarrier 使用区别
主要区别 CountDownLatch:所有子线程完成后,再执行主线程 CyclicBarrier: 所有子线程就绪后,再执行子线程 CountDownLatch 所有子线程完成后,再执行主线程 多线 ...
- SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同
1. 介质集有 2 个介质簇,但只提供了 1 个.必须提供所有成员. 因为在备份时有两个路径,所以备份文件会放在两个文件里面,所以在还原的时候只要把两个都添加了就可以还原了. 2. 备份集中的数据库备 ...
- Go--gjson
GJSON 是一个用于处理 JSON 数据的 Go 语言库.它提供了一些方便的功能,例如解析 JSON 字符串.查询 JSON 对象.生成 JSON 对象等 下载gjson: go get -u gi ...