Firewalld 防火墙浅析(一)

Firewalld是RHEL7和CentOS7的默认防火墙管理工具,它提供动态管理,支持IPv4、IPv6、以太网桥和IP集。Firewalld的核心特点是网络/防火墙区域,允许定义接口的信任级别。通过D-Bus接口,可以使用firewall-cmd等工具方便地调整配置。文章介绍了如何查看和管理firewalld的状态,以及如何配置区域、服务和端口等。
摘要由CSDN通过智能技术生成

简述

Firewalld 提供动态管理的防火墙,支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持 IPv4、IPv6 防火墙设置、以太网桥和 IP 集。运行时和永久配置选项是分开的。它还为服务或应用程序提供直接添加防火墙规则的接口。

  • RHEL 7 和CentOS 7默认防火墙管理工具,替代了6版本的iptables

  • 使用更加方便、功能也更加强大一些

  • 可以在运行时环境中立即进行更改。不需要重新启动服务或守护程序。借助 firewalld D-Bus 接口,服务、应用程序和用户都可以轻松调整防火墙设置。接口完整,用于防火墙配置工具firewall-cmd、firewall-config和firewall-applet。

  • firewalld 提供了支持 网络 / 防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具

  • firewalld 提供了一个 daemon 和 service,还有命令行和图形界面配置工具,它仅仅是替代了 iptables service 部分,其底层还是使用 iptables 作为防火墙规

    则管理入口,firewalld 自身并不具备防火墙的功能,而是和 iptables 一样需要通过内核的 netfilter 来实现,也就是说 firewalld 和 iptables 一样,他们的作

    用都是用于维护规则,而真正使用规则干活的是内核的 netfilter,只不过 firewalld 和 iptables 的结构以及使用方法不一样罢了。

设计

防火墙结构+nftables

  • 两层设计:核心层和顶层的D-Bus

    核心层:负责处理配置和后端,

    D-Bus层:更改和创建防火墙配置的主要方式

  • firewalld 提供的在线工具:firewall-cmd、firewall-config、firewall-applet、firewall-offline-cmd

  • 在线工具通过D-Bus接口来更改和创建防火墙配置

概念

firewalld区域zone

  • 一个 zone 就是一套过滤规则,数据包必须要经过某个 zone 才能入站或出站。不同 zone 中规则粒度粗细、安全强度都不尽相同。可以把 zone 看作是一个个

    出站或入站必须经过的安检门,有的严格、有的宽松、有的检查细致、有的检查粗略

  • 每个 zone 单独对应一个 xml 配置文件,在目录 /usr/lib/firewalld/services/ 下,文件名为 <zone名称>.xml。自定义 zone 只需要添加一个 <zone名称>.xml

    文件,然后在其中添加过滤规则即可

  • 每个 zone 都有一个默认的处理行为,包括:default(省缺)、ACCEPT、REJECT、DROP

  • 默认zone:public

zone类型

zone类型默认规则说明
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/丢弃区域拒绝流入的流量,除非与流出的流量相关

管理

# 查看状态	
systemctl status firewalld
# 关闭	
systemctl stop firewalld
# 开启
systemctl start firewalld
# 重启
systemctl restart firewalld
# 查看是否开机自启
systemctl is-enabled firewalld
# 开机时自启
systemctl enable firewalld
# 关闭自启
systemctl disable firewalld
# 重新加载
firewall-cmd --reload 
# 查看状态
firewall-cmd --state

使用

firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本,它的参数一般都是以“长格式”来提供的。与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且会随着系统的重启而失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加**–permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload**命令。

firewall-cmd对端口的操作,如开放端口等信息,都放在在"/etc/firewall/zones/public.xml"中记录。

image-20220123221718983

参数作用
–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关闭应急状况模式
# 查看默认区域
firewall-cmd --get-default-zone
# 设置默认区域为dmz
firewall-cmd -set-default-zone=dmz
# 查看已经打开的所有端口
firewall-cmd --zone=public --list-ports
# 开启指定端口:--permanent 永久生效,没有此参数重启后失效;firewall-cmd --reload重新加载区域规则,使之生效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 开启应急状况模式,断开一切连接
firewall-cmd --panic-on
# 关闭应急状况模式
firewall-cmd --panic-off
# 查看相关协议是否放行
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=https
firewall-cmd --zone=public --query-service=http
# 永久放行相关协议,立即生效
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
# 拒绝相关协议,立即生效
firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --reload
# 端口流量转发:把访问本机的8080端口流量转发到22端口
# 转发格式:firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
firewall-cmd --permanent --zone=public --add-forward-port=port=8080:proto=tcp:toport=22:toaddr=192.168.137.2
firewall-cmd --reload
# 拒绝来自相关网段的所有用户访问相关端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值