Linux 运维学习笔记:交换空间 Swap 管理与 Firewalld 防火墙完整实操教程
前言
本篇笔记记录 Linux 两大核心运维知识点:内存交换空间 Swap、CentOS7 + 默认防火墙 Firewalld,包含底层原理、完整实操命令、生产配置规范与实战案例,所有命令均可直接复制到服务器执行,适合 Linux 初学者与运维人员复习使用。
一、Linux 交换空间 Swap 管理
1.1 计算机存储器层级原理
计算机存储设备按照速度由快到慢、容量由小到大分层设计,相互配合平衡性能与成本:
- CPU 寄存器:CPU 内置极小存储,运算数据临时存放,速度最快;
- CPU 高速缓存 Cache:CPU 芯片内置,容量小、速度接近 CPU,缓存常用数据减少内存读取;
- 物理内存 RAM:程序运行的核心空间,速度远低于缓存、远高于磁盘;
- 辅助存储器(硬盘 / U 盘):容量超大、断电数据不丢失,但读写速度最慢。
数据读取逻辑:CPU 先读寄存器→无数据则读缓存→无数据读内存→内存无数据才读取硬盘,全程逐层缓存数据提升效率。
1.2 物理内存与虚拟内存基础概念
系统将物理内存划分为固定 4KiB 大小的内存页(page),进程不会直接操作物理地址,依靠 MMU 内存管理单元实现虚拟地址→物理地址映射。
- 虚拟内存总容量 = 物理内存容量 + Swap 交换空间容量;
- 虚拟地址保证进程使用连续内存,规避物理内存碎片化问题。
1.3 Swap 交换空间是什么
Swap 是内核管控的磁盘分区 / 文件,等同于 Windows 虚拟内存 pagefile.sys,核心 3 个作用:
- 物理内存占满时,把进程闲置内存页写入磁盘 Swap,腾出物理内存给新程序;
- 程序需要 Swap 内数据时,内核置换内存页,把磁盘数据加载回内存;
- 休眠功能依赖 Swap,关机休眠时完整保存全部内存数据到 Swap,开机直接恢复。
⚠️ 重要提醒:Swap 基于磁盘,读写速度远低于内存,只能作为内存不足的临时应急方案,服务器性能最优解仍是扩容物理内存。
1.4 查看内存与 Swap 状态
使用free命令查看内存、交换空间使用情况,-m参数以 MB 为单位展示,更易阅读。
# 默认单位KiB查看内存 [root@centos7 ~]# free # 以MB为单位查看 [root@centos7 ~]# free -m输出字段说明:
Mem 物理内存:
total:总物理内存;used:已占用内存;free:完全空闲内存;
shared:多进程共享内存;buff/cache:磁盘读写缓存占用内存;available:系统可用内存;
Swap 交换空间:
- total:总交换空间;used:已使用 Swap;free:空闲 Swap。
1.5 Swap 空间大小规范(生产推荐标准)
表格
| 物理内存大小 | 常规 Swap 大小 | 支持休眠功能 Swap 大小 |
|---|---|---|
| ≤2GiB | 2 倍物理内存 | 3 倍物理内存 |
| 2GiB~8GiB | 和内存同等大小 | 2 倍物理内存 |
| 8GiB~64GiB | 最小 4GiB | 1.5 倍内存 |
| >64GiB | 最小 4GiB | 不建议开启休眠 |
笔记本 / 桌面系统若需要休眠,Swap 容量必须大于等于物理内存;生产服务器一般关闭休眠,仅配置 4G 及以上 Swap 防止 OOM 内存溢出宕机。
1.6 实操:创建 Swap 交换分区(parted 磁盘分区方式)
- 给磁盘新建 GPT 分区表,划分 Swap 专用分区
# 对磁盘/dev/sdb创建gpt分区表 [root@centos7 ~]# parted /dev/sdb mklabel gpt # 划分2G Swap分区,单位MiB,分区类型linux-swap [root@centos7 ~]# parted /dev/sdb unit MiB mkpart swap01 linux-swap 1 2049 # 打印分区表确认分区创建成功 [root@centos7 ~]# parted /dev/sdb unit MiB print- 格式化 Swap 分区
[root@centos7 ~]# mkswap /dev/sdb1 # 输出UUID,后续永久挂载需要使用 Setting up swapspace version 1, size = 2097148 KiB no label, UUID=2bf4e179-3648-4412-9495-3b278df4acd6- 临时激活 Swap 分区(重启失效)
# 基础激活 [root@centos7 ~]# swapon /dev/sdb1 # 指定优先级激活,数字越大优先级越高(-1~32767) [root@centos7 ~]# swapon -p 4 /dev/sdb1 # 查看当前所有激活的Swap设备 [root@centos7 ~]# swapon -s- 临时关闭 Swap 分区
# 关闭单个Swap分区 [root@centos7 ~]# swapoff /dev/sdb1 # 关闭系统全部Swap [root@centos7 ~]# swapoff -a永久挂载 Swap(开机自动激活)
编辑
/etc/fstab写入 Swap 配置,使用 UUID 保证磁盘顺序变动不失效
[root@centos7 ~]# vim /etc/fstab # 添加配置行,替换为自己分区的UUID UUID=2bf4e179-3648-4412-9495-3b278df4acd6 swap swap pri=4 0 0配置生效命令:
# 加载fstab内所有Swap设备 [root@centos7 ~]# swapon -a # 验证Swap挂载列表 [root@centos7 ~]# swapon -s二、Linux 防火墙管理 Firewalld 完整教程
2.1 防火墙基础分类
- 按保护范围
- 主机防火墙:仅防护当前单台服务器(firewalld、iptables);
- 网络防火墙:防护整个局域网,硬件防火墙(华为、华三)。
- 按实现方式
- 硬件防火墙:专用安全硬件,性能高、成本高;
- 软件防火墙:系统内工具,免费、配置灵活。
- 按 OSI 层级
- 网络层包过滤防火墙:工作四层,检测 IP、端口、协议,速度快(firewalld 底层);
- 应用层 WAF 防火墙:工作七层,检测 HTTP/HTTPS 请求,防御网页攻击,处理速度慢。
2.2 Linux 内核 Netfilter 与 Nftables 底层框架
- Netfilter:Linux 原生内核网络过滤子系统,所有 Linux 防火墙底层依赖它,用户层配套工具:
- iptables:IPv4 数据包过滤;ip6tables:IPv6;arptables:ARP 防护;ebtables:二层桥接过滤。
- Nftables:Netfilter 升级增强版本,CentOS8+firewalld 默认后端,优势:规则加载更快、单工具统一管理所有协议,替代多套 tables 工具。
2.3 静态防火墙 vs 动态防火墙
- 静态防火墙(iptables service):修改规则后需要全量重载所有规则,临时连接会中断;
- 动态防火墙(firewalld):仅更新修改的规则片段,不中断现有业务连接,生产环境更友好。
2.4 Firewalld 核心:Zone 区域机制
firewalld 把网络流量按区域 zone分组管理,每个 zone 独立一套过滤规则,数据包匹配 zone 优先级:源 IP 绑定 zone > 网卡绑定 zone > 默认 zone。
系统内置 9 个区域:
- trusted:全部流量放行,完全信任;
- public(默认):仅放行 ssh、dhcpv6-client,其余全部拒绝;
- external:仅放行 ssh,开启 IPv4 地址伪装 SNAT,适合外网网卡;
- home/internal/work:家庭 / 内网 / 办公区域,放行 ssh、samba 等内网服务;
- dmz:隔离区,仅开放 ssh,放置对外业务服务;
- block:拒绝所有入站流量,返回不可达提示;
- drop:直接丢弃入站数据包,无任何响应,隐蔽性最强。
2.5 firewalld 两种配置模式(核心重点)
- runtime 运行时模式:不加
--permanent,规则立即生效,重启防火墙 / 服务器全部丢失; - permanent 永久模式:加
--permanent参数,写入配置文件,不会立刻生效,执行firewall-cmd --reload后生效;
实操规范:同时执行永久 + 临时两条命令,既即时生效又持久保存,避免重载断开连接。
2.6 firewall-cmd 完整命令实操
2.6.1 防火墙服务启停管理
# 查看firewalld运行状态 [root@centos7 ~]# systemctl status firewalld # 启动防火墙 [root@centos7 ~]# systemctl start firewalld # 停止防火墙(临时关闭) [root@centos7 ~]# systemctl stop firewalld # 设置开机自启 [root@centos7 ~]# systemctl enable firewalld # 取消开机自启 [root@centos7 ~]# systemctl disable firewalld2.6.2 Zone 区域管理命令
# 查看所有可用zone [root@centos7 ~]# firewall-cmd --get-zones # 查看当前激活zone(绑定网卡/源IP) [root@centos7 ~]# firewall-cmd --get-active-zones # 查看系统默认zone(默认public) [root@centos7 ~]# firewall-cmd --get-default-zone # 修改全局默认zone [root@centos7 ~]# firewall-cmd --set-default-zone=public # 查看指定zone全部规则 [root@centos7 ~]# firewall-cmd --list-all --zone=home # 查看默认zone完整规则 [root@centos7 ~]# firewall-cmd --list-all2.6.3 网卡 / 源 IP 绑定 Zone
# 将10.1.1.0/24网段流量划分到home区域(临时) [root@centos7 ~]# firewall-cmd --add-source=10.1.1.0/24 --zone=home # 将网卡ens32绑定到public区域 [root@centos7 ~]# firewall-cmd --add-interface=ens32 --zone=public # 删除zone内绑定的源网段/网卡 [root@centos7 ~]# firewall-cmd --remove-source=10.1.1.0/24 --zone=home2.6.4 放行系统预设服务(ssh/http/https)
无需记忆端口号,直接使用服务名配置,系统内置服务存放于/usr/lib/firewalld/services/
# 查看系统全部预设服务 [root@centos7 ~]# firewall-cmd --get-services # 临时放行http网页服务(80端口) [root@centos7 ~]# firewall-cmd --add-service=http # 永久放行https,同时临时生效 [root@centos7 ~]# firewall-cmd --permanent --add-service=https [root@centos7 ~]# firewall-cmd --add-service=https # 移除放行服务 [root@centos7 ~]# firewall-cmd --remove-service=http [root@centos7 ~]# firewall-cmd --permanent --remove-service=http # 重载永久规则 [root@centos7 ~]# firewall-cmd --reload2.6.5 手动放行端口(自定义业务端口)
支持单个端口、连续端口范围,指定 TCP/UDP 协议
# 临时放行3306/tcp数据库端口 [root@centos7 ~]# firewall-cmd --add-port=3306/tcp # 永久放行1000-2000全部tcp端口 [root@centos7 ~]# firewall-cmd --permanent --add-port=1000-2000/tcp # 删除放行端口 [root@centos7 ~]# firewall-cmd --permanent --remove-port=3306/tcp # 查看当前放行端口列表 [root@centos7 ~]# firewall-cmd --list-ports2.6.6 SNAT 地址伪装(内网服务器共享公网上网)
多台内网主机通过一台服务器访问外网,开启 masquerade 伪装功能
# 开启IP伪装(临时) [root@centos7 ~]# firewall-cmd --add-masquerade # 永久开启伪装 [root@centos7 ~]# firewall-cmd --permanent --add-masquerade # 查询伪装是否开启 [root@centos7 ~]# firewall-cmd --query-masquerade # 关闭伪装 [root@centos7 ~]# firewall-cmd --remove-masquerade2.6.7 DNAT 端口转发(外网端口映射内网服务)
端口转发必须提前开启 masquerade,语法:port=外部端口:proto=协议:toport=内部端口:toaddr=内网IP
# 访问本机8000端口转发到本机80端口 [root@centos7 ~]# firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80 # 访问本机1022端口转发到内网10.1.1.11的22ssh端口 [root@centos7 ~]# firewall-cmd --add-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.1.11 # 查看所有转发规则 [root@centos7 ~]# firewall-cmd --list-forward-ports # 删除转发规则 [root@centos7 ~]# firewall-cmd --remove-forward-port=port=8000:proto=tcp:toport=802.6.8 ICMP ping 控制(禁止 / 允许主机 ping)
- 直接屏蔽 ping 请求报文(所有主机都无法 ping 本机)
# 禁止echo-request(ping请求) [root@centos7 ~]# firewall-cmd --add-icmp-block echo-request [root@centos7 ~]# firewall-cmd --permanent --add-icmp-block echo-request # 恢复ping功能 [root@centos7 ~]# firewall-cmd --remove-icmp-block echo-request2.6.9 Rich 富规则(自定义精细化控制,优先级最高)
富规则支持限制单 IP / 网段访问、连接速率、日志审计,优先级高于所有普通 zone 规则。
案例 1:拉黑 10.1.8.10,禁止该 IP ping 服务器
# 永久添加富规则拒绝该IP的ping请求 [root@centos7 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.8.10" icmp-type name="echo-request" reject' # 重载规则生效 [root@centos7 ~]# firewall-cmd --complete-reload # 查看所有富规则 [root@centos7 ~]# firewall-cmd --list-rich-rules # 删除富规则 [root@centos7 ~]# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="10.1.8.10" icmp-type name="echo-request" reject'案例 2:仅允许 10.1.8.10 访问 http 服务,其他 IP 全部拦截并记录日志
[root@centos7 ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.1.8.10" service name="http" log accept'2.6.10 应急 panic 模式(服务器遭受攻击一键断网)
# 开启应急模式,丢弃所有进出流量 [root@centos7 ~]# firewall-cmd --panic-on # 查看是否开启应急模式 [root@centos7 ~]# firewall-cmd --query-panic # 关闭应急模式,恢复网络 [root@centos7 ~]# firewall-cmd --panic-off2.6.11 配置持久化与重载命令
# 重载永久配置,不中断现有连接(推荐日常使用) [root@centos7 ~]# firewall-cmd --reload # 完全重载,断开所有现有TCP连接,故障排查使用 [root@centos7 ~]# firewall-cmd --complete-reload # 将当前运行时所有规则保存为永久配置 [root@centos7 ~]# firewall-cmd --runtime-to-permanent # 设置临时生效规则(10秒后自动失效,测试规则专用) [root@centos7 ~]# firewall-cmd --add-service=http --timeout=102.7 Firewalld 图形管理工具 firewall-config
安装图形工具后执行命令打开可视化界面,适合新手可视化配置防火墙:
# 安装图形依赖包 yum install -y firewall-config xorg-x11-xauth libglvnd-glx # 启动图形界面 firewall-config图形界面功能:可视化切换 zone、勾选放行服务、添加端口、配置端口转发、编辑富规则、设置 IP 伪装,操作逻辑与命令行一一对应,修改完成点击重载防火墙即可保存规则。
三、总结
- Swap 交换空间用于缓解物理内存不足,生产服务器按需配置分区,通过
/etc/fstab实现开机自动挂载,多 Swap 可设置优先级调控磁盘置换顺序; - Firewalld 是 CentOS7 及以上系统默认动态防火墙,核心 Zone 区域机制简化多网卡、多网段流量管控;
- 区分 runtime 临时规则与 permanent 永久规则,日常配置同步执行两条命令兼顾即时生效与持久化;
- 常规业务放行服务 / 端口,精细化 IP 访问控制使用富规则,内网共享上网开启 masquerade,外网端口映射使用 forward-port 转发;
- 故障应急可使用 panic 模式切断全部网络,图形工具 firewall-config 适合零基础快速调试防火墙规则。