[转帖]ipset命令介绍与基本使用
一. 介绍
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命令基本介绍与使用
格式:
#ipset命令格式 ipset [ OPTIONS ] COMMAND [ COMMAND−OPTIONS ] COMMANDS := { create | add | del | test | destroy | list | save | restore | flush | rename | swap | help | version | − } OPTIONS := { −exist | −output { plain | save | xml } | −quiet | −resolve | −sorted | −name | −terse | −file filename } ipset create SETNAME TYPENAME [ CREATE−OPTIONS ] ipset add SETNAME ADD−ENTRY [ ADD−OPTIONS ] ipset del SETNAME DEL−ENTRY [ DEL−OPTIONS ] ipset test SETNAME TEST−ENTRY [ TEST−OPTIONS ] ipset destroy [ SETNAME ] ipset list [ SETNAME ] ipset save [ SETNAME ] ipset restore ipset flush [ SETNAME ] ipset rename SETNAME−FROM SETNAME−TO ipset swap SETNAME−FROM SETNAME−TO ipset help [ TYPENAME ] ipset version 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集合输出的格式:
# 创建名称为test的IP集 ~ # ipset create test hash:ip # 添加114.114.114.114到test IP集中 ~ # ipset add test 114.114.114.114 # 以普通文本格式输出test IP集内容 ~ # ipset list test -output plain Name: test Type: hash:ip Revision: 4 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 8264 References: 0 Members: 114.114.114.114 # 以保存格式输出test IP集内容 ~ # ipset list test -output save create test hash:ip family inet hashsize 1024 maxelem 65536 add test 114.114.114.114 # 以XML格式输出test IP集内容 ~ # ipset list test -output xml <ipsets> <ipset name="test"> <type>hash:ip</type> <revision>4</revision> <header><family>inet</family><hashsize>1024</hashsize><maxelem>65536</maxelem> <memsize>8264</memsize> <references>0</references> </header> <members> <member><elem>114.114.114.114</elem></member> </members> </ipset> </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集中删除。
-
# test IP集新添加的条目的默认超时时间300s
-
ipset create test hash:ip timeout 300
-
-
# 192.168.0.1在60s后从test IP集中移除
-
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:
# example 1 ~ # ipset create test3 bitmap:ip range 192.168.0.1-192.168.0.255 ~ # ipset add test3 192.168.1/24 ~ # ipset list test3 Name: test3 Type: bitmap:ip Revision: 3 Header: range 192.168.0.1-192.168.0.255 Size in memory: 92 References: 0 Members: 192.168.0.1 . . . 192.168.0.255 # example 2 ~ # ipset create test4 bitmap:ip range 192.168.0.1-192.168.0.100 ~ # ~ # ipset add test4 192.168.0/24 ipset v7.15: Element is out of the range of the set ~ # ~ # ipset add test4 192.168.0.100 ~ # ipset list test4 Name: test4 Type: bitmap:ip Revision: 3 Header: range 192.168.0.1-192.168.0.100 Size in memory: 76 References: 0 Members: 192.168.0.100 # example 3 ~ # ipset create test5 bitmap:ip range 192.168.1.0/16 ~ # ipset add test5 192.168.1/16 ~ # ipset list test5 Name: test5 Type: bitmap:ip Revision: 3 Header: range 192.168.0.0-192.168.255.255 Size in memory: 8252 References: 0 Members: 192.168.0.1 . . . 192.168.0.255 . . . 192.168.255.255 # example 4 ~ # ipset create test6 bitmap:ip range 192.168.1.0/16 ~ # ipset add test6 192.168.5/24 ~ # ipset list test6 Name: test6 Type: bitmap:ip Revision: 3 Header: range 192.168.0.0-192.168.255.255 Size in memory: 8252 References: 0 Members: 192.168.0.1 . . . 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:
-
~ # ipset create test bitmap:ip,mac range 192.168.0.0/16
-
~ # ipset add test 192.168.1.1,12:34:56:78:9A:BC
-
~ # ipset add test 192.168.1.2
-
~ # ipset list test
-
Name: test8
-
Type: bitmap:ip,mac
-
Revision: 3
-
Header: range 192.168.0.0-192.168.255.255
-
Size in memory: 532532
-
References: 0
-
Members:
-
192.168.1.1,12:34:56:78:9A:BC
-
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:
~ # ipset create test bitmap:port range 1024-4096 ~ # ipset add test 30000 ipset v7.15: Element is out of the range of the set ~ # ~ # ipset add test 2048 ~ # ~ # ipset list test Name: test Type: bitmap:port Revision: 3 Header: range 1024-4096 Size in memory: 436 References: 0 Members: 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
举例:
-
~ # ipset create test hash:ip
-
~ # 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
举例:
-
~ # ipset create test hash:mac
-
~ # ipset add test 01:02:03:04:05:06
-
~ # 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
举例:
-
~ # ipset create test hash:ip,mac
-
~ # ipset add test 1.1.1.1,01:02:03:04:05:06
-
~ # 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 ]
举例:
-
~ # ipset create test hash:net
-
~ # ipset add test 192.168.0.0/24
-
~ # ipset add test 10.1.0.0/16
-
~ # ipset add test 192.168.0/24
-
~ # 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 ]
举例:
-
~ # ipset create test hash:net,net
-
~ # ipset add test 192.168.0.0/24,10.0.1.0/24
-
~ # ipset add test 10.1.0.0/16,10.255.0.0/24
-
~ # ipset add test 192.168.0/24,192.168.54.0-192.168.54.255
-
~ # 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
举例:
-
~ # 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,80
-
Warning: 192.168.1.1,80 is in set test.
[转帖]ipset命令介绍与基本使用的更多相关文章
- [转帖]十二 个经典 Linux 进程管理命令介绍
https://www.cnblogs.com/swordxia/p/4550825.html 接了 http referer 头 没法显示图片 可以去原始blog 里面去查看. 随笔- 109 ...
- 12个Linux进程管理命令介绍(转)
12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国 作者:Linux [字体:大 中 小] 执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...
- 2.SDK目录结构和adb工具及命令介绍
安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 1.SDK目录介绍: ******************************** add-ons:Androi ...
- git各种命令介绍以及碰到的各种坑
一.各种命令介绍: git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地 ...
- tar.xz如何解压:linux和windows下tar.xz解压命令介绍
在linux下怎么解压和压缩tar.xz文件? (本文由www.169it.com搜集整理) 在linux下解压tar.xz文件步骤 1 2 # xz -d ***.tar.xz //先解压xz # ...
- 查看MySQL数据库表的命令介绍
如果需要查看MySQL数据库中都有哪些MySQL数据库表,应该如何实现呢?下面就为您介绍查看MySQL数据库表的命令,供您参考. 进入MySQL Command line client下查看当前使用的 ...
- Docker学习总结之Run命令介绍
Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...
- maven常用命令介绍
mvn 3.0.4 创建maven项目命令 mvn archetype:generate -DgroupId=damocles-autocredit -DartifactId=damocles ...
- Pacman命令介绍
用pacman很久了,一直没有深入去研究到底它包含多少神秘的力量,每次都是pacman -Syu就简单的把所有升级更新问题搞定实在是让笔者懒惰了很多.不过也正是因为pacman的简单让笔者爱不释手,同 ...
- Android Debug Bridge命令介绍[转]
Android Debug Bridge命令介绍 Android Debug Bridge的一些基本命令.这个工具直译过来就是Android调试桥的意思.它提供了强大的特性,例如复制文件到设备或从设备 ...
随机推荐
- nacos-config配置中心
依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-clou ...
- LeetCode141环形链表I、II
141. 环形链表 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. ...
- 云图说|云数据库GaussDB如何做到卓越性能
摘要:对于数据库来说,性能一直被视为最关键的部分.GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区&l ...
- 云小课|云小课带您快速了解LTS可视化查看
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 可视化查看是日志 ...
- C# CRC8
C# CRC8 C# /// /// This enum is used to indicate what kind of checksum you will be calculating. /// ...
- 【数据库】E-R图向关系模型转换的规则
E-R图向关系模型转换的规则: (1) 一个实体型转换为一个关系模式,实体的属性就是关系的属性,实体的码(关键字)就是关系的码. (2) 一个 1:1 联系可以转换为一个独立的关系模式,也可以与任意一 ...
- 6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...
- 服务降级,限流等--sentinel(SpringCloud Alibaba)
一. 介绍Sentinel,中文翻译为哨兵,是为微服务提供流量控制.熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的"雪崩"效应,为微服务系统提供了 ...
- vue 状态管理 二、状态管理的基本使用
系列导航 vue 状态管理 一.状态管理概念和基本结构 vue 状态管理 二.状态管理的基本使用 vue 状态管理 三.Mutations和Getters用法 vue 状态管理 四.Action用法 ...
- FrameWork使用TraeFik连接Grpc的坑
背景介绍:因为公司最近使用TraeFik来代替nginx做代理服务器.导致一些老项目访问Grpc的时候直接Status(StatusCode=Unavailable, Detail="fai ...
