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的开发者 ...
随机推荐
- Linux 用户和文件权限管理
Linux —— 用户权限管理 权限: 为什么需要权限管理? 1.计算机资源有限,我们需要合理的分配计算机资源. 2.Linux是一个多用户系统,对于每一个用户来说,个人隐私的保护是十分重 ...
- 对交换机VLAN及各种端口类型的理解
每学习一种技术时,我们往往需要去了解why,即这个技术是为解决什么问题而出现的. VLAN全称为Virtual Local Area Network,即虚拟局域网,是逻辑上的一种划分.一般来说,如果交 ...
- java 提高效率的做法
可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代 ...
- iOS 中代码获取当前版本号
[1]概念 iOS的版本号,一个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中target,点击“Summary”后看到. Version在plist文件中的key是“CF ...
- Spring boot 使用Junt
//@RunWith:启动器,SpringJUnit4ClassRunner:Spring整合JUnit4 //@SpringBootTest获取启动类,相当于@Contextconfiguartio ...
- docker pure-ftp 搭建ftp服务器
参考:https://hub.docker.com/r/stilliard/pure-ftpd/ docker-compose.yml: ftp: image: stilliard/pure-ftpd ...
- js中的关系操作符
1.关于“小于(<)” a.关于数值的判断就是跟正常的比较一样: b.var result = “23” <"3" ; //true 这两个是字符串,会比较他们的编码 ...
- MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...
- html5--6-68 实战前的准备工作:了解HTML5大纲算法
html5--6-68 实战前的准备工作:了解HTML5大纲算法 学习要点 了解HTML5大纲算法 在html5中有一个很重要的概念,叫做HTML5大纲算法(HTML5 Outliner),它的用途为 ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...