简介

由于公司线上生产环境firewalld默认都是关闭的,所以只能依赖iptables的表来方便管理IP黑白名单.

提示线上生产环境不要随便重启iptables,会导致docker已经映射好的关系表都没有了.

不要执行iptables-save,会把当前临时的一些规则保存到/etc/sysconfig/iptables,如有变动,重启又会被load出来.

不要执行iptables -F 清空规则.

增删改表单后,不要重启iptables,规则都是立即生效.

本本主要内容:ipset表应用

ip set是linux内核的一个内部框架,可由ipset工具管理.

ipset 适用于以下几种场景:

  • 一次性存储大量的ip或者端口,用以iptables匹配
  • 在不影响性能的前提下,动态更新iptables规则(针对ip或者端口),表单更新时不用频繁重启iptabels服务,立即生效
  • 期望使用ipset的告诉匹配,或者在一条iptables规则中表达复杂的 ip/端口规则,使规则看起来更简单明了

安装ipset

#安装ipset,大多数系统7已经默认安装过了
yum install ipset #备份原有的iptabels到文件
iptables -nL >myiptabls.oldlist
iptables-save >./myiptables.old

定义hash:net类型黑白名单

任何端口协议

#白名单
ipset create opsallow hash:net maxelem 10000
iptables -A INPUT -m set --match-set opsallow src -j ACCEPT #黑名单
ipset create opsdeny hash:net maxelem 500000
iptables -A INPUT -m set --match-set opsdeny src -j DROP #查看表
ipset list 表名 #保存表
ipset save 表名 -f 表名bak.txt #恢复表
ipset restore -f 表名bak.txt #查看iptables表(这里注意优先级)
iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 match-set opsallow src
DROP all -- 0.0.0.0/0 0.0.0.0/0 match-set opsdeny src
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 match-set opsallowipport src,dst
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 match-set opsdenyipport src,dst
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 match-set denytemp1d src
#加白名单,把公司自己IP先加进去
ipset add opsallow 123.123.123 #加黑名单
#ipset add opsdeny 45.9.20.101 #删白名单
ipset del opsallow 1.1.1.1
#删黑名单
ipset del opsallow 1.1.1.1 #网段
ipset add opsallow 192.168.255.0/24
ipset add opsallow 172.17.0.0/16 #清空表单
ipset flush 表名 #删除表
ipset destroy 表名 #测试是否在表中匹配到
ipset test opsdeny 192.168.255.166

定义hash:ip,port类型黑白名单

指定端口

#白名单
ipset create opsallowipport hash:ip,port maxelem 10000
iptables -A INPUT -p tcp -m set --match-set opsallowipport src,dst -j ACCEPT #黑名单
ipset create opsdenyipport hash:ip,port maxelem 500000
iptables -A INPUT -p tcp -m set --match-set opsdenyipport src,dst -j DROP #增删
ipset add opsallowipport 192.168.255.166,80
ipset del opsallowipport 192.168.255.166,80
ipset del opsallowipport 192.168.255.166,80-89
ipset del opsallowipport 192.168.255.166,udp:53
ipset add opsdenyipport 192.168.255.166,tcp:80
ipset add opsdenyipport 192.168.255.161-192.168.255.166,8080 #这里走了些弯路,特此整理成表,只告诉了怎么加到ipset表,缺很少告诉你src,dst都需要指定,只写src导致ipset无效
ipset type | iptables match-set | Packet fields
------------------+--------------------+---------------------------------
hash:ip,port | src,dst | src IP address, dst port
hash:net,port,net | src,dst,dst | src IP address, dst port, dst IP address
hash:net,port,net | dst,src,src | dst IP address, src port, src IP address
hash:ip,port,ip | src,dst,dst | src IP address, dst port, dst IP address
hash:ip,port,ip | dst,src,src | dst IP address, src port, src ip address
hash:mac | src | src mac address
hash:mac | dst | dst mac address
hash:ip,mac | src,src | src IP address, src mac address
hash:ip,mac | dst,dst | dst IP address, dst mac address
hash:ip,mac | dst,src | dst IP address, src mac address

其他


#规则优先级
#这里也很容易走弯路如果ipset的allow和deny里都有,iptables中opsallowipport在opsdenyipport前面,那么allow优先;
#也就是说ipables中谁在前面,谁先匹配到,谁就有优先权.
#因此根据实际需要,要注意iptables条目的顺序先后. #查看排序规则
#iptables -nL INPUT
[root@opstest zzw]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 match-set opsdenyipport src,dst
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 match-set opsallowipport src,dst
#加到最前面
iptables -I INPUT -p tcp -m set --match-set opsallowipport src,dst -j ACCEPT
#追加到后面
iptables -A INPUT -p tcp -m set --match-set opsallowipport src,dst -j ACCEPT
#创建自动1d解封
ipset create denytemp1d hash:ip timeout 86400
iptables -A INPUT -p tcp -m set --match-set denytemp1d src -j DROP
#添加注释
[root@opstest zzw]# ipset create opsdenyipport hash:ip,port maxelem 500000 comment
[root@opstest zzw]# ipset add opsdenyipport 192.168.255.167,tcp:80 comment "bad man"
[root@opstest zzw]# ipset list opsdenyipport
Name: opsdenyipport
Type: hash:ip,port
Revision: 5
Header: family inet hashsize 1024 maxelem 500000 comment
Size in memory: 240
References: 0
Number of entries: 1
Members:
192.168.255.167,tcp:80 comment "bad man"

防火墙之ipset表应用的更多相关文章

  1. 期中架构&防火墙¥四表五链

    今日内容 架构图 包过滤防火墙 Iptables 新建虚拟机 内容详细 一.架构图 用户通过域名访问一个网站类比开车去饭店用餐 访问网站的流程 1.浏览器输入网站的域名(www.baidu.com), ...

  2. Openwrt上使用dnsmasq和ipset实现域名分流

    目标 部署一台自动代理路由器,实现根据域名来自动设定直连或者代理,而我要做的只是设置PC的默认网关为主路由器(192.168.0.1)还是自动代理路由器(192.168.0.254). 创建Openw ...

  3. dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset

    iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储在ipset中,所以使用dnsmasq+ipset就可以实现ip ...

  4. 6. Samba服务和防火墙配置笔记

    Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...

  5. [转] Linux下防火墙iptables用法规则详及其防火墙配置

    from: http://www.cnblogs.com/yi-meng/p/3213925.html 备注: 排版还不错,建议看以上的链接. iptables规则 规则--顾名思义就是规矩和原则,和 ...

  6. centos防火墙操作

    centos防火墙基本操作 #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT#/sbin/iptables -I INPUT -p tcp -- ...

  7. 防火墙和iptables

    本文目录: 6.1 为什么需要防火墙 6.2 数据传输流程 6.2.1 网络数据传输过程 6.2.2 本机数据路由决策 6.3 TCP三次握手.四次挥手以及syn攻击 6.3.1 三次握手建立tcp连 ...

  8. CentOS_6.5配置iptables防火墙策略

    ###############配置filter表防火墙############### #清除预设表filter中的所有规则链的规则iptables -F #清除预设表filter中使用者自定链中的规则 ...

  9. 企业防火墙之iptables

    1.1 企业中安全优化配置原则 尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务. 大并发的情况,不能开iptables,影响性能, ...

随机推荐

  1. C语言类型转换原理

    C语言类型转换 int a; a=1.23 这里把1.23赋值给a发生了隐式转换,原理如下: int a; float b=3.14; a=b; b赋值给a的过程:首先找一个中间变量是a的类型(该例中 ...

  2. 【uniapp 开发】uni-app 资源在线升级/热更新

    注:本文为前端代码资源热更新.如果是整包升级,另见文档 https://ask.dcloud.net.cn/article/34972 HBuilderX 1.6.5 起,uni-app 支持生成 A ...

  3. java中什么是内部类?它有什么用?如何使用?

    什么是内部类?马克-to-win:一句话:类中还有类.里边的叫内部类, 外边的叫外层类.有什么用?1)像文件夹一样,文件放文件夹里更清晰,内部类放外层类中, 清晰.主要从编程序的逻辑角度出发,有用.比 ...

  4. java中抽象类和抽象方法到底什么关系?请举例说明!

    抽象类和抽象方法什么关系?抽象类中可能有抽象方法,也可能没有抽象方法.那位说,就跟没说一样,那抽象类和抽象方法都叫抽象,他们必定有关系,那关系是什么呢?如果一个类中有抽象方法,它必须得是抽象类. An ...

  5. Android打开数据库读取数据

    打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...

  6. 学生管理系统 C++课设

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> u ...

  7. docker容器与虚拟机区别

  8. 解决PHP下载大文件失败,并限制下载速度

    1.问题: PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错: 2.原因: 这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出: ...

  9. Java-GUI编程之菜单组件

    前面讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了.在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定 ...

  10. Istio实践(2)-流量控制及服务间调用

    前言:接上一篇istio应用部署,本文介绍通过virtualservice实现流量控制,并通过部署client端进行服务调用实例 1. 修改virtualservice组件,实现权重占比访问不同版本服 ...