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的开发者 ...
随机推荐
- (转)我在北京工作这几年 – 一个软件工程师的反省
我于2007年来到北京,在北京工作这些年,先后在NEC.风行.百度几家公司担任软件工程师的职务.NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒.数字电视上嵌入式 ...
- Android(Linux)模拟按键、触摸屏等事件
前提: 在我们应用程序或者在写Android自己主动化測试时候经常会须要模拟实体按键,来给我们做測试用.这也是我要整理的目的. 基本的涉及的是Linux Input Event事件. 下面的样例基于A ...
- vue 安装与起步
vue安装: 1.官网下载vue,在script标签里引用(去下载) 2.使用CDN(建议下载到本地,不推荐这种方法): BootCDN:https://cdn.bootcss.com/vue/2.2 ...
- Direct3D 9 入门样例程序 圆锥体
介绍 Directx3D 9 什么是DirectX,非常好说了,Win32 C++ API.主要是多媒体编程方面的,长处体如今高性能了,如今我知道的版本号最高是D3D11,可是我是学习入门的,从D3D ...
- android-測试so动态库(九)
1.依照androidproject向导一步步新建一个 2.将jar包放在libs文件夹下 3.在libs文件夹下新建armeabi文件夹.以及将so动态库放在该文件夹下 4.引用动态库,代码測试 p ...
- 《ASP.NET》数据绑定—DataList
DataList控件是.NET中的一个控件.DataList控件以表的形式呈现数据(在属性生成器中能够编辑),通过该控件,您能够使用不同的布局来显示数据记录(使用模板编辑).比如,将数据记录排成列或行 ...
- MapReduce算法形式二:去重(HashSet)
案例二:去重(shuffle/HashSet等方法)shuffle主要针对的是key去重HashSet主要针对values去重
- 使用Microsoft Office 2007将文档转换为PDF
点击帮助 输入关键词PDF后搜索 点击进入Save or convert to PDF or XPS 点击进入2007 Microsoft Office Add-in: Microsoft Save ...
- dotnet core 入门
之前一至用的dotnet 做开发,项目没有用过.netcore,现在看微软对dotnetcore的重视度越来越高,所以dotnetcore也是每一个.dotnet开发人员的一项必备技能.一个偶然的机会 ...
- poj 1325 Machine Schedule 解题报告
题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...