简介
1、Firewalld提供更加智能化的防火墙管理规则,优化策略配置方案,支持网络“zones(域)”,并为网络及其关联的链接、接口或源分配信任级别,不同信任级别默认开放服务不同。
2、支持IPV4,IPV6,以太网桥以及IPSET防火墙设置。
3、运行时态与永久配置分离,运行时态可手动更改,重置后回到永久配置(文件配置)
4、优化iptables添加规则,还支持图形界面(本文不介绍),除了iptables,还有ip6tables和ebtables规则。
二
概念及架构
空间架构分为上下两层。
1、上层:firewalld D-Bus:命令主接口,修改防火墙配置主要方式。
firewall-cmd:主要命令行操作方式。
firewall-config:离线命令行操作模式,因为直接作用于firewalld永久配置中,所以在firewall运行时不建议直接操作。
firewall-config:图形配置模式。
firewall-applet:防火墙小程序。
2、下层(核心层):负责处理配置和后端,并含有iptables,ip6tables,ebtables,ipset模块加载器。
空间结构图示
建议使用NetworkManager,虽然firewalld不依赖它,但是NetworkManager会解决一些网络设备重命名的通知等问题。
3、Firewalld支持zones,services,IPsets和ICMP类型。
三
核心组成
1、ZONE(防火墙区域定义链接、接口或源地址绑定的信任级别),共10(还有一种为default)种,直接为网域种的其他计算机建立信任关系度,不用进行麻烦的配置操作,只需要选择一个zone即可,如若不满足需要,还可手动添加信任服务。
Drop : 任何传入的网络的数据包都被丢弃
Block : 任何传入网络的数据包都被拒绝(包括ICMP),只能启动网络链接
Public : 在公共区域内使用,近接受选定的传入链接(默认:仅ssh或dhcpv6-client服务链接)
External : 用于伪装,出去的ipv4网络链接通过此区域伪装和转发(默认:仅接受ssh服务链接)
Dmz : 对内部网络访问权限限制(默认:仅接受ssh服务链接)
Work : 用于工作区(默认:仅接受ssh,ipp-client或dhcpv6-client服务链接 )
Home : 用于家庭区(默认:仅接受ssh,mdns,ipp-client,samba-client或dhcpv6-client服务链接)
Internal : 内部,对网络上的其他计算机信任的较高,默认大部分服务
Trusted : 最高信任级别,接受所有网络链接
public 配置(/etc/firewalld/zones)
2、NetworkManager存在的意义
1)NetworkManager(接口管理者)不能处理网络链接,它的作用是告诉firewalld将用于此链接的网络接口分配给该链接的配置中定义的区域,当然存在网络配置的系统都支持ifcfg文件的系统
2)网络链接由网络脚本处理
3、配置规则(当然,规则这种东西都是看起来繁杂冗长,常用的就几个)
规则介绍:
version=”string” 版本提供
target=”ACCEPT|%%REJECT%%|DROP” 接受,拒绝或丢弃与任何规则(端口,服务等)不匹配的每个数据包
short 可选开始和结束的标记,用于名称备注
description 可选的开始和结束的标记,用于描述备注
interface 可选的空元素标记 ,只有一个name属性,一般使name=”string”方式绑定服务到zone的接口上
source 可选的空元素标记,可多次使用。它可用于将源地址、地址反馈、MAC地址或ipset绑定到区域。属性如下:
address=”address[/mask]” 源是IP地址或具有IPv4、IPv6掩码的网络IP地址;
mac=”MAC” 源是MAC地址。它必须是xx:xx:xx:xx:xx:xx形式;
ipset=”ipset” 源是一个ipset;
port 可选的空元素标记,可以多次使用具有多个端口条目。属性如下:
port=”portid[-portid]” 端口可以是单个端口号portid,也可以是端口范围portid-portid
protocol=”tcp|udp” 协议可分为TCP/UDP
protocol 可选的空元素标记,可以多次使用具有多个协议条目。属性如下:
value=”string”
icmp-block 可选的空元素标记,可以多次使用具有多个条目,每个icmp-block标记只有一个强制属性:
name=”string”
icmp-block-inversion 可选的空元素标记,只能在区域配置中使用一次。该标志反转icmp块处理。仅接受启用的ICMP类型,并在区域中拒绝所有其他类型
masquerade 伪装,可选的空元素标记。它只能在区域配置中使用一次,不能用于IPV6。
forward-port 可选的空元素标记,可以多次使用具有多个端口或数据包转发条目。forward-port有强制和可选属性:
强制属性: port=”portid[-portid]”,protocol=”tcp|udp”
to-port=”portid[-portid]” 要转发到的目标端口或端口范围。
to-addr=”address” 目标IPv4地址
source-port 可选的空元素标记,可多次使用具有多个源端口条目。源端口所有属性都是必需的:
port=”portid[-portid]”
protocol=”tcp|udp”
常用规则示例:
规则示例
更多规则:
详见https://firewalld.org/documentation/man-pages/firewalld.richlanguage
四
常用命令
1、基础命令
firewall-cmd --state #查看firewalld的状态
firewall-cmd --get-active-zones #查看当前活动的区域,并附带一个目前分配给他们的接口列表
firewall-cmd --get-defailt-zone #查看默认区域
firewall-cmd --set-default-zone=dmz #设置默认区域
firewall-cmd --get-zones #查看所有可用域区
firewall-cmd --permanent --zone=internal --add-source=172.25.254.60/24 #设置源地址的所属zone (–permanent参数表示永久生效设置,如果没有指定–zone参数,则表示加入到默认区域)
firewall-cmd --permanent --zone=internal --remove-source=172.25.254.60/24 #删除网络地址
firewall-cmd --reload #重载配置,并不会中断服务
firewall-cmd --complete-reload #完全重载,会中断服务
2、添加服务
firewall-cmd --zone=public --add-service=http #在运行时环境的公共区域打开http服务
firewall-cmd --permanent --zone=public --add-service=http #永久设定,在公共区域打开http服务
3、使用 –direct选项,在运行时里添加或移除链(iptables四表五链)
firewall-cmd --direct --add-rule ipv4filter IN_public_allow 0 -p tcp --dport 80 -j ACCEP #添加规则,指定运行所有链接进入80端口
firewall-cmd --direct --remove-ruleipv4 filter IN_public_allow 0 -p tcp --dport 80 -j ACCEPT #删除规则
firewall-cmd --direct–get-all-rules #列出规则
4、使用现有文件创建新服务(在不熟悉配置命令及其规则的情况下,不建议使用这种方式)
firewall-cmd --permanent --new-service-from-file=myservice.xml --name=mynewservice
五
附加知识点(iptables四表五链,netfilter)
1、防火墙于iptables的内在关联
简而言之,iptables算是防火墙的基石,火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专门的数据包过滤表中,这些表集成在Linux内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。
而netfilter/iptables进行IP过滤规则的添加,编辑和移除规则。
netfilter组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
Iptables组件是一种工具,也成为用户空间,它使插入、修改和除去信息包过滤表中的规则变得容易。
Linux内核过滤结构
2、iptables四表五链
Filter表 —— 三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包 内核模块:iptables_filter.
Nat表 —— 三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat
Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)
Raw表 —— 两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理 内核模块:iptable_raw
四表五链对应关系
3、链表处理逻辑
INPUT —— 进来的数据包应用此规则链中的策略
OUTPUT —— 外出的数据包应用此规则链中的策略
FORWARD —— 转发数据包时应用此规则链中的策略
PREROUTING —— 对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
POSTROUTING —— 对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)
链表处理逻辑