firewalld防火墙详解

众所周知,在RHEL7系统中,firewalld防火墙取代了iptables防火墙。我们都知道iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。
相较于iptables防火墙而言,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
表1:firewalld中常用的区域名称及策略规则

区域(noze) 默认策略规则
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 拒绝进入的流量,除非与出去的流量相关

从上图我们可以看到,firewalld默认出口是全放开的。
动静态更新技术之间的区别:iptables每一个更改都需要先清除所有旧有的规则,然后重新加载所有的规则(包括新的和修改后的规则);而firewalld任何规则的变更都不需要对整个防火墙规则重新加载。
firewalld服务的主配置文件是firewalld.conf,防火墙策略的配置文件是以xml格式为主,存放在以下两个目录里。
/etc/firewalld # 用户配置文件
/usr/lib/firewalld #系统配置文件,预定义配置文件
firewalld有基于CLI(命令行界面)和基于GUI(图形用户界面)两种管理方式,即:firewall-cmd(终端管理工具)和firewall-config(图形管理工具)。

一、终端管理工具

firewalld的参数一般都是以“长格式”来提供的,但是在RHEL7系统里支持部分命令的参数补齐,其中就包括firewall-cmd命令,也就是说可以用Tab键来补齐长格式参数,很酷吧。
表2:firewall-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 关闭应急状况模式

firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在firewall-cmd命令后面添加--permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启后才会生效。如果想让配置的永久策略立即生效,需要手动执行firewall-cmd --reload命令。
注:remove掉ssh服务或者ssh端口,当前远程登陆会话不会断开,退出后就无法远程连接了。
firewalld服务启动、重启、停止

systemctl start firewalld
systemctl restart firewalld
systemctl stop firewalld

重新加载防火墙配置
firewall-cmd --reload
查看firewalld的运行状态
firewall-cmd --state
查看默认当前使用的区域
firewall-cmd --get-default-zone
查看系统默认活动区域名称、来源地址和关联的网卡
firewall-cmd --get-active-zones

查看所有可用区域
firewall-cmd --get-zones
查看区域的所有设置

firewall-cmd --zone=internal --list-all   # 查看指定区域设置
firewall-cmd --list-all   # 查看默认区域设置


Target:目标
icmp-block-inversion:ICMP协议类型黑白名单开关(yes/no)
Interfaces:关联的网卡接口
sources:来源,可以是IP地址,也可以是mac地址
services:允许的服务
ports:允许的目标端口,即本地开放的端口
protocols:允许通过的协议
masquerade:是否允许伪装(yes/no),可改写来源IP地址及mac地址
forward-ports:允许转发的端口
source-ports:允许的来源端口
icmp-blocks:可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。
rich rules:富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。
查看所有预设的服务
firewall-cmd --get-services
此时将会列出/usr/lib/firewalld/services/目录中所有的服务名称。
查看所有区域的设置
firewall-cmd --list-all-zones
查看指定网卡所在的区域
firewall-cmd --get-zone-of-interface=ens32
把firewalld的当前默认区域设置为drop,此为永久设置
firewall-cmd --set-default-zone=drop
把ens32网卡关联的区域修改为drop

firewall-cmd --permanent --zone=drop --change-interface=ens32   # 永久设置
firewall-cmd --zone=drop --change-interface=ens32   # 当前生效


我们后面的设置命令将全部使用运行时模式,即当前生效模式。
将来自ens33网卡的流量都作用到默认的drop区域

firewall-cmd --zone=drop -add-interface=ens33   # 作用在指定区域
firewall-cmd -add-interface=ens33   # 作用在默认区域
firewall-cmd -remove-interface=ens33  # 禁止ens33网卡作用在drop区域

注:不指定--zone参数的话,将会对默认区域进行设置
启动关闭firewalld防火墙服务的应急状况模式,远程连接服务器时请慎用

firewall-cmd --panic-on  # 拒绝所有流量,远程连接会立即断开,只有本地能登陆
firewall-cmd --panic-off  # 取消应急模式,但需要重启firewalld后才可以远程ssh
firewall-cmd --query-panic  # 查看是否为应急模式

设置一个来源地址作用在drop区域上面

firewall-cmd --zone=drop --add-source=192.168.1.12  # 作用在指定区域
firewall-cmd --add-source=192.168.1.12  # 作用在默认区域
firewall-cmd --remove-source=192.168.1.12  # 取消源IP为192.168.1.12的包作用在drop区域

说明:凡是IP为192.168.1.12发来包将会使用drop区域设置的规则
对于一个接收到的请求具体使用哪个zone,firewalld是通过三种方式来判断的:
1、source,来源地址
2、Interface,接收请求的网卡
3、firewalld配置的默认区域(zone)
这三个方式的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去找,如果前两个都找不到才会使用第三个默认区域。
查询drop区域是否允许请求ssh和https服务的流量

firewall-cmd --zone=drop --query-service=ssh
firewall-cmd --zone=drop --query-service=https

在drop区域开放https服务
firewall-cmd --zone=drop --add-service=https
取消开放https服务,即禁止https服务
firewall-cmd --zone=drop --remove-service=https
开放22端口
firewall-cmd --zone=drop --add-port=22/tcp
取消开放22端口
firewall-cmd --zone=drop --remove-port=22/tcp
开放8080和8081端口
firewall-cmd --zone=drop --add-port=8080-8081/tcp
查询drop区域开放了哪些端口
firewall-cmd --zone=drop --list-ports
允许icmp协议流量,即允许ping
firewall-cmd --zone=drop --add-protocol=icmp
取消允许icmp协议的流量,即禁ping
firewall-cmd --zone=drop --remove-protocol=icmp
查询drop区域开放了哪些协议
firewall-cmd --zone=drop --list-protocols
将原本访问本机888端口的流量转发到本机22端口
firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22
将原本访问本机888端口的流量转发到ip为192.168.2.208的主机的22端口,需要开启masquerade

firewall-cmd --zone=drop --add-masquerade
firewall-cmd --zone=drop --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.2.208

测试端口转发功能是否生效
在客户端尝试访问192.168.2.210主机的888端口,连上去后发现实际连接的是192.168.2.208主机,测试OK。


接下来我们来看富规则的设置,即rich rules
允许192.168.2.208主机的所有流量
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" accept"
允许192.168.2.208主机的icmp协议,即允许192.168.2.208主机ping
firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.2.208" protocol value="icmp" accept"
取消允许192.168.2.208主机的所有流量
firewall-cmd --zone=drop --remove-rich-rule="rule family="ipv4" source address="192.168.2.208" accept"
允许192.168.2.208主机访问ssh服务
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="ssh" accept"
禁止192.168.2.208访问https服务,并返回错误信息
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" service name="https" reject"
注:如果是drop的话是直接丢弃,会返回timeout(连接超时)
允许192.168.2.0/24网段的主机访问22端口
firewall-cmd --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
每分钟允许2个新连接访问ftp服务
firewall-cmd --add-rich-rule="rule service name=ftp limit value=2/m accept"
允许新的ipv4和ipv6连接ftp,并使用日志和审核,每分钟允许访问一次
firewall-cmd --add-rich-rule="rule service name=ftp log limit value="1/m" audit accept"
拒绝来自192.168.2.0/24网段的连接,10秒后自动取消
firewall-cmd --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 reject" --timeout=10
允许ipv6地址为2001:db8::/64子网的主机访问dns服务,并且每小时审核一次,300秒后自动取消
firewall-cmd --add-rich-rule="rule family=ipv6 source address="2001:db8::/64" service name="dns" audit limit value="1/h" reject" --timeout=300
将来自192.168.2.0/24网段访问本机80端口的流量转发到本机的22端口
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22"
将来自192.168.2.0/24网段访问本地80端口的流量转发到192.168.2.208主机的22端口
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 forward-port port=80 protocol=tcp to-port=22 to-addr=192.168.2.208"
伪装,将来自局域网192.168.2.0/24网段访问外网的流量映射为网络出口公网IP,即修改源IP地址

firewall-cmd --zone=drop --add-masquerade
firewall-cmd --zone=drop --add-rich-rule="rule family=ipv4 source address=192.168.2.0/24 masquerade"

好了,写的差不多了,工作中基本上够用了

二、图形管理工具

在RHEL7之前的发行版本默认的防火墙中,几乎没有图形化的防火墙管理工具,但是firewalld却有,firewall-config是firewalld防火墙配置管理工具的GUI(图开用户界面)版本,几乎可以实现所有命令行执行的操作。即使没有扎实的Linux命令基础,也完合可以通过它来妥善配置firewalld防火墙策略。Firewall-config的界面如下图所示,功能具体如下:

1、选择运行时(Runtime)模式或永久(Permanent)模式。
2、可选的策略集合区域列表。
3、常用的系统服务列表。
4、当前正在使用的区域。
5、管理当前被选中区域中的服务。
6、管理当前被选中区域中的端口。
7、开启或关闭SNAT(源地址转换协议)技术。
8、设置端口转发策略。
9、控制请求icmp服务的流量。
10、管理防火墙的富规则。
11、管理网卡设备。
12、被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量。
13、Firewall-config工具的运行状态。
对外开放http服务,如下图

添加一条防火墙规则,使其放行访问8080-8088端口(TCP协议)的流量,并且永久生效

单击Options菜单中的Reload Firewalld选项,让上面配置的永久规则立即生效,这与在命令行中执行--reload参数的效果一样。

SNAT技术相信很多人都知道,那现在我们来开启SNAT技术,其实就是命令行下的masquerade。

下面我们来配置一个端口转发规则,将888端口的流量转发到其他主机的22端口上。
注:转发本机端口不需要开启masquerade,转发到别的主机才需要开启masquerade。

配置富规则,允许192.168.2.206主机访问本机的1234端口号

最后来看一下区域和网卡的关联,增加网卡的话只需要输入网卡名称即可。

三、防火墙脚本实例

下面是我自己写的一个简单的防火墙初始化脚本,5210是ssh端口号,192.168.2.208是保垒机,192.168.2.206是备用ssh机器。

#!/bin/bash
systemctl stop firewalld
\cp -p /usr/lib/firewalld/zones/drop.xml /etc/firewalld/zones/
systemctl start firewalld
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=ens32
firewall-cmd --permanent --zone=drop --add-service=https
firewall-cmd --permanent --zone=drop --add-protocol=icmp
firewall-cmd --permanent --zone=drop --add-masquerade
firewall-cmd --permanent --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.208" port protocol="tcp" port="5210" accept"
firewall-cmd --permanent --zone=drop --add-rich-rule="rule family="ipv4" source address="192.168.2.206" port protocol="tcp" port="5210" accept"
firewall-cmd --permanent --zone=drop --add-rich-rule="rule family="ipv4" source address="116.226.230.115" port protocol="tcp" port="8023" accept"
firewall-cmd --reload

原文地址:http://blog.51cto.com/andyxu/2137046

时间: 2024-10-04 23:36:04

firewalld防火墙详解的相关文章

Linux iptables防火墙详解 + 配置抗DDOS攻击策略实战

inux iptables防火墙详解 + 配置抗DDOS攻击策略实战 Linux 内核中很早就实现了网络防火墙功能,在不同的Linux内核版本中,使用了不同的软件实现防火墙功能.在2.0内核中,防火墙操作工具叫:ipfwadm在2.2内核中,防火墙操作工具叫:ipchains在2.4以后的内核,防火墙操作工具叫:iptables ipfwadm 和 ipchains 比较老,已成历史版本,本章主要介绍Iptables 一.iptable 操作命令参数详解 -A  APPEND,追加一条规则(放到

CentOS7中firewall防火墙详解和配置

官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld1 cd /usr/lib/firewalld/services 目录中存放定义好的网络服务和端口参数,系统参数,不能修改. cd /etc/firewalld/services/ syst

防火墙详解

防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防火墙,不管你

Linux iptables 防火墙详解

0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集. iptables 组件是一种工具,也称为用户空间,它使插入.修改和除去信息包过滤表中的规则变得容易. 0x01 iptables的结构 iptables的结构: iptables -> Tables -> Chains ->

iptables防火墙详解

iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig/iptables 保存iptables规则到文件 以下是我服务器的iptables配置 # Generated by iptables-save v1.4.7 on Tue Jul 5 12:06:29 2016 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [

CentOS7中firewall防火墙详解和配置,.xml服务配置详解

修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙 1. firewall-cmd --state         #查看firewall的状态 firewall-cmd --list-all  #查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略) firewall-cmd --list-all-zones  #查看所有的防火墙策略(即显示/etc

Linux防火墙详解(二)

一.iptables命令基本语法 二.iptables语法进阶 三.iptables显示扩展 四.iptables简单案例 五.iptables之forward 六.iptables之NAT 一.iptables命令基本语法 iptables [-t table] {-A|-C|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R 

linux安全之iptables防火墙详解2

在上篇文章中我们介绍了iptables主要的链INPUT,这次我们主要介绍PREROUTING  POSTROUTING这两个链主要用于实现nat功能 nat:相信学网络的人对这个应该很熟悉,网络地址转换,一般用于局域网共享上网或者特殊的端口转换服务 PREROUTING:在数据包到达防火墙时进行路由之前执行的规则,作用是改变数据包的目的地址,目的端口 PSOTROUTING:在数据包离开防火墙进行路由判断之后执行的规则,作用是改变数据包的原地址 源端口 1.部署企业上网网关实战,实验环境如下,

linux安全之iptables防火墙详解1

在介绍iptables防火墙之前我们先来了解下IP TCP报文的格式,因为iptables防火墙的规则基本都是根据这些报文中的字段信息来做匹配,所以报文的格式就非常重要了 ip头部信息 抓包信息如下 TCP头部信息如下 抓包信息如下 大家可以对照着图片和抓包对比每个字段的意思,这里理解起来会更方便,好了下面正式开始介绍我们的iptables,先附上图片简单说明下 Iptables/netfiter Iptables:命令行的编写规则工具 Netfiter:在内核中 链(内置): 相当于5道阀门,