linux中ipset命令的使用方法详解

2019-01-16 22:56:45王冬梅

ipset介绍

iptables是在linux内核里配置防火墙规则的用户空间工具,它实际上是netfilter框架的一部分.可能因为iptables是netfilter框架里最常见的部分,所以这个框架通常被称为iptables,iptables是linux从2.4版本引入的防火墙解决方案.

ipset是iptables的扩展,它允许你创建 匹配整个地址sets(地址集合) 的规则。而不像普通的iptables链是线性的存储和过滤,ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找.

除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,IPsets也具备一些新防火墙设计方法,并简化了配置.

官网:http://ipset.netfilter.org/

安装

rpm -ivh libmnl-devel-1.0.2-3.el6.x86_64.rpm libmnl-1.0.2-3.el6.x86_64.rpm tar xvf ipset-6.24.tar.bz2 cd ipset-6.24 ./configure make make install

#注意:

如果在centos6.6或其他情况下安装时候,configure报错如下

configure: error: Invalid kernel source directory /lib/modules/2.6.32-358.el6.x86_64/source

解决:需要安装内核源码包kernel-devel-2.6.32-358.el6.x86_64.rpm

创建ipset

ipset -n或者ipset create:

n, create SETNAME TYPENAME [ CREATE-OPTIONS ]

SETNAME是创建的ipset的名称,TYPENAME是ipset的类型:

TYPENAME := method:datatype[,datatype[,datatype]]

method指定ipset中的entry存放的方式,随后的datatype约定了每个entry的格式。

可以使用的method:

bitmap, hash, list

可以使用的datatype:

ip, net, mac, port, iface

添加记录

ipset add用于在ipset中添加记录:

add SETNAME ADD-ENTRY [ ADD-OPTIONS ]

向ipset中添加entry的时候,加入的entry的格式必须与创建ipset是指定的格式匹配。

$ipset creat foo hash:ip,port,ip $ipset add foo ipaddr,portnum,ipaddr $ipset list foo Name: foo Type: hash:ip,port,ip Revision: 2 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 16584 References: 0 Members: 192.168.1.2,tcp:80,192.168.1.3

删除记录

ipset del用于从ipset中删除记录:

del SETNAME DEL-ENTRY [ DEL-OPTIONS ]

查询记录

ipset test可以检查目标entry是否在ipset中:

test SETNAME TEST-ENTRY [ TEST-OPTIONS ]

ipset list可以查看ipset的所有内容:

list [ SETNAME ] [ OPTIONS ]

导出导入

ipset save可以导出所有的ipset:

save [ SETNAME ]