百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

网络安全必备!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一种表示...