精华内容
下载资源
问答
  • 使用ipset精简iptables规则的IP列表
    千次阅读
    2022-02-13 09:32:25

    使用ipset精简iptables规则的IP列表

    一、ipset命令的基本用法

    摘要

    ipset -N 集合 类型描述 [选项]
    ipset - [XFLSHh] [集合] [选项]
    ipset - [EW] 进设置 出设置
    ipset - [ADU] 集合元素
    ipset -B集合元素-b binding
    ipset -T集合元素 [-b binding]
    ipset -R

    命令

    这些选项明确地指定了执行的活动。只有一个命令可以在命令行中规定除非其他的命令在下面。对于所有的长版本命令和选项名称,必须使用足够大的空间以确保ipset可以把他们和其他的选项区分开。

    -N, --创建 集合名称 类型 类型具体选项
    创建一个用集合名称命名并且指定类型的集合。类型具体选项必须是系统规定的。

    -X, --删除 [集合名称]
    删除指定的集合,如果没有指定或者指定all就删除全部集合。在删除集合之前,所有基于集合的绑定和默认绑定都会被移除。
    如果集合已经被使用,则什么都不做。

    -F, --清空 [集合名称]
    删除指定集合中的所有规则, 如果没有指定或者指定了all就清空所有的集合。绑定不会受到清空操作的影响。

    -E, --重命名 旧集合名 新集合名
    重命名集合,新集合名的标识必须是目前不存在。

    -W, --交换 源集合名 目的集合名
    交换两个集合的内容,或者说交换两个集合的名称。这两个集合必须是存在的而且是具有相同的类型才能交换。

    -L, --列出 [集合名名称]
    列出指定集合的规则和绑定,如果没有指定或者指定为all就列出所有的集合。-n选项,数字选项可以用来限定名称查找和生产数字输出,当-s ,分类选项已经使用,规则将分类排列(如果给出的集合类型支持这个选项)。

    -S, --保存 [集合名称]
    保存指定名称的集合,如果没有指定或者指定为all,则保持所有集合:指定恢复可以读取的标准输出格式。

    -R, --复原
    复原已保存的会话.已被保存的会话可以是标准输入提供的。
    当产生一个会话文件的时候请注意支持的命令(创建集合,添加元素,绑定)必须遵循严格的规范:首先创建集合添加所有属于它的集合等等,最后你可以列出所有的绑定命令.此外,这是一个复原选项,所以复原的集合必须是不存在的。

    -A, --添加 集合名称 IP
    往集合中添加一个ip。

    -D, --删除 集合名称IP
    从集合中删除一个ip

    -T, --测试 集合名称 IP
    测试一个ip是不是在集合中,要是ip在集合中返回0,如果ip不在集合中则返回非0.

    -T, --测试 集合名称 IP 绑定的目的集合
    测试ip是否附属指定集合的绑定点。如果成功返回0,否则返回非0.关键字default可以用来测试集合的默认绑定。

    -B, --绑定 集合名称 IP 绑定的目的集合
    绑定集合里的ip和目的集合

    -U, --解除绑定 集合名称 IP
    删除集合中指定ip的绑定。

    -H, --帮助 [设置类型]
    找出指定设置类型的帮助信息。
    在-B –U和-T命令,你可以使用默认的:default,去绑定,解除绑定或者测试默认绑定去代替ip.在-U命令中你可以使用默认的:all去删除绑定集合的所有元素。

    其他选项

    接下来的选项可以被指定

    -b, --binding setname

    这个选择为-B绑定选项指定值。这是一个强制性的命令. 你在-T中可以用来测试绑定。

    -s, --分类
    分类标准输出.当监听集合,规则列表分类的时候。

    -n, --数字
    数字输出。当监听集合,绑定,ip地址和端口好需要输出的时候使用数字格式. 默认的系统试着去显示这些信息用主机名,网络名和服务,这会引起dns查找。

    -q, --安静
    禁止在标准输出和标准错误上有认可输出但是ipset还是会返回可能的错误。

    二、管理ipset列表

    1、初始化IP列表
    ipset create \[name\] hash:net

    2、向列表中添加IP
    ipset add \[name\] ip

    3、从列表中删除IP
    ipset del \[name\] ip

    4、销毁IP列表
    ipset destroy \[name\]

    三、通过iptables引用ipset列表

    1、先初始化一个IPSET列表
    ipset create blacklist hash:net

    2、向IPSET列表中添加要屏蔽的IP
    ipset add blacklist 1.1.1.1

    3、将IPSET列表引用iptables规则
    iptables -I INPUT -m set --match-set blacklist src -j DROP

    通过 -m set 引用iptables的set模块,--match-set 匹配ipset列表名称,src 表示指定列表为来源IP列表。
    注意:当ipset列表更新时,需要重新添加iptables规则才会生效。

    更多相关内容
  • ipset是linux kernel的一个功能,可以将ip等组合成一个ipset,在iptables中可以直接指定ipset。下面这篇文章主要给大家介绍了关于linux中ipset命令的使用方法,文中介绍的非常详细,需要的朋友们下面来一起学习学习...
  • ipset-6.32

    2017-09-30 12:57:25
    ipset-6.32.tar,工具亲测,正式环境在用,使用有问题可关注我联系
  • 易语言模块ipset.rar

    2020-03-29 11:05:34
    易语言模块ipset.rar 易语言模块ipset.rar 易语言模块ipset.rar 易语言模块ipset.rar 易语言模块ipset.rar 易语言模块ipset.rar
  • ipset详解

    万次阅读 2019-09-29 15:44:10
    ipset创建:create 创建一个新的ipset集合:ipset create SETNAME TYPENAME SETNAME是创建的ipset的名称,TYPENAME是ipset的类型: TYPENAME := method:datatype[,datatype[,datatype]] method指定ipset中的...

    ipset创建:create

    创建一个新的ipset集合:ipset create SETNAME TYPENAME

    在这里插入图片描述

    1. SETNAME是创建的ipset的名称,TYPENAME是ipset的类型:
      TYPENAME := method:datatype[,datatype[,datatype]]

    2. method指定ipset中的entry存放的方式,随后的datatype约定了每个entry的格式。
      可以使用的method:(后面会详细解释)
      bitmap, hash, list
      可以使用的datatype:(后面会详细解释)
      ip, net, mac, port, iface
      例如:
      在这里插入图片描述

    添加条目:add

    将ip/port/ip-ip等添加到ipset集合中:ipset add SETNAME ENTRY

    在这里插入图片描述
    向集合中添加条目时需要注意,创建的集合属于哪种类型,在添加时的数据就要符合对应的类型,如下所示
    在这里插入图片描述

    查询条目:list / test

    1. 查询对应集合中的具体ip条目内容: ipset list [SETNAME]

    在这里插入图片描述
    在这里插入图片描述

    2. 检查目标ip是否在ipset集合中:ipset test SETNAME ENTRY

    在这里插入图片描述
    在这里插入图片描述

    删除条目:del / flush

    1. 删除集合中的某ip条目:ipset del SETNAME ENTRY

    在这里插入图片描述
    在这里插入图片描述

    2. 删除ipset某集合的所有ip条目:flush 【SETNAME】

    在这里插入图片描述
    在这里插入图片描述

    3. 清空ipset中所有集合的ip条目(删条目,不删集合):ipset flush

    在这里插入图片描述

    4. 删除ipset中的某个集合或者所有集合:ipset destroy [SETNAME]

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    创建和添加选项(CREATE&ADD-OPTIONS):

    1. timeout 超时时间/生效时间 (所有集合适用)

    timeout设置超时时间,如果设置为0,表示永久生效,超时时间可以通过 -exist来进行修改
    在这里插入图片描述

    2. counters, packets, bytes (所有集合适用)

    如果指定了该选项,则使用每个元素支持的包和字节计数器创建集合。当元素(重新)添加到集合中时,除非包和字节选项显式指定包和字节计数器值,否则包和字节计数器将初始化为零。
    在这里插入图片描述

    3. comment 备注(所有集合适用)

    在ipset上启用此扩展可以使用任意字符串注释ipset条目。内核和ipset本身完全忽略这个字符串,纯粹是为了提供一种方便的方法来记录条目存在的原因。注释不能包含任何引号,通常的转义字符()没有任何意义。
    在这里插入图片描述

    4. skbinfo, skbmark, skbprio, skbqueue (所有集合适用)

    这个扩展允许您存储每个条目的metainfo(防火墙标记、tc类和硬件队列),并使用SET netfilter target和——map- SET选项将其映射到包。skbmark选项格式:MARK或MARK/MASK,其中MARK和MASK为32位十六进制数字,前缀为0x。如果只指定标记,则使用掩码0xffffffff。skbprio选项有tc类格式:MAJOR:MINOR,其中MAJOR和MINOR号是十六进制,没有0x前缀。skbqueue选项只是一个小数。

    ps:这里不是很懂,就没有做案例了,有了解的大神,希望可以指导一下。

    5. hashsize 集合的初始哈希大小(hsah集合适用)

    它定义了集合的初始哈希大小,默认值为1024。哈希大小必须是2的幂,内核会自动舍入两个哈希大小的非幂到第一个正确的值。
    在这里插入图片描述
    在这里插入图片描述

    6. maxelem 集合存储最大数量(hsah集合适用)

    它定义了可以存储在集合中的元素的最大数量,默认值为65536
    在这里插入图片描述
    在这里插入图片描述

    7. family { inet | inet6 } IPv4/IPv6 (适用hash集合(hash:mac除外))

    这个参数对于除hash:mac之外的所有hash类型集的create命令都是有效的。它定义了要存储在集合中的IP地址的协议族
    在这里插入图片描述

    8. nomatch (hash:net适用 ):

    可以存储网络数据类型的哈希集类型(即hash:net)在添加条目时支持可选的nomatch选项。当匹配集合中的元素时,将跳过标记为nomatch的条目,就好像这些条目没有添加到集合中一样,这使得在异常情况下构建集合成为可能。参见下面的hash类型hash:net中的示例。当ipset测试元素时,会考虑nomatch标志。如果想要测试集合中使用nomatch标记的元素是否存在,那么也必须指定该标志。
    也就是说,这个通常与hash:net搭配使用,用来跳过 hash:net指定的ip netmask address.

    9. forceadd 集合满时,随机删除(所有集合适用)

    当使用此选项创建的集合已满时,集合的下一个添加项可能成功并从集合中删除随机项。

    SET TYPES 集合类型:

    method存储方式:
    存储方式有 bitmap, hash, list
    bitmap和list: 使用固定大小的存储.
    hash: 使用hash表来存储元素。但为了避免Hash表键冲突,在ipset会在hash表key用完后,若又有新增条目,则ipset将自动对hash表扩大,假如当前哈希表大小为100条,则它将扩展为200条。当在iptables/ip6tables中使用了ipset hash类型的集合,则该集合将不能再新增条目。

    hash的自增
    前面说过:bitmap link 的储存方式的集合大小是固定,hash类型的储存大小是可变的
    下面回顾一下hash的两个参数

    1. hashsize:指定了创建集合时初始大小
    2. maxelem:指定了集合最大存储记录的数量

    在这里插入图片描述
    默认hashsize大小是1024,如果满了 hash 会自动扩容为之前的两倍,最大能存储的数量是 65536 个.
    这时我们可以进行默认值大小的设置和最大值的设置:
    在这里插入图片描述
    如果集合中最大存储数量不能满足配置的ip数量,则会出现下面的问题:
    这也再次证明,其实在hash:ip和hash:ip,port中,即使配置的时候是以ip段的方式配置的,但是存储的时候还是按照单个ip进行保存的。
    在这里插入图片描述
    这里需要注意的是,一旦使用 hash:ip和hash:ip,port 方式 进行ipset配置,而ip又非常多的话,可能会出现下面的情况.(最后是使用hash:net替换hash:ip解决的)
    在这里插入图片描述

    datatype数据类型:
    支持的类型有:ip, net, mac, port, iface,即除了ip外,还可以是网络段,端口号(支持指定 TCP/UDP 协议),mac 地址,网络接口名称,或者多种。在创建的时候,指定是什么类型,在添加的时候,数据就要按照对应的格式来,不然就会报错

    Supported set types 支持的集合类型:

    1. hash:ip

    使用哈希存储ip主机地址(默认)或网络地址。零值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
    在这里插入图片描述
    关于netmask :当指定可选的netmask参数时,网络地址将存储在集合中,而不是IP主机地址。cidr前缀值必须在IPv4的1-32和IPv6的1-128之间。如果网络地址是用netmas屏蔽的,则IP地址将在集合中在这里插入图片描述

    2. hash:net

    使用集合存储不同大小的IP网络地址。前缀大小为零的网络地址不能存储在这种类型的集合中。
    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 ]
    DEL-ENTRY := netaddr
    TEST-ENTRY := netaddr
    where netaddr := ip[/cidr]

    在添加/删除/测试条目时,如果没有指定cidr前缀参数,则假定主机前缀值。当添加/删除条目时,内核将添加/删除确切的元素,并且不检查重叠元素。当测试条目时,如果测试了主机地址,那么内核将尝试匹配添加到集的网络中的主机地址,并相应地报告结果。netfilter匹配从集合的角度寻找匹配总是从最小的尺寸用于网段(最具体的前缀)最大的一个(至少特定前缀)添加到集合。当添加/删除IP地址设置netfilter设定的目标,它将被添加/删除最特定的前缀,可以发现在一组,或由主机前缀值如果设置为空。查找时间随着添加到集合中的不同前缀值的数量线性增长。
    在这里插入图片描述

    3. hash:ip,port

    使用hash存储IP地址和端口号对。端口号与协议(默认TCP)一起,不能使用零协议号
    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
    在这里插入图片描述
    注意:
    如果创建集合是指定的存储内容包含 ip, 例如 hash:ip 或 hash:ip,port ,在添加记录时,可以填 IP 段,但是仍然是以单独一个个 IP 的方式来存储的
    在这里插入图片描述

    4. hash:ip,port,net

    使用hash存储IP地址、端口号和IP网络地址三元组。端口号与协议(默认TCP)一起,不能使用零协议号。前缀大小为零的网络地址也不能存储。
    CREATE-OPTIONS := [ family { inet | inet6 } ] | [ hashsize value ] [ maxelem value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]
    ADD-ENTRY := ipaddr,[proto:]port,netaddr
    ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]
    DEL-ENTRY := ipaddr,[proto:]port,netaddr
    TEST-ENTRY := ipaddr,[proto:]port,netaddr
    where netaddr := ip[/cidr]

    在这里插入图片描述
    上面仅做4个常用的进行介绍,还有很多其他的类型可供使用
    ipset官网直达
    还有下面几个未做介绍(有空再更)

    bitmap:ip
    bitmap:ip,mac
    bitmap:port
    hash:mac
    hash:ip,mac
    hash:net,net
    hash:net,port
    hash:ip,port,ip
    hash:ip,mark
    hash:net,port,net
    hash:net,iface
    list:set
    

    ipset和iptables:
    在iptables中使用ipset,只要加上-m set --match-set即可。(这里只做简单的介绍)

    1. 目的ip使用ipset(ipset集合为bbb)
    iptables -I INPUT -s 192.168.100.36  -m set --match-set bbb dst -j DROP
    
    1. 源ip使用ipset(ipset集合为aaa)
    iptables -I INPUT -m set --match-set aaa src -d 192.168.100.36  -j DROP
    
    1. 源和目的都使用ipset(源ip集合为aaa,目的ip集合为bbb)
    iptables -I INPUT -m set --match-set aaa src -m set --match-set bbb dst  -j DROP
    
    展开全文
  • firewalld系列一:自定义zone与ipset

    千次阅读 2022-02-25 09:57:15
    删除ipset firewall-cmd --delete-ipset=4mysshzone --permanent ## 创建ipset firewall-cmd --new-ipset=4mysshzone --type=hash:ip --permanent ## ipset添加/删除entry firewall-cmd --permanent --ipset=4...

    目录

    自定义zone

    自定义ipset

    案例一:centos8源地址访问限制

    案例二:(留个小尾巴,后面会接续介绍firewalld预定义zone的作用)

    开篇先讲一下写本文的由来:了解/etc/hosts.allow/etc/hosts.deny的同学肯定知道,这是用来做源地址访问控制的两个配置文件。实质上,是由TCP_Wrappers实现的安全访问控制;凡是包含有libwrap.so库文件的程序就会受TCP_Wrappers的安全控制。所以,这也是它的局限性。更甚,CentOS8已经舍弃了TCP_Wrappers(tcp_wrappers-libs包),即便我们手动进行安装,也不会生效;原因就是CentOS8自带的ssh等软件不再集成libwrap.so库。

    那么,没有了TCP_Wrappers怎么做源地址访问控制呢?答案是通过系统自带防火墙,无论iptables还是firewalld都能做到(见案例一)。当然,一些软件本身也自带了访问控制功能(比如:ssh的Match指令)

    注:TCP_Wrappers是一个工作在网络传输层的安全工具,它对有状态连接的特定服务进行安全检测并实现访问控制。

    自定义zone

    # 添加/删除zone
    firewall-cmd --new-zone=mysshzone --permanent
    firewall-cmd --delete-zone=mysshzone --permanent
    # 查询所有zone列表
    firewall-cmd --get-zones 
    block dmz drop external home internal mysshzone public trusted work
    # 显示生效的zone
    firewall-cmd --get-active-zone
    mysshzone
      sources: 192.168.186.103 192.168.10.182 ipset:4mysshzone
    public
      interfaces: ens192
    trusted
      sources: 192.168.10.124
    ## 查看zone信息
    firewall-cmd --info-zone=mysshzone
    ### 上面命令效果同:
    firewall-cmd --zone=mysshzone --list-all
    # 查看所有zone的详细配置
    firewall-cmd --list-all-zones
    ## zone添加/删除源地址
    firewall-cmd --permanent --zone=mysshzone --add-source=192.168.186.103
    firewall-cmd --permanent --zone=mysshzone --remove-source=192.168.186.103
    ## zone绑定/解绑ipset
    firewall-cmd --permanent --zone=mysshzone --add-source=ipset:4mysshzone
    firewall-cmd --permanent --zone=mysshzone --remove-source=ipset:4mysshzone
    

    自定义ipset

    ## 查看ipset列表
    firewall-cmd --permanent --get-ipsets
    4mysshzone
    ## 查看ipset详细信息
    firewall-cmd --permanent --info-ipset=4mysshzone
    4mysshzone
      type: hash:ip
      options: 
      entries: 192.168.186.125
    ## 查看ipset配置文件存放路径
    firewall-cmd --permanent --path-ipset=4mysshzone
    /etc/firewalld/ipsets/4mysshzone.xml
    ### 查看ipset XML文件
    cat /etc/firewalld/ipsets/4mysshzone.xml                                  
    <?xml version="1.0" encoding="utf-8"?>
    <ipset type="hash:ip">
      <entry>192.168.186.125</entry>
    </ipset>
    ## 删除ipset
    firewall-cmd --delete-ipset=4mysshzone --permanent
    ## 创建ipset
    firewall-cmd --new-ipset=4mysshzone --type=hash:ip --permanent
    ## ipset添加/删除entry
    firewall-cmd --permanent --ipset=4mysshzone --add-entry=192.168.186.125 
    firewall-cmd --permanent --ipset=4mysshzone --remove-entry=192.168.186.125
    firewall-cmd --permanent --ipset=4mysshzone --add-entry=192.168.186.1/24  #type: hash:ip可以加网段
    ## 获取所有ipset的entry
    firewall-cmd --permanent --ipset=4mysshzone --get-entries
    192.168.186.125
    192.168.186.1/24
    ## 验证某IP是否在该ipset的entry中,并不会匹配网段范围
    firewall-cmd --permanent --ipset=4mysshzone --query-entry=192.168.186.125
    yes
    ### 不能匹配到192.168.186.1/24
    firewall-cmd --permanent --ipset=4mysshzone --query-entry=192.168.186.12
    no
    
    ## 查看所有ipset类型
    firewall-cmd --get-ipset-types
    hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
    

    案例一:centos8源地址访问限制

    # 安全加固
    firewall-cmd --new-zone=mysshzone --permanent
    firewall-cmd --delete-zone=mysshzone --permanent
    ## 语法: --add-source=source[/mask]|MAC|ipset:ipset
    firewall-cmd --permanent --zone=mysshzone --add-source=192.168.186.103
    firewall-cmd --permanent --zone=mysshzone --add-port=22/tcp
    firewall-cmd --reload

    案例二:(留个小尾巴,后面会接续介绍firewalld预定义zone的作用)

    # 避免管理客户端被关在防火墙之外,设置白名单
    firewall-cmd --permanent --zone=trusted --add-source=192.168.10.124
    firewall-cmd --reload
    展开全文
  • iptables ipset详解

    千次阅读 2019-05-29 22:34:07
    service ipset save save后重启自动生效 需要yum install ipset-service 会把配置放到/etc/sysconfig/ipset.d/ 下 ipset 不支持0.0.0.0/0 所有ip,可以替换为 0.0.0.0/1 128.0.0.0/1 ipset+自定义链 ipset...

    iptables

    iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

    • -t 表名 可以省略,指定规则存放在哪个表中,默认为filter表 用于存放相同功能的规则
      • filter表: 负责过滤功能能,
      • nat表: 网络地址转换功能
      • mangle表: 拆解报文 做出修改并重新封装的功能
      • raw表: 关闭nat表上启用的连接追踪机制
    • 命令选项
      • -A 在指定链的末尾添加(append)一条新的规则
      • -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
      • -I 在指定链中插入(insert)一条新的规则,默认在第一行添加
      • -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
      • -L 列出(list)指定链中所有的规则进行查看
      • -E 重命名用户定义的链,不改变链本身
      • -F 清空(flush)
      • -N 新建(new-chain)一条用户自己定义的规则链
      • -X 删除指定表中用户自定义的规则链(delete-chain)
      • -P 设置指定链的默认策略(policy)
      • -Z 将所有表的所有链的字节和数据包计数器清零
      • -n 使用数字形式(numeric)显示输出结果
      • -v 查看规则表详细信息(verbose)的信息
      • -V 查看版本(version)
      • -h 获取帮助(help)
    • 链名 链是指很多规则串在一起组成一条链条,有先后顺序,总共就几个,根据规则分类的
      • INPUT 针对网络进入的报文规则
      • OUTPUT 针对网络出的报文规则
      • PREROUTING 路由前
      • POSTROUTING 路由后
      • FORWARD 转发
      • 也可以自定义链,但是自建链最终还是要放到上面的链上
    • 条件匹配 选择匹配的选项
      • -p TCP/UDP/ICMP/all : 匹配的连接类型
      • -s ip/网段/hostname等 : 匹配source的具体项
      • -d ip/网段/hostname等 : 匹配destination的具体项
      • -i eth0等interface name
      • -m match extended match
      • –sport source port
      • –dport destination port
    • -j target 指定匹配上规则后的具体动作
      • ACCEPT 允许数据包通过
      • DROP 直接丢弃数据包,不给任何回应信息
      • REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
      • LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
      • 当自定义链时 在挂载自定义链到具体链时在这里指定自定义链

    日常使用

    • iptables -L -nv 查看规则 iptables -L 链名字 查看某个链的规则 -line-numbers 列数规则的编号,这个编号可用于删除
    • iptables -I INPUT -s 11.250.199.16 -j DROP 在INPUT链首上插入一条规则,丢弃 11.250.199.16的访问
    • iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT 在INPUT链尾上插入一条规则,允许 192.168 网段的访问 -A换为 -D就是删除
    • iptables -A FORWARD -s 192.168.1.11 -j REJECT 拒绝转发来自192.168.1.10主机的数据
    • iptables -I INPUT -s 121.14.48.1 -m statistic --mode random --probability 0.5 -j DROP 50%丢包
    • iptables -A INPUT -p tcp -s 11.160.13.129 --dport 3306 -j DROP 丢弃通过tcp连接 3306端口的访问
    • iptables -D INPUT 1 删除INPUT链的第一条规则
    • iptables -F INPUT 清空此链中的规则
    • service iptables save 它能把规则自动保存在/etc/sysconfig/iptables中, 当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则 需要yum install iptables-services

    创建自定义链

    • iptables -N xxx 创建自定义链xxx
    • iptables -I xxx -s 11.250.199.16 -j DROP 对自定义链设置规则
    • 注意: 到此为止这个自定义链都是无用的,因为没有在任何的默认链中引用
    • iptables -I INPUT -ptcp --dport 3306 -j xxx 将自定义链xxx挂到INPUT链上 这时候次链就生效了
    • iptables -E xxx new_xxx 修改自定义链名字 修改了名字引用自动生效
    • iptables -X new_xxx 删除自定义链,但是要满足两个条件
      • 1.自定义链没有被任何默认链引用 有的话通过 iptables -D INPUT 1 删除
      • 2.自定义链中没有任何规则 有的话 iptables -F new_xxx 清空

    ipset

    ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,IPsets也具备一些新防火墙设计方法,并简化了配置.官网:http://ipset.netfilter.org/

    • ipset create blacklist hash:net maxelem 1000000
      • 创建名为blacklist的ipset
      • hash:net 用什么进行hash ,也可以是hash:ip 就只能ip不能网段 hash:ip,port ip+port进行hash
      • ipset默认可以存储65536个元素,使用maxelem指定数量
      • 也可以有timeout 数字 这种参数,指定这个集合里默认的超时时间单位s,超时后会自动把里面的对象删除
    • ipset list 查看已创建的ipset ipset list xxx 也可以带名字
    • ipset add blacklist 10.60.10.10 加入一个名单ip 也可以是网段
      • ipset add blacklist 6.6.6.6 timeout 60 指定这个ip的超时时间,超时会自动被删除了 前提是create要有timeout 0 (0表示里面的对象可有超时可没有)
      • ipset -exist add blacklist 6.6.6.6 timeout 100 重新为其指定超时时间
    • ipset del blacklist 10.60.10.xx 去除名单ip
    • ipset flush 清空所有集合 ipset flush blacklist 清空blacklist集合
    • ipset destroy blacklist 删除ipset 不能有任何下游依赖 ipset destroy 销毁所有集合
      • 如果这个集合被链使用着不能删除 需要先去掉 iptables -D INPUT 1
      • 如果这个集合非空不能删除 需要ipset flush blacklist
      • 如果这个集合有被其他链使用着也不能被删除 需要 iptables -F 链名 清空链下的内容
    • ipset save blacklist -f blacklist.txt 将ipset规则保存到文件
    • ipset save blacklist 输出到标准输出 ipset save 输出所有集合到标准输出
    • ipset restore -f blacklist.txt 导入ipset规则 这个规则其实就是一些语句,必须ipsetname不存在才能导入
    • ipset restore 根据输入内容导入
    • ipset rename old_name new_name 改名
    • iptables -I INPUT -m set --match-set blacklist src -p tcp --dport 80 -j DROP 使用ipset集合到INPUT链,相当于就是批量添加
    • service ipset save save后重启自动生效 需要yum install ipset-service 会把配置放到/etc/sysconfig/ipset.d/ 下
    • ipset 不支持0.0.0.0/0 所有ip,可以替换为 0.0.0.0/1 128.0.0.0/1

    ipset+自定义链

    • ipset create WhiteList hash:net maxelem 1000000 # 创建白名单集合
    • iptables -N xxxx # 创建自定义链xxxx
    • iptables -I xxxx -mset --match-set WhiteList src -j ACCEPT # 匹配白名单的包予以通过 -I换为-D就是删除这个规则
    • iptables -A xxxx -j REJECT #拦截所有未通过白名单的包 不加任何区域默认为 0.0.0.0/0 all
    • iptables -I INPUT -ptcp --dport 3306 -j xxxx #将链挂到input中

    总结使用规则

    • 规则的顺序
      • 已经被前面规则匹配的,iptables会对报文执行相应的-j动作,后面的规则就不能再匹配了,已经执行动作了。只有没有匹配的才会继续匹配下面的规则
      • 所以针对相同服务的规则,更严格的规则应该放在前面,这样在前面就能挡掉大部分的连接,减少过多的匹配耗时
    • 当规则中存在多个匹配条件时,条件之间是与的关系, 比如既有-s 又有 -dport 又有-p 这些是与的关系
    • 要将更容易匹配到的规则放在最前面 跟第一条有所矛盾
      • 比如数据库服务的白名单,最多访问数据库的是应用,所以应用白名单规则应该放在最前面避免影响多数连接的匹配耗时
    • 当使用iptables做网络防火墙时,要考虑方向性,即进入的和出去的网络
    • 在做白名单服务时,应当把链的默认策略设置为ACCEPT,链的最后端设置为REJECT规则实现白名单机制
      • 假如把默认设置为DROP,后端设置为ACCEPT时候,当后端规则被清空了,则管理员请求也会被drop

    参考

    展开全文
  • IPSET安装 yum install ipset // 安装ipset ipset create china hash:net hashsize 10000 maxelem 1000000 // 创建地址表 ipset add china 172.18.0.0/16 ipset list china 获取国内IP地址段并导入 vi ipset...
  • ipset如何与netfilter内核模块进行通信

    千次阅读 2018-12-14 17:31:32
    最近需要使用ipset,iptables,和netfilter,所以把三者的源代码看大概阅读了一遍。 前面我们学习过应用层ipset和netfilter模块之间通信是采用的netlink套接字 用户空间的ipset命令通过 libipset.so 这个库和内核...
  • no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ip set 禁止手动设置ip地址no ...
  • openwrt 清除ipset ip缓存

    2021-03-14 13:21:55
    openwrt 清除ipset ip缓存 ipset flush gfwlist
  • ubuntu安装ipset准确姿势

    千次阅读 2020-01-15 10:08:05
    ipset package in Ubuntu ipset: administration tool for kernel IP sets ipset-dbgsym: debug symbols for ipset libipset-dev: development files for IP sets libipset13: library for IP sets libipset13-dbgs...
  • IPset用来修改保存IP地址,方便经常要改IP的
  • ipset代码,教你怎样弄一个ipset
  • 安装ipset server yuminstallipset-service 二:设置开机自启动服务 systemctlenableipset 三:保存ipset list(ps:重启服务器之前要先执行下这个命令,要不然名单会丢失) serviceipsetsave 原文...
  • ipset+iptables封禁以及自动解封IP

    千次阅读 2018-11-10 06:17:49
    iptables封掉少量ip处理是没什么问题的,但是当有大量ip攻击的时候性能就跟不上了,...ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加的入ipset的ip也生效。 一、软件及安装  1...
  • iptables之ipset使用介绍

    千次阅读 2019-09-18 05:41:31
    ipset是什么?ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也可以进行高效的查找,除了一些常用的...
  • ipset常用命令

    千次阅读 2019-05-24 11:45:55
    ipset设置 安装 #yum install ipset 创建ipset黑名单(黑名单名称为blacklist) #ipset create blacklist hash:ip timeout 259200 hashsize 4096 maxelem 1000000 查看列表 #ipset list blacklist 向黑名单中...
  • 由于工作需要,经常需要切换内外网进行,于是之前通过设置双网IP的方式,成功解决了每次切换都要手动一步步完成网络设置的问题。然而最近工作网络环境又做了变更,双IPbu'guan'yong'le
  • 一、ipset概述 ipset与iptable iptables是在Linux内核中配置防火墙规则的用户空间工具。在内核版本更新到2.4以来,iptable一直作为系统中主要的防火墙解决方案。CentOS7将原来的iptable替换为firewall,而...
  • iptables+ipset安装配置完全指南

    千次阅读 2020-02-19 23:15:23
    ipset版本:ipset-7.3 1、下载ipset最新版本 ipset官网:http://ipset.netfilter.org/install.html wgethttp://ipset.netfilter.org/ipset-7.3.tar.bz2 2、更新内核及依赖包(注意重启) yum -y install kernel...
  • 个国外IP搞的,于是就看了很多文章,确定了用ipset和iptables的白名单控制 input。 基本思路就是先创建IPSET国内IP地址表,之后防火墙阻断掉表内没有地址 的请求。 1. IPSET yum install ipset // 安装ipset ip...
  • Centos 6.10 Install ipset

    2019-05-16 20:29:15
    规则集类型 hash:net #创建网络规则集(可以是是网段 ... 基础用法 ipset create fw hash:net #创建规则集 ipset add fw 10.0.0.0/24 #给新加的规则添加IP段 ipset del fw 10.68.22.1/24 #删除IP i...
  • ipset源代码分析之hash:mac类型集合

    千次阅读 2018-12-18 23:25:22
    想了解ipset的hash:mac类型的实现,要阅读的源代码文件有两个ip_set_hash_mac.c和ip_set_hash_gen.h 一、定义hash元素结构体 /* Member elements */ struct hash_mac4_elem {  /* Zero valued IP addresses ...
  • 先安装ipset和iptables,方法自己找 ipset create china hash:net hashsize 1024 maxelem 65536 然后编写shell文件 #!/bin/bash rm -f cn.zone wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone...
  • ipset源代码分析之kadt和uadt回调函数

    千次阅读 2018-12-19 22:52:49
    之前看到ip_set_hash_ip.chash_ip4_uadt和hash_ip4_kadt函数,就一直很好奇这两个函数是干什么呢? 下面我来带你一步步剖析这两个函数 一、kadt和uadt回调函数的注册 首先看下struct ip_set_type_variant结构体...
  • iptables直接针对ip进行封禁,在ip数量不大的时候是没什么问题的,但当有大量ip的时候性能会...而ipset就像一个集合,把需要封闭的ip地址写入这个集合中,ipset 是O(1)的性能,可以有效解决iptables直接封禁大量IP...
  • 说明:此规范分为两部分:一是,常规配置...集合配置方法是针对于源地址和端口组合限制,但源地址是一个IP地址集合,此集合中可以任意添加IP地址及网段 一、常规配置方法: 1、端口限制 1)放开UDP 161/162端口 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 853,782
精华内容 341,512
关键字:

ipset

友情链接: U盘加密.zip