RH134学习进程——十一.管理网络安全

十一.管理网络安全

1.管理服务器防火墙

1.1防火墙架构概念(netfilter框架)

防火墙是网络安全的关键组件,用于隔离不同信任级别的网络区域 (如内部网络和外部互联网),通过制定规则控制流量的进出,实现网络安全隔离;

Linux 内核的 netfilter 框架用于实现数据包过滤、网络地址转换(NAT)、端口转换等功能;

核心机制:hook点

它在 Linux 网络协议栈中预设了多个拦截点(hook),比如数据包进入网卡接口时、路由决策前后、数据包离开服务器时等。当数据包流经这些 hook 点时,会触发预先定义的规则(如防火墙策略),从而实现对流量的 "拦截 - 检查 - 放行 / 拒绝" 操作。

作用:

所有 Linux 防火墙工具的底层支撑,所有网络流量的控制逻辑最终都依赖 netfilter 框架来执行。

1.2nftables框架

nftables框架 是基于 netfilter 构建的新一代数据包分类与规则管理框架,在 RHEL 9 等现代 Linux 发行版中取代了老旧的 iptables,成为防火墙规则的核心实现。

优势:

|------------|--------------------------------------------------------------|------------------------|
| 特性 | iptables 框架 | nftables 框架 |
| 协议支持 | IPv4、IPv6、ARP、以太网分别用iptables、ip6tables、arptables、ebtables 管理 | 一个 nft 工具统一管理所有协议流量 |
| 规则效率 | 多协议规则分散,大流量下性能开销较高 | 规则集更高效,支持批量操作,资源消耗更低 |
| 语法与易用性 | 语法相对繁琐,规则逻辑分散 | 语法简洁统一,支持更灵活的规则组合与批量配置 |

迁移兼容性:

为了平滑过渡,系统提供 iptables-translateip6tables-translate 工具,可将旧iptables 配置文件 自动转换nftables 格式的配置,降低迁移成本。

1.3 firewalld

1.3.1 firewalld简介

firewalld 是基于 nftables的防火墙管理器,简化了防火墙的管理,让防火墙配置更简单。

firewalld的底层在 RHEL 9 及以后依赖 nftables,但对用户来说无需关注底层细节,只需通过firewalld 的逻辑(zone、服务)配置即可。

1.3.2 zone概念

firewalld引入了zone(区域)的概念,每个zone都是一组预定义的规则,根据数据包的源IP或传入网络接口,将流量分类到不同的zone,并应用相应规则;

zone 是一组预定义的防火墙规则集合,每个 zone 对应不同的 "信任级别"。例如,对完全可信的内部网络,可使用 trusted zone(允许所有流量);对不可信的公网,可使用 public zone(仅允许少数必要服务,如 SSH)。

1.3.2.1常规匹配:

(1)源IP匹配

服务器有trusted zone; 源IP:192.168.1.100

此时,来自 192.168.1.100 的所有流量,都会应用 trusted zone 的规则

(2)网络接口匹配

服务器网卡:ens33;绑定到public zone

所有从 ens33 接口进入的流量(无论源 IP),都会应用 public zone 的规则

1.3.2.2默认zone兜底

如果流量的源 IP 没绑定 zone,网络接口也没关联 zone,就会匹配默认 zone(firewalld 默认是 public zone)。

比如服务器有一个新网卡 ens34 未关联任何 zone,那么从 ens34 进入的流量会自动应用 public zone 的规则。

1.3.3核心流程:

1.4预定义zone

预定义 zone 是 firewalld 内置的一组预先配置好"区域 - 规则集合",每个 zone 对应不同的信任级别和流量控制策略。管理员可直接使用这些预定义 zone,也可基于它们进行自定义修改,从而快速搭建防火墙策略。

通过将网络流量按"信任级别"(如"完全可信的内部网络""不可信的公网")归类到不同预定义 zone,简化防火墙规则的配置逻辑 ------ 无需从零开始编写规则,只需选择合适的 zone 并微调即可。

预定义zone规则详解

|--------------|------------------------------------------------------------------------------------------------------|-------------------------------------------------------------|
| 区域名称 | 默认配置(传入流量规则) | 核心特点 |
| trusted | 允许所有传入流量 | 信任级别最高****,无任何流量限制**** |
| home | 除非与传出流量相关,或与ssh、mdns、ipp-client、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝传入流量 | 面向家庭场景 ,放行文件共享(samba)、打印机(ipp)等家庭常用服务 |
| internal | 除非与传出流量相关,或与 ssh、mdns、ipp-client、samba-client、dhcpv6-client 预定义服务匹配,否则拒绝传入流量(初始与 home 规则相同,可后续自定义差异) | 比home更偏向企业内部场景 ,可根据需求调整服务放行规则 |
| work | 除非与传出流量相关,或与 ssh、ipp-client、dhcpv6-client 预定义服务匹配,否则拒绝传入流量 | 面向办公场景 ,放行办公打印机(ipp)、SSH 管理等服务,弱化家庭类的 mdns、samba 服务 |
| public | 除非与传出流量相关,或与 ssh、dhcpv6-client 预定义服务匹配,否则拒绝传入流量;是新添加网络接口的默认区域 | 信任级别低,仅放行最必要的服务 (SSH 用于远程管理、DHCPv6 用于 IPv6 地址获取) |
| external | 除非与传出流量相关,或与 ssh 预定义服务匹配,否则拒绝传入流量;通过此区域转发的 IPv4 传出流量会进行伪装(NAT) | 具备 NAT 功能,既能限制传入流量 ,又能让内部设备通过它安全访问公网 |
| dmz | 除非与传出流量相关,或与 ssh 预定义服务匹配,否则拒绝传入流量 | 仅放行对外服务 的必要流量,同时通过 SSH 保留远程管理能力,平衡 "对外服务" 与 "安全隔离" |
| block | 除非与传出流量相关,否则拒绝所有传入流量 | 对传入流量 "硬拒绝 ",但会返回 ICMP 错误提示 |
| drop | 除非与传出流量相关,否则丢弃所有传入流量(甚至不产生 ICMP 错误响应) | 对传入流量 "静默丢弃",不返回任何响应 ,让攻击者难以判断目标状态 |

1.5预定义服务

预定义服务是 firewalld 内置"网络服务 - 端口 / 协议映射集合"。它将常见网络服务 (如 SSH、DNS、文件共享)与对应的端口、协议(TCP/UDP)预先关联 ,让管理员无需记忆复杂的端口号,只需通过 "服务名称" 即可快速配置防火墙规则

常见预定义服务

|---------------|---------------------------------------------------------------------|
| 服务名称 | 配置详情 |
| SSH | 本地 SSH 服务器,放行"22/tcp"流量 |
| dhcpv6-client | 本地 DHCPv6 客户端,放行"fe80::/64 IPv6"网络中"546/udp"流量 |
| ipp-client | 本地 IPP 打印服务,放行"631/udp"流量 |
| samba-client | 本地 Windows 文件和打印共享客户端,放行"137/udp、138/udp"流量 |
| mdns | 多播 DNS(mDNS)本地链路名称解析,放行"5353/udp"流量(指向"224.0.0.251"或"ff02::fb"多播地址) |

列出预定义服务:

firewall-cmd --get-services

如:

预定义服务的配置文件位置------/usr/lib/firewalld/services

文件的格式由firewalld.zone(5)定义(官方文档,定义规则与约束)

1.7从命令行配置防火墙

1.7.1概念

firewall-cmd 命令会与firewalld进行交互,所有防火墙的规则配置、zone 管理、服务启用等操作,都可通过它完成。

防火墙配置:

(1)runtime 配置:

临时生效的规则,服务器重启或 firewalld 服务重启后会丢失。

(2)permanent 配置:

永久生效的规则,需通过 firewall-cmd --reload 加载后才能在 runtime 中生效。

选项:

--zone=ZONE:

用于指定命令作用的区域(zone),若不指定则默认作用于 "默认 zone"(通常是 public)。

如果需要子网掩码,使用CIDR表示法,如192.168.1/24;

firewalld 配置架构图解:

1.7.2常见命令

|---------------------|---------------------------------------------------------------------|-------------------------------|
| 功能分类 | 命令格式 | 作用说明 |
| �� 查看信息类 | firewall-cmd --get-zones | 列出系统所有预定义 zone |
| | firewall-cmd --zone=<ZONE> --list-all | 查看指定 zone 的所有规则(服务、端口、源 IP 等) |
| | firewall-cmd --get-services | 列出所有预定义服务 |
| | firewall-cmd --zone=<ZONE> --list-services | 查看指定 zone 已放行的服务 |
| | firewall-cmd --zone=<ZONE> --list-ports | 查看指定 zone 已放行的端口 |
| ⚙️ Zone 管理类 | firewall-cmd --set-default-zone=<ZONE> | 设置系统默认 zone |
| | firewall-cmd --permanent --zone=<ZONE> --add-source=<CIDR> | 永久将源 IP 段 / CIDR 关联到指定 zone |
| | firewall-cmd --permanent --zone=<ZONE> --change-interface=<网卡名> | 永久将网卡关联到指定 zone |
| | firewall-cmd --permanent --zone=<ZONE> --remove-source=<CIDR> | 永久移除 zone 关联的源 IP 段 |

1.7.3标准操作步骤

(1)查看默认的zone

firewall-cmd --get-default-zone

(2)设置默认zone

firewall-cmd --set-default-zone=目标zone

(2)选择类型(临时/永久),添加服务, 在防火墙中永久放行"服务"

firewall-cmd --permanent \

---service=服务

(3)重置防火墙配置

firewall-cmd --reload

(4)验证永久配置是否存储成功

firewall-cmd --permanent --list-services \

--list-all

观察列出的zone所有规则是否有之前添加的内容。

完成配置后应进行完整的验证:

2.控制SELinux端口标记

2.1SELinux端口标记

SELinux(安全增强型 Linux)是 Linux 系统的强制访问控制(MAC)安全机制。

其中,"端口标记" 是 SELinux 控制网络流量的核心手段之一,它为每个网络端口(如 22/TCP、80/TCP)分配一个专属的安全标签(如 ssh_port_t、http_port_t),并通过策略规则限制 "哪些进程可以绑定哪些带标签的端口"。

工作机制:

当一个进程(如 SSH 服务、Web 服务)想要监听某个网络端口时,SELinux 会执行以下校验逻辑:

(1) 进程的安全标签:

每个进程运行时会被赋予一个 SELinux 标签(如 SSH 进程的标签是 sshd_t)。

(2) 端口的安全标签:

每个端口被标记为特定标签(如 22/TCP 是 ssh_port_t,80/TCP 是 http_port_t)。

(3) 策略规则校验:

SELinux 会检查 "进程标签是否被允许绑定该端口标签"。只有策略明确允许的组合(如 sshd_t 绑定 ssh_port_t),进程才能成功监听端口;否则,SELinux 会拦截操作并记录拒绝日志。

2.2列出端口标签

如果在非标准端口上运行服务,SELinux会拦截此流量,必须更新SELinux端口标签

(1)获取所有当前端口标签分配信息;

semanage port -l


(2)通过服务名称过滤SELinux端口标签

semanage port -l | grep 服务名

如:

semanage port -l | grep http


(3)使用端口号过滤SELinux端口标签

semanage port -l | grep -w 端口号

如:

semanage port -l | grep -w 80


2.3管理端口标签

使用semanage命令可以分配新端口标签、删除端口标签或修改现有端口标签;

选项:

-a:添加

-d:删除

-m:修改

-t:类型

-p:协议

-C:查看对默认策略的修改

2.4删除端口标签

删除自定义端口标签的语法和添加标签语法相同,使用-d选项;

如:

semanage port -d -t gopher_port_t -p tcp 71

验证:

semanage port -l | grep -w 71

无输出则已经删除标签。

删除失败,该端口未绑定,无法删除不存在标签。

2.5修改端口标签

使用-m选项更改端口绑定,比删除旧的添加新的端口标签更高效;

如:

semanage port -m -t http_port_t -p tcp 71

验证:

semanage port -l | grep -w 71

修改成功。

2.6实例

访问网址失败,在Web服务器主机上配置防火墙和SELinux设置

(1)访问服务器

curl http://服务器IP:30080

(2)调查失败原因

检查服务状态:

systemctl status httpd(服务)

重启服务:

systemctl restart httpd

失败,调查原因

systemctl status httpd.service

SELinux限制导致无法绑定端口

(3)调整SELinux配置

查找端口正确的类型:

semanage port -l | grep "http"

为要求的端口分配类型

semanage port -a -t http_port_t -p tcp 30080 (端口)

重启服务

systemctl restart httpd.service

(4)验证

systemctl status httpd

curl http://服务器IP:30080

(5)对防火墙设置做出相应调整

添加端口到public区域:

firewall-cmd --add-port=端口/协议 \

--zone=public \

--permanent

重启防火墙配置:

验证public区域的开放端口:

firewall-cmd --zone=public --list-ports --permanent

相关推荐
Gain_chance3 小时前
27-学习笔记尚硅谷数仓搭建-数据仓库DWD层介绍及其事务表(行为)相关概念
大数据·数据仓库·笔记·学习
zhengfei6114 小时前
Burp Suite 与AI之间的桥梁。
网络·安全·自动化
RFCEO4 小时前
学习前端编程:精准选中 HTML 元素的技巧与方法
前端·学习·css类选择器·兄弟元素选中·父子选中·关系选中·选择器选中
EnglishJun4 小时前
数据结构的学习(一)---单向链表
数据结构·学习·链表
Gain_chance4 小时前
28-学习笔记尚硅谷数仓搭建-DWD层交易域加购事务事实表建表语句及详细分析
数据仓库·hive·笔记·学习·datagrip
●VON4 小时前
React Native for OpenHarmony:Image 组件的加载、渲染与性能优化全解析
笔记·学习·react native·react.js·性能优化·openharmony
大模型玩家七七4 小时前
证据不足 vs 证据冲突:哪个对模型更致命
数据库·人工智能·pytorch·深度学习·安全
●VON4 小时前
React Native for OpenHarmony:FlatList 虚拟化引擎与 ScrollView 事件流的深度协同
javascript·学习·react native·react.js·von
星幻元宇VR4 小时前
消防安全教育展厅设备|消防器材装备3D展示系统
安全·3d·虚拟现实