云计算百科
云计算领域专业知识百科平台

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、以太网分别用iptablesip6tablesarptablesebtables 管理

一个 nft 工具统一管理所有协议流量

规则效率

多协议规则分散,大流量下性能开销较高

规则集更高效,支持批量操作,资源消耗更低

语法与易用性

语法相对繁琐,规则逻辑分散

语法简洁统一,支持更灵活的规则组合与批量配置

迁移兼容性:

        为了平滑过渡,系统提供 iptables-translate 和 ip6tables-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

除非与传出流量相关,或与sshmdnsipp-clientsamba-clientdhcpv6-client 预定义服务匹配,否则拒绝传入流量

面向家庭场景,放行文件共享(samba)、打印机(ipp)等家庭常用服务

internal

除非与传出流量相关,或与 sshmdnsipp-clientsamba-clientdhcpv6-client 预定义服务匹配,否则拒绝传入流量(初始与 home 规则相同,可后续自定义差异)

home偏向企业内部场景,可根据需求调整服务放行规则

work

除非与传出流量相关,或与 sshipp-clientdhcpv6-client 预定义服务匹配,否则拒绝传入流量

面向办公场景,放行办公打印机(ipp)、SSH 管理等服务,弱化家庭类的 mdnssamba 服务

public

除非与传出流量相关,或与 sshdhcpv6-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/udp138/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

赞(0)
未经允许不得转载:网硕互联帮助中心 » RH134学习进程——十一.管理网络安全
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!