RHEL 7 系统中集成了多款防火墙管理工具,其中 firewalld(Dynamic Firewall Manager of Linux systems,Linux 系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于 CLI(命 令行界面)和基于 GUI(图形用户界面)的两种管理方式。
  相较于传统的防火墙管理配置工具,firewalld 支持动态更新技术并加入了区域(zone) 的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可 以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如, 我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安 全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这 台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问 文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规 则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升 了防火墙策略的应用效率。
  
firewalld 中常见的区域名称(默认为 public)以及相应的策略规则 如表 

firewalld 中常用的区域名称及测了规则

区域
默认策略规则
trusted
允许所有的数据包
home
拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、mdns、ipp-client、 amba-client 与 dhcpv6-client 服务相关,则允许流量
internal
等同于 home 区域
work
拒绝流入的流量,除非与流出的流量数相关;而如果流量与 ssh、ipp-client 与 dhcpv6-client 服务相关,则允许流量
public
拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh、dhcpv6-client 服务 相关,则允许流量
external
拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
dmz
拒绝流入的流量,除非与流出的流量相关;而如果流量与 ssh 服务相关,则允许流量
block
拒绝流入的流量,除非与流出的流量相关
drop
拒绝流入的流量,除非与流出的流量相关

终端管理工具

在讲解 Linux 命令时曾经听到,命令行终端是一种极富效率的工作方式, firewalld-cmd 是 firewalld 防火墙配置管理工具的 CLI(命令行界面)版本。它的参数一般都 是以“长格式”来提供的,大家不要一听到长格式就头大,因为 RHEL 7 系统支持部分命令 的参数补齐,其中就包含这条命令(很酷吧)。也就是说,现在除了能用 Tab 键自动补齐命令 或文件名等内容之外,还可以用 Tab 键来补齐表 2 中所示的长格式参数了。
表 2 firewalld-cmd 命令中使用的参数以及作用
参数
作用
--get-default-zone
查询默认的区域名称
--set-default-zone=<区域名称>
设置默认的区域,使其永久生效
--get-zones
显示可用的区域
--get-services
显示预先定义的服务
--get-active-zones
显示当前正在使用的区域与网卡名称
--add-source=
将源自此 IP 或子网的流量导向指定的区域
--remove-source=
不再将源自此 IP 或子网的流量导向某个指定区域
--add-interface=<网卡名称>
将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称
将某个网卡与区域进行关联
--list-all
显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones
显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名>
设置默认区域允许该服务的流量
--add-port=<端口号/协议>
设置默认区域允许该端口的流量
--remove-service=<服务名>
设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议>
设置默认区域不再允许该端口的流量
--reload
让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on
开启应急状况模式
--panic-off
关闭应急状况模式
 
  与 Linux 系统中其他的防火墙策略配置工具一样,使用 firewalld 配置的防火墙策略默认 为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配 置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正 常设置防火墙策略时添加--permanent 参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之 后才能自动生效。
  如果想让配置的策略立即生效,需要手动执行 firewall-cmd --reload 命令。

常用示例

  接下来的实验都很简单,但是提醒大家一定要仔细查看刘遄老师使用的是 Runtime 模式 还是 Permanent 模式。如果不关注这个细节,就算是正确配置了防火墙策略,也可能无法达 到预期的效果。
查看 firewalld 服务当前所使用的区域:
[root@linuxprobe ~]# firewall-cmd --get-default-zone
public
查询 eno16777728 网卡在 firewalld 服务中的区域:
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public 
把 firewalld 服务中 eno16777728 网卡的默认区域修改为 external,并在系统重启后生效。
分别查看当前与永久模式下的区域名称:
[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface= eno16777728 success
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public
[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=eno16777728 external  
把 firewalld 服务的当前默认区域设置为 public:
[root@linuxprobe ~]# firewall-cmd --set-default-zone=public
success
[root@linuxprobe ~]# firewall-cmd --get-default-zone
public 
启动/关闭 firewalld 防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器 时请慎用):

 [root@linuxprobe ~]# firewall-cmd --panic-on
success
[root@linuxprobe ~]# firewall-cmd --panic-off
success
查询 public 区域是否允许请求 SSH 和 HTTPS 协议的流量:
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
no
把 firewalld 服务中请求 HTTPS 协议的流量设置为永久允许,并立即生效:

[root@linuxprobe ~]# firewall-cmd --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --reload
success
把 firewalld 服务中请求 HTTP 协议的流量设置为永久拒绝,并立即生效:

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http
success [root@linuxprobe ~]# firewall-cmd --reload
success 
把在 firewalld 服务中访问 8080 和 8081 端口的流量策略设置为允许,但仅限当前生效:

[root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
把原本访问本机 888 端口的流量转发到 22 端口,要且求当前和长期均有效:
注: 流量转发命令格式为 firewall-cmd --permanent --zone=<区域> --add-forward-port=port= <源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标 IP 地址>

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
[root@linuxprobe ~]# firewall-cmd --reload
success
在客户端使用 ssh 命令尝试访问 192.168.10.10 主机的 888 端口: 
[root@client A ~]# ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a. Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts. root@192.168.10.10's password:此处输入远程 root 管理员的密码
Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10
firewalld 中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端 口号、源地址和目标地址等诸多信息进行更有正对性的策略配置。
它的优先级在所有的防火 墙策略中也是高的。
比如,我们可以在 firewalld 服务中配置一条富规则,使其拒绝 192.168.10.0/24 网段的所有用户访问本机的 ssh 服务(22 端口):

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule=" rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
[root@linuxprobe ~]# firewall-cmd --reload success
在客户端使用 ssh 命令尝试访问 192.168.10.10 主机的 ssh 服务(22 端口):

[root@client A ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.

Firewalld 的基本使用的更多相关文章

  1. CentOS7使用firewalld打开关闭防火墙与端口(转载)

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disabl ...

  2. CentOS7使用firewalld打开关闭防火墙与端口

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  3. linux系统的初化始配置(包括网络,主机名,关闭firewalld与selinux)

    每次我们使用Linux都会对系统进行初始化的配置,下面我们一一列出来. 1.服务的开启 systemctl enable firewalld.service //将指定的服务设置为开机启动 syste ...

  4. Centos7的firewalld配置

    红帽官方的使用文档: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Gu ...

  5. Linux防火墙配置(iptables, firewalld)

    netfilter和底层实现 iptables firealld Linux中的防火墙 RHEL中有几种防火墙共存: iptables firewalld ip6tables ebtables 这些软 ...

  6. centos7 firewalld

    1.firewalld简介 firewalld是centos7的一大特性,最大的好处有两个: 1.支持动态更新,不用重启服务: 2.加入了防火墙的"zone"概念   firewa ...

  7. centos7 开启防火墙端口 firewalld

    systemctl start firewalld firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd -- ...

  8. 关于firewalld防火墙的使用

    要想使用该防火墙,应该需要安装 networkmanager 并启动其服务.因为之前使用的是 netctl 提供的wifi-menu 来连接无线网络,导致安装networkmanager之后启动 Ne ...

  9. Centos7 关闭防火墙(Firewalld ),使用防火墙(iptables)

    1.直接关闭防火墙 systemctl stop firewalld.service: #停止firewall systemctl disable firewalld.service: #禁止fire ...

  10. Linux系统的初化始配置(包括配置网络,修改主机名,关闭firewalld与selinux的生效)

    一.配置网络环境 1.运行 cmd 查看本机的ip地址,然后记录下来. 2.网络和共享中心--本地连接属性如下: 手工配置到本地连接上面 IP:172.16.191.215,DNS:101.7.8.9 ...

随机推荐

  1. Spark aggregateByKey函数

    aggregateByKey与aggregate类似,都是进行两次聚合,不同的是后者只对分区有效,前者对分区中key进一步细分 def aggregateByKey[U: ClassTag](zero ...

  2. layui菜单点击刷新,自适应

    最近在项目上用layui框架后台iframe版,遇到的一些问题分享: 1.项目的左侧菜单点击对应的子菜单能自动刷新问题. 2.除了在左侧有菜单,还需要在右侧需要一个菜单(跳转到新页面),并且能够伸缩自 ...

  3. Django操作session实例

    session项目文件: templates模板: login.html {% load static %} <!DOCTYPE html> <html lang="en& ...

  4. Educational Codeforces Round 56 (Rated for Div. 2) F. Vasya and Array

    题意:长度为n的数组,数组中的每个元素的取值在1-k的范围内或者是-1,-1代表这个元素要自己选择一个1-k的数字去填写,然后要求填完的数组中不能出现连续长度大于len的情况,询问填空的方案数. 题解 ...

  5. 欧拉函数 BZOJ2705

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 3154  Solved: 1968[Submit][ ...

  6. 【图机器学习】cs224w Lecture 11 & 12 - 网络传播

    目录 Decision Based Model of Diffusion Large Cascades Extending the Model Probabilistic Spreading Mode ...

  7. 二,文件上传控件el-upload

    需求: 上传文件,保存到服务器,并保存历史记录 上效果图 <el-form-item label="文件"> <el-upload ref="uploa ...

  8. 来自AI的Tips——情景智能

    来自AI的Tips--情景智能   上一次我们介绍了华为快服务智慧平台是什么,今天我们来侃一侃平台最有代表性的一个流量入口--情景智能(AI Tips).   首先情景智能在哪呢?大家可以拿出自己的华 ...

  9. 永久关闭windows更新步骤

    在搜索“web和windows”框中输入“服务” 在搜索结果中点击第一个,那个图标像齿轮的那个!如下图. 在打开的“服务”窗口中,我们找到windows update   找到”windows upd ...

  10. 【数字图像处理】OpenCV中cv2.imread()与PIL中Image.open()的差别

    cv2.imread()与PIL中Image.open()两个函数都是用来读取图像,但是在使用过程存在一些差别. 1. 首先,从导入库方面看: # opencv-python import cv2 # ...