从CentOS6迁移到7系列,变化有点多,其中防火墙就从iptables变成了默认Firewalld服务。firewalld网上资料很多,但没有说得太明白的。一番摸索后,总结了这篇文章,用于快速上手。

1.概览

CentOS7.2.1511 默认防火墙如下图:

这里升级到最新的,相对于默认的这里增加了几个配置,是firewalld更灵活。

2.区域(zone)

firewalld是centos7的一大特性,最大的好处有两个:
(1)支持动态更新,不用重启服务;
(2)引入了防火墙的“zone”概念,简单来说就是为用户预先准备了几套防火墙策略模板,然可根据不同场景选择相应的策略,类似于我们常见windows下网络连接时候选择的工作区(工作网络,家庭网络,公共网络)。
关于第二点的特性实现就使用到了一个区域(zone)的概念。对应到上图中的是1号位置
通过下面命令查看所有的区域
下表给出了所有区域解释
 

3.过滤规则

target:区域放行策略,类似iptables中的target,例如public区域设置target:default,该区域的规则为白名单模式。如果target:ACCEPT,则该区域的网络接口全放行(为什么这里是说的网络接口?下面interface项详细解释)。设置target使用下面命令:
 
这里有两个问题:
1.第一次命令失败,提示必须要加上参数--permanent
    在firewalld-cmd执行的命令中,如果是规则相关的,加上--permanent参数不会立即生效,只会被记录到配置文件。如果要生效需要调用firewall-cmd --reload重载;如果不加--permanent则是立即生效,但如果--reload会被清掉。
    此外,在firewall-cmd命令中有些命令需要必须加--permanent参数,比如这里的--set-target。下面执行--reload
icmp-block-inversion:这个是一个禁ping的参数,默认关闭
interfaces:该区域绑定的网络接口。firewalld的优势就是分了不同的区域,通过这个参数可以为不同的网络接口指定规则。图中ens192网卡被指定到了public区域,所有这个网卡上的请求都应用这个区域的规则。
使用命令 firewall-cmd --change-interface=ens192 --zone=public 修改网卡绑定区域
关于这个有两点注意:
1.网路接口可以不被指定在任何区域,在这种情况下,没有被指定区域的网络接口使用默认zone。下面两条命令获取/设置默认zone
2.interfaces的优先级别没有source高。优先级为:source>interface>firewalld.conf
firewalld是封装的iptables,所以看iptables规则更直接。例如有以下配置,网络接口在public中,trusted区域中放行10.10.10.10源,其他区域默认不修改:
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
... trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources: 10.10.10.10/32
...
通过iptables查看source区域在前面,所以优先级比interface高。
 
sources:根据源ip放行
services:根据服务进行放行,默认的里面有ssh和dhcpv6-client两个服务。ssh就是22端口。
如果需要自定义一个服务规则,怎么做呢?
在/etc/firewalld/services下面添加自定义配置test.xml,如
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Test Port</short>
<port protocol="tcp" port="5000"/>
</service>
然后就能通过--add-service以服务名test添加规则
 
ports:根据端口放行
protocols:协议类型,默认为空
masquerade:地址隐藏,默认是no,如果设置成yes,使用lo本地地址访问时候,会被转换成物理ip
forward-ports:
source-ports:
icmp-blocks:
rich rules:复杂规则。使用复杂规则能很统一的控制规则。一条完整的规则如下,规则中source,destination, port项都是可以根据需要缺省的
rule family="ipv4" source address="0.0.0.0" destination address="192.168.136.190" port port="3306" protocol="tcp" accept
添加规则使用命令:firewall-cmd --add-rich-rule='...'
同样使用--permanent参数为指定永久规则
 

4.firewalld配置

firewalld的配置在/etc/firewall下
在zones目录下,存放有所有区域的配置。进入到zones目录下,没有看到所有文件?
原因是firewalld在这个目录下没有找到配置的时候,会使用/usr/lib/firewalld/zones下配置。该目录下是服务默认配置,在/etc下不能找到相关配置则使用/usr/lib下的

5.接口封装

如果在接口中使用firewalld服务,调用shell命令的方式效率低。平均添加一条rich-rule需要0.7s的时间(8c,12G,CentOS7)。
这里推荐一种方式是,直接去操作/etc/firewalld/zone下的 xml 配置文件,最后使用 --reload 加载规则。这种方式下,写文件的时间可以忽略,所有的时间都耗费在 reload上。总共时间测试下来在2s以内。
示例文件:
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>Nothing</description>
  <service name="ssh"/>
  <rule family="ipv4">
    <source address="10.10.10.10"/>
    <destination address="10.10.10.10"/>
    <port protocol="tcp" port="1000"/>
    <accept/>
  </rule>
</zone>

import xml.etree.cElementTree as ET
tree = ET.ElementTree(file="/etc/firewalld/zones/public.xml")
root = tree.getroot() # 获取rich rule规则
for each_rule in root.findall('rule'):
# 打印地址协议
print 'family:' + str(each_rule.attrib)
# 打印源地址
source_obj = each_rule.find('source')
if source_obj is not None:
print 'source:' + str(source_obj.attrib)
# 打印目的地址
destination_obj = each_rule.find('destination')
if destination_obj is not None:
print 'destination:' + str(destination_obj.attrib)
# 打印端口
port_obj = each_rule.find('port')
if port_obj is not None:
print 'port:' + str(port_obj.attrib) # 删除rich rule规则,删除参数为rich rule字符串,记为 remove_str
# decode_obj(element) 将xml结构解析成字符串,返回值为字符串,注意字符串赋值顺序,语法细节参考添加规则
for each_rule in root:
if decode_obj(each_rule) == remove_str:
root.remove(each_rule) # 剩下的修改功能、查找功能可以参照上面实现,这里主要说明的是xml库的使用方法

这里再针对xml库说明下,从<zone>开始,每一层都是一个节点,然后形成的一棵树。每个节点是 ET.Element(tag, attrib={}),比如这里short, description, service , rule都是tag, family是attrib

需要访问节点的 tag 和 attrib,直接xmlobj.tag,xmlobj.attrib方式访问

获取子节点使用xmlobj.getchildren(),或者是获取指定tag的节点xmlobj.findall(tag)

 
 

firewalld 极速上手指南的更多相关文章

  1. Rancher 快速上手指南操作(1)

    Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...

  2. X下轻量级桌面WindowMaker上手指南

    layout: post title: 轻量级桌面WindowMaker上手指南 tags: x11, cygwin, raspi --- 最近工作上需要在远程Linux上运行一个桌面(我需要跑Net ...

  3. UnityShader快速上手指南(三)

    简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...

  4. Windows 8 系统完全上手指南 - 非常详尽的 Win8 系统入门学习手册与使用技巧专题教程!

    每次当有新版本的操作系统发布的时候,市面上总会冒出各种从入门到精通类的学习书籍,这次最新的 Windows 8 也不例外!不过,今天给大家送上免费的大礼——<Windows 8 完全上手指南&g ...

  5. Resharper上手指南

    原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...

  6. NewLife.XCode 上手指南2018版(二)增

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  7. NewLife.XCode 上手指南2018版(一)代码生成

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  8. Gatsby上手指南 - 让你的静态网站用react来高逼格的写

    注意:Gatsby V2版本安装及使用问题请移步<Gastby V2安装过程中常见问题>,此文较旧,主要针对V1版Gatsby而介绍 前言 一直以来都是用之前比较流行的静态网站生成器Hex ...

  9. [转]Rancher 快速上手指南操作(1)

    本文转自:http://www.cppblog.com/zhiyewang/archive/2016/03/17/213053.aspx Rancher 快速上手指南操作(1)该指南知道用户如何快速的 ...

随机推荐

  1. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

  2. MySQL和PHP中以整型存储IP地址

    正文:将IP地址以整型存储 一般我们在数据库中会用到ip地址用来查记录的等等,而ip地址是分为四段的,一般是用varchar或char类型存储.但是其实有更好的存储方法就是以整型存储IP地址. 因为c ...

  3. JVM 专题二十:垃圾回收(四)垃圾回收器 (一)

    1. GC分类与性能指标 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现.由于JDK的版本处于高速迭代过程中,因此Java发展至今已经产生了众多的GC版本.从不同角度分 ...

  4. 机器学习实战基础(十):sklearn中的数据预处理和特征工程(三) 数据预处理 Preprocessing & Impute 之 缺失值

    缺失值 机器学习和数据挖掘中所使用的数据,永远不可能是完美的.很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的 ...

  5. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  6. Ethical Hacking - GAINING ACCESS(24)

    CLIENT SIDE ATTACKS - Detecting Trojan manually or using a sandbox Analyzing trojans Check the prope ...

  7. Spring事务源码分析专题(一)JdbcTemplate使用及源码分析

    Spring中的数据访问,JdbcTemplate使用及源码分析 前言 本系列文章为事务专栏分析文章,整个事务分析专题将按下面这张图完成 对源码分析前,我希望先介绍一下Spring中数据访问的相关内容 ...

  8. [spring cloud] -- 核心篇

    核心功能: 分布式/版本化配置 服务注册合发现 服务路由 服务和服务之间的调用 负载均衡 断路器 分布式消息传递 ...... 技术体系 组件 服务注册与发现组件:Eureka.Zookeeper和C ...

  9. 阿里云的maven仓库

    自从开源中国的maven仓库挂了之后就一直在用国外的仓库,慢得想要砸电脑的心都有了.如果你和我一样受够了国外maven仓库的龟速下载?快试试阿里云提供的maven仓库,从此不在浪费生命…… 仓库地址: ...

  10. web自动化 -- Keys(键盘操作)

    Keys没啥好讲的 语法:Keys.CONTRAL    等等类似. 下方就是可以  Keys.   跟的键 那些 \ue000  就是对应的  Windows系统中的键盘码,pywin32 也一样的 ...