当前位置: 首页 > news >正文

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

十一、Linux管理网络安全

  • 1. 管理服务器防火墙
    • 1.1 防火墙架构概念
    • 1.2 nftables 框架
    • 1.3 firewalld 简介
    • 1.4 预定义 zone(区域)
    • 1.5 预定义服务
    • 1.6 配置 firewalld 的方法
    • 1.7 从命令行配置防火墙(`firewall-cmd`)
    • 1.8 使用 Web 控制台配置防火墙服务
  • 2. 控制 SELinux 端口标记
    • 2.1 SELinux 端口标记的核心作用
    • 2.2 列出 SELinux 端口标签
    • 2.3 管理 SELinux 端口标签(添加标签)
    • 2.4 删除 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)配置(端口/协议)功能说明
sshTCP:22远程登录服务(默认允许,几乎所有 zone 必备)
dhcpv6-clientUDP:546(仅 fe80::/64 IPv6 网络)DHCPv6 客户端服务(获取 IPv6 地址)
ipp-clientUDP:631IPP 打印客户端服务(连接打印机)
samba-clientUDP:137、138Windows 文件/打印共享客户端服务(访问 Samba 共享)
mdnsUDP:5353(指向 224.0.0.251 IPv4 / ff02::fb IPv6 多播地址)多播 DNS 服务(本地链路名称解析,如局域网内设备发现)

查看预定义服务

  • 列出所有预定义服务:
    [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

    [root@host-]# firewall-cmd --set-default-zone=dmz
    
  2. 为 zone 绑定源 IP 段(永久配置)
    设定子网:

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

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

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

    # 查看 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 标签、协议及端口号:

[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 服务的端口标签):
    [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 号端口的标签):
    [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更改。
命令语法

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

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

[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 标签

[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

[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, ...(省略其余端口)
http://www.dtcms.com/a/610160.html

相关文章:

  • 免费的行情软件网站下载不用下载二字顺口名字公司
  • YOLOv5/8/9/10/11/12/13+oc-sort算法实现多目标跟踪
  • Android开发从零开始 - 第一章:Android概述与工程项目结构
  • Spring Boot 应用启动报错:FeignClientSpecification Bean 名称冲突解决方案
  • 个人网站建立平台俄罗斯军事基地
  • h5 建站网站 移动端大数据在营销中的应用
  • 基于RetinaNet的建筑设计师风格识别与分类研究_1
  • Mysql假如单表数据量上亿,会出现什么问题
  • 考研408--计算机网络--day4--组帧差错控制可靠传输
  • my.cnf详解
  • 做网站时最新菜品的背景图wordpress连接ftp
  • Java是编译型语言还是解释型语言 | 深入解析Java的执行机制与性能特点
  • 积分模式陷兑付危机:传统实体商业的“承诺陷阱”与破局之道
  • 网页版预编译SQL转换工具
  • 基于Springboot+vue的心理健康测评预约心理咨询师论坛系统
  • MySQL数据库入门指南
  • 品牌营销型网站建设策划工程在哪个网站做推广比较合适
  • 安卓 4.4.2 电视盒子 ADB 设置应用开机自启动
  • 绝对值伺服“编码器计数值溢出“保护报警
  • 小程序下载图片问题处理
  • 网站首页被k网站信息同步
  • 线性代数 - 叉积的分量形式与矩阵形式
  • 做网站业务的 怎么跑客户元氏网站制作
  • 2025-11-14 学习记录--Python-特征归一化方法(Min-Max或StandardScaler)
  • 一款基于鲁班猫和STM32的自主导航实践
  • Cognex VisionPro 相机工具集成代码分析笔记
  • 五大3D软件深度横评:Maya、3DMax、Cinema 4D、Houdini与Blender
  • 网站可以不备案有口碑的武进网站建设
  • 重庆建网站 私单建设银行人力资源系统网站怎么进
  • 基于ADP自适应动态规划算法的控制系统matlab性能仿真,采用RNN进行控制对象参数辨识