RHEL/CentOS的firewalld防火墙服务配置

从 RHEL/CentOS 7开始,使用新的防火墙服务------firewalld。这里介绍该防火墙服务的基本用法

一、防火墙服务管理:从 RHEL/CentOS 7开始采用Systemd作为新的系统管理器,而systemctl则是Systemd中用于管理服务的命令

# 启动防火墙服务
systemctl start firewalld

# 停止防火墙服务
systemctl stop firewalld

# 重启防火墙服务
systemctl restart firewalld

# 查看防火墙服务状态
systemctl status firewalld

# 防火墙服务 设置开机自启
systemctl enable firewalld

# 防火墙服务 取消开机自启
systemctl disable firewalld

二、防火墙配置

firewalld提供了命令行客户端------firewall-cmd用于实现配置、修改防火墙规则

在firewalld中引入zone区域的概念。可以按网卡接口、网络连接的源地址将网络流量归属到不同的区域下进行管理。每个区域使用独立的防火墙规则。故一个网格连接只能属于一个区域,但一个区域拥有多个网络连接。当一个网络流量不属于任何一个区域管理时,则会使用默认区域(通常,该默认区域为public区域)

# 查看所有区域的名称
firewall-cmd --get-zones

# 查看所有区域的详情
firewall-cmd --list-all-zones

# 查看指定区域的详情(防火墙规则)
firewall-cmd --zone=<区域名称> --list-all

# 查看默认区域
firewall-cmd --get-default-zone

# 设置默认区域
firewall-cmd --set-default-zone <区域名称>

# 查看活动的区域 及其配置的 网卡接口、源地址
# (一个区域如果配置了 网卡接口 或 网络连接的源地址,即为active zone活动区域)
firewall-cmd --get-active-zones

# 查看指定网卡接口所属的区域
firewall-cmd --get-zone-of-interface=<网卡接口名称>

# 向指定区域 添加 网卡接口
firewall-cmd --zone=<区域名称> --add-interface=<网卡接口名称>

# 从指定区域 移除 网卡接口
firewall-cmd --zone=<区域名称> --remove-interface=<网卡接口名称>

# 查看指定源地址所属的区域
firewall-cmd --get-zone-of-source=<源地址>

# 向指定区域 添加 源地址
firewall-cmd --zone=<区域名称> --add-source=<源地址>

# 从指定区域 移除 源地址
firewall-cmd --zone=<区域名称> --remove-source=<源地址>

三、控制端口

开放端口

# 对指定区域,开放端口
firewall-cmd --zone=<区域名称>  --add-port=<端口号>[-端口号]/<协议>

# 对public区域,开放tcp协议83端口
firewall-cmd --zone=public  --add-port=83/tcp

# 对public区域,开放udp协议的10、11、12、13、14、15端口
firewall-cmd --zone=public  --add-port=10-15/udp

删除端口,相当于禁用端口

# 从指定区域,删除端口
firewall-cmd --zone=<区域名称>  --remove-port=<端口号>[-端口号]/<协议>

# 对public区域,删除tcp协议的83端口
firewall-cmd --zone=public  --remove-port=83/tcp

# 对public区域,删除udp协议的10、11、12、13、14、15端口
firewall-cmd --zone=public  --remove-port=10-15/udp

查看所有开放的端口

# 查看指定区域下,所有开放的端口
firewall-cmd --zone=<区域名称> --list-ports

# 查询指定区域下,指定协议的端口是否开放,结果yes表示开放,结果no表示未开放
firewall-cmd --zone=<区域名称> --query-port=<端口>/<协议>

# 查看public区域下,tcp协议的19999端口是否开放
firewall-cmd --zone=public --query-port=19999/tcp

使用服务

在firewalld中引入了服务service的概念,可以将其理解为一系列端口的集合。这样只需添加相应的服务到防火墙规则中,即可打开该服务关联的所有端口。firewalld中已经预定义了一部分service服务及其相应的端口

# 查看所有预定义的服务
firewall-cmd --get-services

预定义服务的xml文件位于 /usr/lib/firewalld/services/ 下,可通过查看相应服务的xml文件确认其所关联的端口

此外我们还可以自定义服务及其关联的端口集合,自定义服务xml文件的写法可以去抄预定义服务xml文件的作业;然后将自定义服务的xml文件存放于 /etc/firewalld/services 路径下;最后执行 firewall-cmd --reload 命令,使得自定义服务的xml文件生效。此时就可以像使用预定义服务一样,去使用自定义服务了(自定义服务的服务名即为xml文件的文件名,例如demo1.xml文件对应的服务名即为demo1)

# 查看指定区域下添加的服务
firewall-cmd --zone=<区域名称> --list-service

# 查询指定区域下,指定的服务是否被添加到该区域,结果yes表示已添加,结果no表示未添加
firewall-cmd --zone=<区域名称> --query-service=<服务名>

# 向指定区域中添加服务
firewall-cmd --zone=<区域名称> --add-service=<服务名>

# 从指定区域中移除服务
firewall-cmd --zone=<区域名称> --remove-service=<服务名>

Note

Runtime Mode 运行时模式、Permanent Mode 永久模式

Runtime Mode 运行时模式:通过 firewall-cmd 修改防火墙配置时,默认只会对当前立即有效,即所谓的Runtime Mode 运行时模式。防火墙服务重启后将会失效

Permanent Mode 永久模式:如果期望防火墙服务重启后使用新配置,可在firewall-cmd命令中使用 --permanent选项。此时新配置将不会在当前立即生效,而是在重启防火墙服务后永久生效。即所谓的Permanent Mode 永久模式

如果期望同时修改两种模式(运行时模式、永久模式)下的配置,可有下述两种方式实现。这里推荐使用方式1,这样可以实现在将新配置应用到永久模式前,能够立即验证修改配置的效果

# 在 运行时模式下 修改防火墙配置
firewall-cmd <other options>

# 将修改后的所有配置保存到永久模式下,使得防火墙服务重启后新配置依然生效。即修改了永久模式的配置
firewall-cmd --runtime-to-permanent

# 在 永久模式下 修改防火墙配置
firewall-cmd --permanent <other options>

# 重新加载配置,使得修改后的所有配置在当前立即生效。即修改了运行时模式的配置
firewall-cmd --reload

timeout 选项

通过远程访问服务器时,一旦使用错误配置可能会导致用户锁定自身的机器,无法再次登陆访问。故可以使用 --timeout 选项 避免发生该问题。在达到超时时间后,相关更改会恢复到之前的状态。此外使用该选项时,将无法使用--permanent选项

# 向pulbic区域添加名为demo6的服务,并在5分钟后撤销此配置
firewall-cmd --zone=public --add-service=demo6 --timeout 5m
相关推荐
热爱嵌入式的小许2 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
韩楚风6 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学6 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO6 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu77 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我7 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、7 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程7 小时前
Linux中环境变量
linux
挥剑决浮云 -7 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学8 小时前
CentOS 7文件系统
linux·运维·centos