ipset 学习总结
用途:当机器受到网络攻击时,使用 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 学习总结的更多相关文章
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Kubernetes学习之路(四)之Node节点二进制部署
K8S Node节点部署 1.部署kubelet (1)二进制包准备 [root@linux-node1 ~]# cd /usr/local/src/kubernetes/server/bin/ [r ...
- 学习openstack(八)
一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...
- 学习openstack(三)
一.OpenStack初探 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初 ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- Intel的东进与ARM的西征(5)--智慧的大窗口,我们都在画里面
http://www.36kr.com/p/200168.html 繁华又算得了什么,不过是星尘的崩碎,那一抹青青的灰.公元 79 年,意大利维苏威火山喷发,已然兴盛了 600 年的庞贝古城被完全湮没 ...
- HDU 2955 Robberies(01背包变形)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- C++ Primer 学习笔记与思考_7 void和void*指针的使用方法
(一)void的含义 void的字面意思是"无类型",void差点儿仅仅有"凝视"和限制程序的作用,由于从来没有人会定义一个void变量,让我们试着来定义: v ...
- (转)我在北京工作这几年 – 一个软件工程师的反省
我于2007年来到北京,在北京工作这些年,先后在NEC.风行.百度几家公司担任软件工程师的职务.NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒.数字电视上嵌入式 ...
- 【读书笔记】iOS-GCD-用法
代码: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { dispatch_async(dispatch_get_gl ...
- redis13-----配置文件
==配置文件全解=== ==基本配置 daemonize no 是否以后台进程启动 databases 创建database的数量(默认选中的是database ) #刷新快照到硬盘中,必须满足两者要 ...
- mysql无法远程访问
最近使用Navicat for MySQl访问远程mysql数据库,出现报错, 显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to ...
- UVA11624 Fire! —— BFS
题目链接:https://vjudge.net/problem/UVA-11624 题解: 坑点:“portions of the maze havecaught on fire”, 表明了起火点不唯 ...
- hdu acm 2844 Coins 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 题目意思:有A1,A2,...,An 这 n 种面值的钱,分别对应的数量是C1,C2,...,C ...
- golang defer使用——资源关闭时候多用
defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源 ...