原文地址 : http://ipset.netfilter.org/
ipset 资料: https://www.linuxjournal.com/content/advanced-firewall-configurations-ipset
ip set 是linux内核的一个内部框架, 可由ipset工具管理,ip set 可以分为以下几种类型:ip地址, 网路地址(网段),tcp/udp 端口号, mac地址, 网卡名称。或者是上述类型的组合,并保证快速的匹配。
ipset 适用于以下几种场景:
(1)一次性存储大量的ip或者端口,用以iptables匹配
(2)在不影响性能的前提下,动态更新iptables规则(针对ip或者端口)
(3)期望使用ipset的告诉匹配,或者在一条iptables规则中表达复杂的 ip/端口规则
(1)bitmap : ip
存储在内存中,利用bitmap数据结构存储, 可以存储 65535个ip地址(B类网络)
(2)bitmap: ip,mac
存储在内存中, 8 bytes 表示一个ip,mac
(3) bitmap: port
同(1), 只是存储的是端口号
(4)hash:ip
使用hash存储ip地址。元素冲突的话,将以数组的形式放在最后
(5)hash:net
使用hash存储网络,与 hash:ip 使用同样的技术避免元素冲突
(6)hash:ip,port
与hash:ip 类似,但是可以存储IP与 协议-端口的组合,支持 tcp sctp udp udplite 加上端口号, 以及icmp icmpv6及其它无端口号的协议。
(7)hash:ip,port,ip
用hash存放 ip,port,ip的组合
(8)hash:ip,port,net
用hash 存放 ip,port, net 的组合
(9)hash:net,port
(10)hash:net,iface
用hash存放 网络 网卡
(11)list:set
用数组存放其它set, 即不同set的有序组合
linux 内核版本 >=3.11
source of ipset http://ipset.netfilter.org/ipset-7.6.tar.bz2
git://git.netfilter.org/ipset.git
ipset
n, create SETNAME TYPENAME [ CREATE-OPTIONS ]
新建集合
add SETNAME ADD-ENTRY [ ADD-OPTIONS ]
向指定集合中新增元素
del SETNAME DEL-ENTRY [ DEL-OPTIONS ]
删除指定集合中的元素
test SETNAME TEST-ENTRY [ TEST-OPTIONS ]
判断元素是否在指定集合,0 存在, 非0 不存在
译者注: 不同集合类型,test 参数会不一致
x, destroy [ SETNAME ]
删除一个或所有集合(参数中未制定集合), 如果集合已经被引用,则无法删除
list [ SETNAME ] [ OPTIONS ]
列出集合条目
save [ SETNAME ]
保存集合指定集合或所有(至指定参数), -file 参数可以保存到制定文件
restore
将ipset集合从 指定文件中恢复存, 通过 -file 参数。需要注意到是, 现有 到集合和元素不会被覆盖, list、 help、 vertsion以及 交互模式下不支持该命令
flush [ SETNAME ]
清空指定集合到所有条目,或所有集合到条目(未指定集合参数)
e, rename SETNAME-FROM SETNAME-TO
重命名集合, SETNAME-TO 必须不存在
w, swap SETNAME-FROM SETNAME-TO
交换集合, 两个集合必须存在, 并且类型兼容
help [ TYPENAME ]
打印帮助信息
version
打印版本号
进入交互模式, 从标准输出读入命令,quit 退出,
其它选项
-!, -exist
忽略错误输出
-o, -output { plain | save | xml }
list命令制定输出格式
-q, -quiet
不输出相关信息, 但是当ipset无法继续运行时,仍然会退出
-r, -resolve
list 命令输出集合条目时, 解析主机名, dns查询可能导致速度缓慢
-s, -sorted
对输出排序
-n, -name
list命令,只输出集合名称
-t, -terse
List 命令只输出集合名称和头部,忽略条目
-f, -file filename
list save restore 命令,用于指定文件名称
ip, net, mac, port, iface 这类参数用 “,” 逗号隔开, 但是主机名包含段短横线“-”时, 必须放在方括号“[]” 中, 并且,ipset 会去解析主机名,如果解析出多个ip, 只使用第一个.
bitmap, list类型,使用固定长度存储空间。 hash 类型是用hash存放元素, 为了避免hash冲突, 会现在链到长度,如果上到到达限制,在使用iset添加条目时,将hash大小加倍。当集合中到条目被应用到iptables时, hash大小是固定到, 集合也不能重复,新到条目也不能加载到集合中。
常见 create add 命令选项
timeout
未完待续。。。。。