【十一、Linux管理网络安全】

十一、Linux管理网络安全

  • [1. 管理服务器防火墙](#1. 管理服务器防火墙)
    • [1.1 防火墙架构概念](#1.1 防火墙架构概念)
    • [1.2 nftables 框架](#1.2 nftables 框架)
    • [1.3 firewalld 简介](#1.3 firewalld 简介)
    • [1.4 预定义 zone(区域)](#1.4 预定义 zone(区域))
    • [1.5 预定义服务](#1.5 预定义服务)
    • [1.6 配置 firewalld 的方法](#1.6 配置 firewalld 的方法)
    • [1.7 从命令行配置防火墙(`firewall-cmd`)](#1.7 从命令行配置防火墙(firewall-cmd))
    • [1.8 使用 Web 控制台配置防火墙服务](#1.8 使用 Web 控制台配置防火墙服务)
  • [2. 控制 SELinux 端口标记](#2. 控制 SELinux 端口标记)
    • [2.1 SELinux 端口标记的核心作用](#2.1 SELinux 端口标记的核心作用)
    • [2.2 列出 SELinux 端口标签](#2.2 列出 SELinux 端口标签)
    • [2.3 管理 SELinux 端口标签(添加标签)](#2.3 管理 SELinux 端口标签(添加标签))
    • [2.4 删除 SELinux 端口标签](#2.4 删除 SELinux 端口标签)
    • [2.5 修改 SELinux 端口标签](#2.5 修改 SELinux 端口标签)

1. 管理服务器防火墙

1.1 防火墙架构概念

  • netfilter 框架:由 Linux 内核提供,是网络流量操作的核心框架,支持数据包过滤、网络地址转换(NAT)、端口转换等功能。
  • 核心机制:包含内核模块的"钩子(hook)",当网络数据包遍历系统网络堆栈时,钩子会拦截数据包并触发相关处理(如执行防火墙规则)。
  • 作用:作为底层支撑,为上层防火墙工具(如 nftables、firewalld)提供数据包交互能力。

NAT:虚拟机网络适配器,NAT:共享主机地址,将虚拟机地址转化成主机地址,可上网。

防火墙:允许谁进,不允许谁进,端口,白名单,针对TCP协议。socket用于机器内部。

1.2 nftables 框架

  • 定位:基于 netfilter 框架构建的数据包分类框架,是 RHEL 9 系统防火墙的核心,已取代传统的 iptables 框架。
  • 相比 iptables 的优势
    1. 多协议统一管理:单条规则可同时应用于 IPv4 和 IPv6 流量(双栈),无需为不同协议单独配置。
    2. 工具简化 :仅通过 nft 一个用户空间工具管理所有协议(iptables 需 iptablesip6tablesarptables 等多个工具)。
    3. 规则集更高效:减少规则冗余,提升数据包匹配效率。
  • 兼容性支持 :可通过 iptables-translateip6tables-translate 工具,将传统 iptables 配置文件转换为 nftables 格式,实现平滑迁移。

1.3 firewalld 简介

  • 定位 :nftables 框架的前端工具(通过 nft 命令与内核交互,管理),是 RHEL 9 中推荐的防火墙管理器;在 nftables 之前,曾作为 iptables 服务的替代方案直接操作 iptables。
  • 核心特性:基于 zone 的管理
    • 将所有网络流量按"信任级别"划分为不同 zone(区域),每个 zone 有独立的防火墙规则(允许/拒绝的端口、服务),简化复杂网络环境的防火墙配置。
    • 流量匹配逻辑
      1. 优先匹配数据包源 IP 地址所属的 zone,应用该 zone 规则;
      2. 若源 IP 无对应 zone,匹配传入网络接口所属的 zone,应用该 zone 规则;
      3. 若接口也无对应 zone,应用 默认 zone 规则。
  • 默认配置
    • 默认 zone:public(新添加的网络接口默认归属此 zone);
    • 特殊接口映射:lo(回环接口)默认归属 trusted zone(允许所有流量);
    • 流量处理原则:仅允许与"传出流量相关"或"匹配 zone 内允许的端口/服务"的流量通过,其余流量默认拒绝(drop/block zone 除外)。

1.4 预定义 zone(区域)

firewalld 提供 9 个预定义 zone,每个 zone 有默认的信任级别和流量规则,支持自定义修改。所有 zone 默认允许"与传出流量相关的传入流量",差异主要在于额外允许的服务/端口。一般会自己定义zone。

区域名称(zone name) 默认配置(允许的传入流量) 适用场景
trusted 允许所有传入流量 完全信任的网络(如本地测试环境、内部安全网络)
home 允许 ssh、mdns、ipp-client、samba-client、dhcpv6-client 服务 家庭网络(信任度高,需文件共享、打印等功能)
internal 允许 ssh、mdns、ipp-client、samba-client、dhcpv6-client 服务(与 home 初始配置一致) 内部办公网络(信任度较高,支持协作相关服务)
work 允许 ssh、ipp-client、dhcpv6-client 服务 工作网络(信任度中等,仅开放必要办公服务)
public 允许 ssh、dhcpv6-client 服务 公共网络(如互联网、外部非信任网络,新接口默认归属此 zone)
external 允许 ssh 服务;IPv4 传出流量会伪装(NAT),使流量看起来来自传出接口 IP 作为网关的服务器(对外提供有限服务,同时转发内部流量)
dmz 允许 ssh 服务 隔离区(DMZ,部署对外服务的服务器,如 Web 服务器,限制与内部网络交互)
block 拒绝所有传入流量(仅允许与传出流量相关的) 高安全需求场景(拒绝所有外部主动连接,仅响应内部发起的请求)
drop 丢弃所有传入流量(不响应 ICMP 错误,无任何回复) 最高安全级别场景(完全隐藏主机,避免被探测)

1.5 预定义服务

firewalld 内置多个预定义服务,每个服务包含"端口+协议"的组合配置,无需手动查询服务对应的端口,直接引用服务名即可完成防火墙规则配置。

常用预定义服务及配置

服务名称(service name) 配置(端口/协议) 功能说明
ssh TCP:22 远程登录服务(默认允许,几乎所有 zone 必备)
dhcpv6-client UDP:546(仅 fe80::/64 IPv6 网络) DHCPv6 客户端服务(获取 IPv6 地址)
ipp-client UDP:631 IPP 打印客户端服务(连接打印机)
samba-client UDP:137、138 Windows 文件/打印共享客户端服务(访问 Samba 共享)
mdns UDP:5353(指向 224.0.0.251 IPv4 / ff02::fb IPv6 多播地址) 多播 DNS 服务(本地链路名称解析,如局域网内设备发现)

查看预定义服务

  • 列出所有预定义服务:

    bash 复制代码
    [root@host-]# firewall-cmd --get-services
    # 输出示例:RH-Satelite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps ...(省略其余服务)
  • 服务配置文件路径:/usr/lib/firewalld/services/(文件格式遵循 firewalld.zone(5) 规范)。

1.6 配置 firewalld 的方法

firewalld 支持两种主流配置方式,满足图形化和命令行管理需求:

  1. firewall-cmd 命令行工具 :命令行交互,支持脚本自动化,适合服务器远程管理或批量配置。
    (kmangd)
  2. Web 控制台(Cockpit):图形化界面,操作直观,适合新手或可视化管理场景。

1.7 从命令行配置防火墙(firewall-cmd

核心命令规则

filewall-cmd命令会与firewalld进行交互。防火墙机制:底层是netfilter网络过滤器,在此之上就是防火墙白名单(nftables),前端管理是firewalld,是一个守护进程,管理的命令行是firewalld-cmd。

  • 配置生效范围 :默认操作仅作用于 runtime(运行时) 配置,重启 firewalld 或服务器后失效;添加 --permanent 选项可改为 永久配置 (需执行 firewall-cmd --reload 激活)。
  • zone 指定 :通过 --zone=<ZONE> 选项指定操作的 zone,未指定时默认操作当前默认 zone。
  • IP 格式 :如需指定子网,使用 CIDR 表示法(如 192.168.1.0/24)(192.168.1/24 子网掩码最后一位0省略)。

常用配置示例

将默认zone设置为dmz,将来自192.168.0.0/24网络的所有流量都分配给internal zone,并在internal zone 上打开mysql服务端口。

  1. 设置默认 zone

    bash 复制代码
    [root@host-]# firewall-cmd --set-default-zone=dmz
  2. 为 zone 绑定源 IP 段(永久配置)

    设定子网:

    bash 复制代码
    # 将 192.168.0.0/24 网段的流量分配给 internal zone
    [root@host-]# firewall-cmd --permanent --zone=internal --add-source=192.168.0.0/24
  3. 在 zone 中允许预定义服务(永久配置)

    bash 复制代码
    # 在 internal zone 中允许 mysql 服务(需先确保 mysql 是预定义服务)
    [root@host-]# firewall-cmd --permanent --zone=internal --add-service=mysql
  4. 激活永久配置

    bash 复制代码
    [root@host-]# firewall-cmd --reload  # 重新加载配置,使永久配置生效(不中断现有连接)
  5. 查看 zone 配置

    bash 复制代码
    # 查看 internal zone 的所有配置(包括源 IP、允许的服务/端口)
    [root@host-]# firewall-cmd --zone=internal --list-all

1.8 使用 Web 控制台配置防火墙服务

步骤1:登录 Web 控制台并获取管理员权限**

  • 访问服务器的 Web 控制台(默认端口 9090,如 https://<服务器IP>:9090),通过"Limited access"或"Turn on administrative access"按钮升级为特权权限(需输入 root 或 sudo 用户密码)。

步骤2:进入防火墙配置页面**

  • 点击左侧导航菜单的 Networking 选项,在"Firewall"部分点击 Edit rules and zones 按钮,进入防火墙配置主页面。

步骤3:查看当前 zone 及允许的服务**

  • 页面显示"活动 zone"(如 public)及该 zone 下允许的服务(如 ssh、dhcpv6-client),点击服务名称左侧的 > 可查看服务详情(端口、协议)。

步骤4:添加允许的服务**

  1. 点击"Firewall Allowed Services"页面右上角的 Add Services... 按钮,打开"Add services"弹窗;
  2. 弹窗支持两种添加方式:
    • Services :选择预定义服务(可通过"Filter services"输入框搜索,如输入"http"快速定位 http 服务);
    • Custom ports:手动输入自定义端口和协议(如 TCP:8080);
  3. 勾选目标服务左侧的复选框,点击 Add Services 按钮完成添加。

步骤5:验证配置**

  • 返回"Firewall Allowed Services"页面,可在服务列表中看到新添加的服务(如 http),表示配置生效。

2. 控制 SELinux 端口标记

2.1 SELinux 端口标记的核心作用

  • SELinux 网络流量控制逻辑 :通过"端口标记(Port Label)"实现对网络服务的访问控制------每个网络端口会被分配一个 SELinux 标签(如 22/TCP端口 对应 ssh_port_t),当进程要监听某个端口时,SELinux 会检查"进程标签"与"端口标签"是否匹配,仅匹配时允许进程绑定端口,防止恶意服务抢占合法服务的端口。
  • 示例
    • ssh 进程的标签为 sshd_t,仅允许绑定标签为 ssh_port_t 的端口(默认 22/TCP);
    • httpd 进程的标签为 httpd_t,仅允许绑定标签为 http_port_t 的端口(默认 80/TCP、443/TCP)。

2.2 列出 SELinux 端口标签

如果打算在非标准端口上运行服务,SELinux几乎肯定会拦截此流量,在这种情况下,必须更新SELinux端口标签。
1. 查看所有端口标签分配

使用 semanage port -l 命令(semanage 是 SELinux 配置管理工具),输出所有端口的 SELinux 标签、协议及端口号:

bash 复制代码
[root@host-]# semanage port -l
# 输出示例:
http_cache_port_t    tcp    8080, 8118, 8123, 10001-10010
http_cache_port_t    udp    3130
http_port_t          tcp    80, 81, 443, 488, 8008, 8009, 8443, 9000
# ...(省略其余端口标签)

2. 按服务/端口过滤查询

  • 按服务名称过滤 :结合 grep 查找特定服务相关的端口标签(如查找 FTP 服务的端口标签):

    bash 复制代码
    [root@host-]# semanage port -l | grep ftp
    # 输出示例:
    ftp_data_port_t    tcp    20
    ftp_port_t         tcp    21, 989, 990
    tftp_port_t        udp    69
  • 按端口号过滤 :结合 grep -w 精确查找某端口对应的标签(如查找 7 号端口的标签):

    bash 复制代码
    [root@host-]# semanage port -l | grep -w 7
    # 输出示例:
    gopher_port_t    tcp    70
    gopher_port_t    udp    70

2.3 管理 SELinux 端口标签(添加标签)

当服务使用"非标准端口"时(如 httpd 用 8081/TCP 而非默认 80/TCP),需为该端口添加对应的 SELinux 标签,否则 SELinux 会拦截进程绑定端口。

samanage命令可以分配新端口标签,删除端口标签,修改现有端口标签,-a添加,-t类型,-p协议,-d删除,-m更改。
命令语法

bash 复制代码
格式:semanage port -a -t <端口标签> -p <协议(tcp/udp)> <端口号>
[root@host-]# semanage port -a -t <port_label> -p tcp|udp <PORTNUMBER>

示例:为 71/TCP 端口添加 gopher_port_t 标签

bash 复制代码
[root@host-]# semanage port -a -t gopher_port_t -p tcp 71
 验证添加结果(查看自定义修改的端口标签,-C 表示仅显示用户自定义的配置)
[root@host-]# semanage port -l -C
# 输出示例:
SELinux Port Type    Proto    Port Number
gopher_port_t        tcp      71

2.4 删除 SELinux 端口标签

当不再需要某端口的自定义标签时,使用 -d 选项删除(语法与添加类似)。

命令示例:删除 71/TCP 端口的 gopher_port_t 标签

bash 复制代码
[root@host-]# semanage port -d -t gopher_port_t -p tcp 71
# 验证删除结果(自定义列表中无该端口)
[root@host-]# semanage port -l -C

2.5 修改 SELinux 端口标签

若需变更某端口的标签(如将 71/TCP 从 gopher_port_t 改为 http_port_t),使用 -m 选项直接修改,比"删除旧标签+添加新标签"更高效。

命令示例:将 71/TCP 端口的标签改为 http_port_t

bash 复制代码
[root@server-]# semanage port -m -t http_port_t -p tcp 71
# 验证修改结果
[root@server-]# semanage port -l | grep -w 71
# 输出示例:
http_port_t    tcp    71, 80, 81, 443, ...(省略其余端口)
相关推荐
大树883 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush44 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5204 小时前
Linux 11 动态监控指令top
linux
Inhand陈工5 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智5 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest5 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
不会C语言的男孩5 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_5 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化