网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
gudong366 2025-07-21 14:40 4 浏览
5.1 了解firewall防火墙基础概念与原理
5.1.1 Linux 防火墙概述
在网络安全领域,防火墙是保障网络安全的关键屏障,Linux 系统中的 firewall 防火墙(firewalld 服务)是一款功能强大且灵活的防火墙管理工具,广泛应用于企业级服务器、云环境以及各类网络安全场景。它采用动态管理策略,能够在不中断网络连接的情况下实时更新防火墙规则,极大地提高了网络安全管理的效率和灵活性。
与传统防火墙相比,firewalld 引入了区域(zone)和服务(service)的概念,这是其独特且高效的管理方式。区域是一组预定义的规则集合,每个区域代表不同的网络信任程度,例如 public(公共网络,安全级别高,开放的服务少)、private(私有网络,相对信任,开放更多服务)、trusted(可信网络,几乎完全信任,开放大量服务)等。服务则对应常见的网络应用协议和端口,如 http 服务对应 80 端口,ssh 服务对应 22 端口等。通过将网络接口分配到不同区域,并针对区域配置允许或拒绝特定服务,管理员可以轻松实现精细化的网络访问控制。
5.1.2 firewall 工作原理
firewalld 基于 Netfilter/iptables 框架构建,Netfilter 是 Linux 内核中的数据包过滤、网络地址转换(NAT)和数据包处理框架,iptables 是基于该框架的命令行工具,而 firewalld 则提供了更高级、更易于管理的接口。
当网络数据包进入 Linux 系统时,首先会经过 Netfilter 框架的检查。firewalld 根据预先配置的规则,对数据包的源地址、目的地址、端口号、协议类型等信息进行匹配。如果数据包符合某个允许规则,就会被放行通过;如果匹配到拒绝规则,则会被丢弃;若没有匹配到任何规则,将按照默认策略进行处理(通常默认策略为拒绝)。同时,firewalld 支持状态检测功能,能够跟踪网络连接的状态,对于已经建立的连接,后续相关数据包会被自动放行,提高了网络通信的效率和安全性。
5.1.3 firewall 规则管理
firewall 的规则管理主要围绕区域和服务展开。管理员可以通过命令行工具(如 firewall-cmd)或图形化界面工具(如 firewall-config)来进行操作。通过 firewall-cmd 命令,可以实现添加、删除、查询防火墙规则等操作。例如,使用 firewall-cmd --add-service=http --zone=public 命令,即可在 public 区域中添加允许 http 服务通过的规则,使得外部网络能够访问该 Linux 系统上的 Web 服务。此外,还可以针对特定的 IP 地址、IP 段或端口范围进行规则配置,满足复杂的网络安全需求。
在 firewalld 中,不同的网络区域(域)有着不同的默认配置,具体如下表所示:
网络区名称 | 默认配置 |
trusted | 可接受所有的网络连接 |
home | 用于家庭网络 |
internal | 用于内部网络,仅接受 ssh,mdns,gp-client,samba-client,dhcpv6-client 连接 |
work | 用于工作区,仅接受 ssh,ipp-client,dhcpv6-client 服务连接 |
public | 用于公共区域,仅接受 ssh,ipp-client,dhcpv6-client 服务连接,是 firewalld 的默认区域 |
dmz | 仅接受 ssh 服务的连接 |
firewalld 的默认区域是 public,合理利用这些区域的特性,能够帮助管理员更高效地进行网络访问控制 。
5.2 Firewalld常用操作
5.2.1 Firewalld规则的两种状态
firewall-config(需要有图形化界面的才能使用),firewall-cmd是命令行工具,实际生产环境主要使用firewall-cmd来操作
运行时( runtime):修改规则马上生效,但是临时生效,默认是运行时状态 持久配置( permanent): 修改后需要重载才会生效。
firewall-cmd --permanent [RULE]
firewall-cmd --reload
5.2.2 Firewalld常见选项
可以通过firewall-cmd --help查看帮助,firewalld的选项很多,下面列出一些比较常用的。
--permanent # 配置写入到配置文件,永久生效
--reload # 重载配置文件,永久生效
--zone= # 指定区域,默认是public
--get-default-zone # 查看默认区域
--set-default-zone= # 设置默认区域
--get-zones # 获取所有可用的区域
--get-active-zones # 获取当前激活(活跃)的区域
--add-source= # 添加地址,可以是主机或网段,遵循当前区域的target
--remove-source # 移除地址,可以是主机或网段,遵循当前区域的target
--add-service= # 添加服务
--remove-service= # 移除服务
--list-services # 显示当前区域内允许访问的所有服务
--add-port=xx/tcp # 添加端口,后面要指定是TCP还是UDP
--remove-port= # 移除端口,遵循当前区域的target
--list-ports # 显示指定区域内允许访问的所有端口号
--list-all # 列出当前使用的区域的配置
--list-all-zones # 列出所有区域的配置
--get-zone-of-interface= # 获取指定接口所在的区域
--list-icmp-blocks # 显示指定区域内拒绝访问的所有ICMP类型
--list-protocols --列出在指定区域中允许通过的协议
5.2.3 常用的增删改查操作
(1)查看规则firewall-cmd --list-all,不指定区域默认显示public区域。
当前区域的配置信息解释:
[root@localhost ]# firewall-cmd --list-all # 活动的区域
target: default # 默认启动的区域
icmp-block-inversion: no # ICMP协议类型黑白名单开关(yes/no)
interfaces: eth0 # 关联的网卡接口
sources: # 来源,可以是IP地址,也可以是mac地址
services: dhcpv6-client ssh # 列出允许通过这个防火墙的服务
ports: 80/tcp # 列出允许通过这个防火墙的目标端口。(即 需要对外开放的端口)
protocols: # 协议值可以是一个协议 ID 数字,或者一个协议名
masquerade: no # 表示这个区域是否允许 IP 伪装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器
forward-ports: # 列出转发的端口
source-ports: # 允许的来源端口
icmp-blocks: # 可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许
rich rules: # 富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的
查看信息常用的命令:
# 查询默认区域配置信息
firewall-cmd --list-all
# 查看区域配置信息
firewall-cmd --list-all --zone=work
# 查询所有端口
firewall-cmd --list-ports
# 查询指定端口
firewall-cmd --zone=public --query-port=22/tcp
# 查询放通IP段
firewall-cmd --list-sources
# 查看默认区域
firewall-cmd --get-default-zone
# 查看所有可以使用的区域
firewall-cmd --get-zones
# 查看活跃的区域
firewall-cmd --get-active-zones
# 查看网卡绑定在了哪个区域
firewall-cmd --get-zone-of-interface=[IFACE]
# 查看所有服务
firewall-cmd --get-services
(2)添加规则,以端口方式放行服务。
开放特定端口,例如MySQL数据库默认端口3306,firewall-cmd --zone=public --add-port=3306/tcp --permanent。
开放snmp的161的UDP端口,默认的zone是public,可以不指定zone,firewall-cmd --add-port=161/udp --permanent。
生效配置,firewall-cmd --reload
查看规则,firewall-cmd --list-ports 或firewall-cmd --list-all。
(3)添加规则,以服务名称的方式放行服务。
放行nfs服务的所有端口,firewall-cmd --zone=public --add-service=nfs --permanent。
放行ssh服务,firewall-cmd --zone=public --add-service=ssh --permanent。
重载防火墙并查看放行结果。
(4)删除规则,删除开放的3306端口,firewall-cmd --permanent --remove-port=3306/tcp 。
删除nfs服务,firewall-cmd --permanent --remove-service=nfs。
重载防火墙并查看放行结果。
5.2.4 Firewalld防火墙富规则
Firewalld 防火墙的富规则是一种功能强大且灵活的高级规则配置方式 ,相较于基础规则,它能够实现更精细、更复杂的网络访问控制。富规则可以针对网络数据包的源地址、目的地址、端口、协议、连接状态等多种属性进行细致的条件设定。
(1)富规则常用的选项
firewall-cmd
--list-rich-rules --列出富规则
--add-rich-rule=<rule> --添加富规则
--remove-rich-rule=<rule> --移除富规则
--list-all 和 --list-all-zones --也能列出存在的富规则
(2)富规则语法,规则的几乎每个单一元素都能够以option=value形式来采用附加参数。
rule
[source]
[destination]
service|port|protocol|icmp-block|masquerade|forward-port
[log]
[audit]
[accept|reject|drop]
具体格式如下所示
rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
destination address="address[/mask]" invert="True"
service name="service name"
port port="port value" protocol="tcp|udp"
protocol value="protocol value"
forward-port port="port value" protocol="tcp|udp" to-port="port value
" to-addr="address"
log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"]
accept | reject [type="reject type"] | drop
(3)常用的富规则配置,如设置对特定IP访问特定端口。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.10.10.110/32" port port="1521" protocol="tcp" accept"
firewall-cmd --reload
批量加端口,允许某个网段访问多个端口。
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.10.10.0/24 port port=8080-8090 protocol=tcp accept'
firewall-cmd --reload
开启某个IP访问某个服务。
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 service name=nfs source address="10.10.10.101/32" accept'
firewall-cmd --reload
拒绝某个IP访问所有端口。
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=10.10.10.110/32 reject'
firewall-cmd --reload
查看配置结果。
5.3 firewall实战案例——放行http服务
5.3.1 安装http服务
(1)确保虚拟机可以上网以及yum源可用的情况下安装http服务yum -y install httpd。
启动http服务并设置开机自启动systemctl start httpd && systemctl enable httpd
启动之后查看http服务状态systemctl status httpd
(2)修改服务端口(可降低遭受自动扫描和攻击的风险、避免冲突),将
/etc/httpd/conf/httpd.conf配置文件中的监听端口改为12090。
修改完成后重启http服务systemctl restart httpd,查看服务端口信息netstat -ntpl,若提示没有netstat命令,则执行yum -y install net-tools命令安装。
(3)使用curl命令测试服务是否可以访问curl http://localhost:12090,出现http服务主页代码即成功。
接下来在开启firewalld防火墙的情况下,在宿主机上的浏览器访问虚拟机的http服务,结果是访问失败。
5.3.2 以端口的方式放行http服务
(1)放行12090端口firewall-cmd --zone=public --add-port=12090/tcp --permanent
(2)查看放行结果firewall-cmd --list-all
(3)在宿主机上的浏览器访问虚拟机的http服务
成功访问到虚拟机安装的http服务,将上面添加的这条规则删除firewall-cmd --zone=public --remove-port=12090/tcp --permanent,并查看结果。
5.3.3 以服务名称的方式放行服务
(1)放行http服务firewall-cmd --zone=public --add-service=http --permanent
(2)查看放行结果firewall-cmd --list-all,可以看到在“services”属性的后面增加了http
(3)在宿主机上的浏览器访问虚拟机的http服务。
相关推荐
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
-
不会Linux的程序员不是好程序员,不会shell编程就不能说自己会Linux。shell作为Unix第一个脚本语言,结合了延展性和高效的优点,保持独有的编程特色,并不断地优化,使得它能与其他脚本语言...
- 小白7天掌握Shell编程:脚本的创建和执行
-
一、课前声明1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络攻防干货!二、知识点详解Shell脚本的格式要求:脚本要以!#/bin/bash开头,其中bash可以替换...
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
-
飞牛NAS本身就是Linux内核(Debian发行版),那为何还要安装一个Linux呢?因为飞牛的Linux是特殊版本,并不能运行PC端的带UI的程序,比如我需要登录微信,需要使用wps打字……,这是...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
- Apple尝试使用轻量级Linux虚拟机实现容器化
-
Apple于本周一发布了一个开源的容器化框架,用于在Mac上创建和运行Linux容器镜像。软件容器将应用程序及其依赖项组合成一个单元,在主机上运行于隔离环境中。由于它们基于符合OCI标准...
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
-
在享受容器带来的轻量与灵活的同时,我们也必须面对一个现实问题:安全隐患。容器并不是天然安全,错误配置甚至可能让攻击者“越狱”入侵主机!本篇将带你从多个层面强化Docker的安全防护,构建真正可放心...
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
-
5.1了解firewall防火墙基础概念与原理5.1.1Linux防火墙概述在网络安全领域,防火墙是保障网络安全的关键屏障,Linux系统中的firewall防火墙(firewalld服...
- 从零开始搭建 Linux PXE 无盘启动服务器
-
在企业环境或实验室中,PXE(PrebootExecutionEnvironment,无盘启动)被广泛用于大规模批量部署操作系统。通过PXE,无需U盘或CD,就能远程启动和安装Linux...
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
-
Fedora42正式发布FedoraLinux42现已正式发布!此版本基于最新的Linux内核6.14构建,带来了众多激动人心的新特性和改进,旨在提供更现代化、更强大、更易用的Li...
- Linux Kernel学习003——内核源码
-
Linux学习笔记:老版本内核的坑,新工具救场,代码门道藏着啥秘密.最近想学Linux内核,网上查资料发现现在的稳定版本都已经到5.x了,但我跟着教程选的是2.6.34。官网下载链接卡着老卡,后来用清...
- Linux:实现Hadoop集群Master无密码登录
-
以下所介绍的安装方式都是在线安装方式,如果你需要连网请参考:Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案环境:OS:LinuxUbuntu1...
- 除了Win10,微软还发布了一套“专业版Linux”系统
-
IT之家讯9月21消息,不知道大家是否还记得,微软CEO纳德拉曾在去年的一次活动中公开宣称“微软爱Linux”,其实那个时候的微软就已经在服务器方面拥抱Linux了。而最近,除了最新Windows1...
- Linux系统匿名上网小技巧(linux匿名文件)
-
Tails可以做什么+优点Tails所有数据连接通过Tor网络传输,可以为个人用户提供最好的匿名性和安全性,并且它是一个Linux系统,不会感染Windows系统的病毒,它可以存储在闪存盘上运行。-...
- Linux环境中DeepSeek AI大模型使用与管理之七:安装Cherry Studio
-
简介:在Linux系统中成功通过Ollama部署DeepSeek-R1大模型后,用户通常需要一个直观且易于操作的客户端来访问和交互。为了满足这一需求,本文将详细介绍如何在Linux环境中安装和配置Ch...
- Linux系统部署Go编程环境(一)使用Go语言编写简单web服务器
-
摘要:Go语言是一个开源的编程语言,Go语言被称为“互联网时代的C语言”。Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有for一种表示...
- 一周热门
- 最近发表
-
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
- 小白7天掌握Shell编程:脚本的创建和执行
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
- 如何在 Linux 中使用 Sysctl 命令?
- Apple尝试使用轻量级Linux虚拟机实现容器化
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
- 从零开始搭建 Linux PXE 无盘启动服务器
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
- Linux Kernel学习003——内核源码
- 标签列表
-
- linux一键安装 (31)
- linux运行java (33)
- ln linux (27)
- linux 磁盘管理 (31)
- linux 内核升级 (30)
- linux 运行python (28)
- linux 备份文件 (30)
- linux 网络测试 (30)
- linux 网关配置 (31)
- linux jre (32)
- linux 杀毒软件 (32)
- linux语法 (33)
- linux博客 (33)
- linux 压缩目录 (37)
- linux 查看任务 (32)
- 制作linux启动u盘 (35)
- linux 查看存储 (29)
- linux乌班图 (31)
- linux挂载镜像 (31)
- linux 软件源 (28)
- linux题目 (30)
- linux 定时脚本 (30)
- linux 网站搭建 (28)
- linux 远程控制 (34)
- linux bind (31)