Linux安全防护三件套:Swap、防火墙、SELinux 文章目录Linux安全防护三件套Swap、防火墙、SELinux前言一、Swap交换空间管理1.1 计算机存储层次结构1.2 Swap的作用1.3 Swap大小参考1.4 查看内存1.5 创建和使用Swap二、Firewalld防火墙2.1 防火墙概述2.2 静态防火墙 vs 动态防火墙2.3 Firewalld区域zone2.4 Firewalld配置模式2.5 firewall-cmd常用命令2.6 富规则Rich Rules2.7 panic模式2.8 综合案例三、SELinux安全增强3.1 什么是SELinux3.2 SELinux上下文3.3 SELinux三种模式写在最后查看当前区域规则SELinuxLinux安全防护三件套Swap、防火墙、SELinux内存不够用网络被攻击系统被入侵一文搞定Swap配置、Firewalld防火墙和SELinux加固前言今天的课程是Linux安全与资源管理的核心内容涵盖三个关键模块Swap交换空间——内存不够时用磁盘“顶一顶”理解计算机存储层次结构Firewalld防火墙——控制哪些流量能进出你的服务器网络防护第一道防线SELinux安全增强——即使进程被攻破也能保护用户数据不被窃取一、Swap交换空间管理1.1 计算机存储层次结构计算机中各种存储器组成层状塔式结构取长补短协调工作寄存器 → 最快、最小、最贵CPU内部 CPU Cache → 极快、小SRAM 主存(内存) → 快、中等DRAM 辅助存储 → 慢、大、持久化磁盘/U盘内存带宽计算带宽 频率 × 位宽 / 81.2 Swap的作用Swap是受Linux内核控制的磁盘区域有三个核心功能扩展内存物理内存不足时将不活跃数据暂存磁盘页面交换需要访问磁盘上的页面时交换到内存Hibernate支持休眠时保存RAM内容到Swap⚠️ Swap只是临时方案比物理内存慢得多根本解决是加大物理内存。1.3 Swap大小参考物理内存交换空间允许Hibernate时≤2GB2×RAM3×RAM2-8GB1×RAM2×RAM8-64GB≥4GB1.5×RAM≥64GB≥4GB不建议1.4 查看内存[rootcentos7 ~]free-mtotal usedfreeshared buff/cache available Mem:393133035291213616683485Swap:4063040631.5 创建和使用Swap# 1. 创建分区并设为swap类型[rootcentos7 ~]parted/dev/sdb mklabel gpt[rootcentos7 ~]parted/dev/sdb unit MiB mkpart swap01 linux-swap12049# 2. 格式化swap[rootcentos7 ~]mkswap/dev/sdb1 Setting up swapspace version1, size2097148KiBUUID2bf4e179-3648-4412-9495-3b278df4acd6# 3. 激活swap[rootcentos7 ~]swapon/dev/sdb1# 4. 查看swap设备[rootcentos7 ~]swapon-sFilename Type Size Used Priority /dev/dm-1 partition40632280-2/dev/sdb1 partition20971480-3# 5. 设置优先级数字越大越优先使用[rootcentos7 ~]swapon-p4/dev/sdb1# 6. 停用swap[rootcentos7 ~]swapoff /dev/sdb1# 7. 持久化/etc/fstabUUID2bf4e179-3648-4412-9495-3b278df4acd6 swap swappri400# 8. 激活所有swap[rootcentos7 ~]swapon-a二、Firewalld防火墙2.1 防火墙概述防火墙工作在网络或主机边缘对进出数据包基于规则进行过滤。按实现方式分为硬件防火墙和软件防火墙按网络协议分为网络层防火墙和应用层防火墙。Netfilter子系统是Linux内核的网络过滤子系统用户通过不同工具配置规则工具作用iptables过滤IPv4数据包ip6tables过滤IPv6数据包arptables过滤ARP协议ebtables过滤数据链路层Firewalld是Red Hat开发的动态防火墙CentOS 7起替代iptables成为默认底层仍调用iptables/nftables干活。2.2 静态防火墙 vs 动态防火墙对比项静态防火墙iptables动态防火墙firewalld规则加载修改一条也重新加载全部只更新变更部分连接影响会导致网络连接中断不中断现有连接配置方式service iptables reloadfirewall-cmd --reload2.3 Firewalld区域zonefirewalld将所有网络流量分为多个区域每个区域是一套过滤规则集区域特性trusted允许所有传入流量public仅允许ssh/dhcpv6-client默认区域home/work/internal允许ssh/mdns/samba-client/dhcpv6-clientdmz/external仅允许sshblock拒绝所有传入流量drop丢弃所有传入流量无响应数据包匹配区域优先级源地址匹配 → 应用该区域规则传入接口匹配 → 应用关联区域规则以上都不匹配 → 默认区域2.4 Firewalld配置模式模式选项特点运行时runtime默认立即生效重启丢失永久permanent--permanent写入配置文件需reload生效建议修改防火墙时写两条命令——一条带--permanent永久保存一条不带立即生效。2.5 firewall-cmd常用命令zone管理# 查看zone[rootcentos7 ~]firewall-cmd --get-zones[rootcentos7 ~]firewall-cmd --get-default-zone[rootcentos7 ~]firewall-cmd --get-active-zones# 设置默认zone[rootcentos7 ~]firewall-cmd --set-default-zonetrusted# 查看所有zone规则[rootcentos7 ~]firewall-cmd --list-all-zones[rootcentos7 ~]firewall-cmd --list-all# 查看默认zone[rootcentos7 ~]firewall-cmd --list-all--zonehome# 查看特定zone服务管理[rootcentos7 ~]firewall-cmd --get-services# 查看预定义服务[rootcentos7 ~]firewall-cmd --add-servicehttp# 放行http服务[rootcentos7 ~]firewall-cmd --list-services# 查看已放行服务[rootcentos7 ~]firewall-cmd --query-servicehttp# 检查是否放行[rootcentos7 ~]firewall-cmd --remove-servicehttp# 删除放行端口管理[rootcentos7 ~]firewall-cmd --add-port5900/tcp[rootcentos7 ~]firewall-cmd --list-ports[rootcentos7 ~]firewall-cmd --query-port5900/tcp[rootcentos7 ~]firewall-cmd --remove-port5900/tcp伪装SNAT# 开启伪装让内网机器通过本机访问公网[rootserver ~]firewall-cmd --add-masquerade[rootserver ~]firewall-cmd --query-masquerade[rootserver ~]firewall-cmd --remove-masquerade端口转发DNAT# 访问本机8000 → 本机80[rootcentos7 ~]firewall-cmd --add-forward-portport8000:prototcp:toport80# 访问本机1022 → 10.1.1.11:22[rootcentos7 ~]firewall-cmd --add-forward-portport1022:prototcp:toport22:toaddr10.1.1.11# 查看/删除[rootcentos7 ~]firewall-cmd --list-forward-ports[rootcentos7 ~]firewall-cmd --remove-forward-portport8000:prototcp:toport80⚠️ 端口转发前需确保对应zone已启用masquerade。禁止ping# 方法一禁止特定ICMP类型[rootcentos7 ~]firewall-cmd --add-icmp-block echo-request[rootcentos7 ~]firewall-cmd --list-icmp-blocks# 方法二富规则[rootcentos7 ~]firewall-cmd --add-rich-rulerule protocol valueicmp drop2.6 富规则Rich Rules富规则可灵活实现允许特定IP访问某服务、配置日志审计、限速等。常用语法rule[source][destination]service|port|protocol[log][audit][accept|reject|drop]示例1禁止所有主机ping本机[rootcentos7 ~]firewall-cmd --add-rich-rulerule protocol valueicmp drop示例2只允许10.1.8.10 ping本机# 方法禁止所有再单独允许[rootcentos7 ~]firewall-cmd--permanent--add-icmp-block-inversion[rootcentos7 ~]firewall-cmd--permanent--add-rich-rulerule familyipv4 source address10.1.8.10 icmp-type nameecho-request accept[rootcentos7 ~]firewall-cmd --complete-reload示例3限制特定IP访问HTTP的频率[rootcentos7 ~]firewall-cmd --add-rich-rulerule familyipv4 source address10.1.8.0/24 service namehttp log prefixhttp-error levelerror limit value2/s accept limit value3/s2.7 panic模式# 紧急切断所有网络被攻击时使用[rootcentos7 ~]firewall-cmd --panic-on[rootcentos7 ~]firewall-cmd --query-panic[rootcentos7 ~]firewall-cmd --panic-off2.8 综合案例案例1禁止10.1.8.10主机ping本机[rootcentos7 ~]firewall-cmd--permanent--add-rich-rulerule familyipv4 source address10.1.8.10 icmp-type nameecho-request reject[rootcentos7 ~]firewall-cmd --complete-reload案例2只允许10.1.8.10主机ping本机[rootcentos7 ~]firewall-cmd--permanent--add-icmp-block-inversion[rootcentos7 ~]firewall-cmd--permanent--add-rich-rulerule familyipv4 source address10.1.8.10 icmp-type nameecho-request accept[rootcentos7 ~]firewall-cmd --complete-reload三、SELinux安全增强3.1 什么是SELinuxSELinuxSecurity Enhanced Linux是额外的系统安全层主要目标是防止已被攻破的系统服务访问用户数据。传统文件权限只控制“谁能访问”不控制“如何使用”。例如apache进程被攻破后攻击者拥有apache用户的权限可以访问/tmp等目录。SELinux通过强制访问控制明确定义每个进程、文件、目录、端口的安全标签上下文默认禁止任何未授权的交互。3.2 SELinux上下文每个进程、文件、目录和端口都有SELinux上下文格式为用户:角色:类型:敏感度# 查看进程上下文[rootcentos7 ~]ps-Csshd-Zsystem_u:system_r:sshd_t:s0-s0:c0.c1023951? 00:00:00 sshd# 查看文件上下文[rootcentos7 ~]ls-Z/home unconfined_u:object_r:user_home_dir_t:s0 laoma3.3 SELinux三种模式模式行为用途enforcing强制执行规则拒绝并记录日志生产环境默认permissive加载策略但不强制只记录违规测试和故障排查disabled完全关闭不拒绝不记录不推荐# 查看当前模式[rootcentos7 ~]getenforce# 临时切换不需重启[rootcentos7 ~]setenforce0# 切换为permissive[rootcentos7 ~]setenforce1# 切换为enforcing# 修改默认模式/etc/selinux/config[rootcentos7 ~]vim/etc/selinux/configSELINUXenforcingSELINUXTYPEtargeted模式切换注意事项enforcing ↔ permissive不需重启enforcing/permissive ↔ disabled需要重启写在最后今天的内容是Linux安全与资源管理的核心模块核心工具主要作用Swapmkswap / swapon / swapoff内存不足时的缓冲Firewalldfirewall-cmd网络访问控制SELinuxgetenforce / setenforce进程级访问控制一句话建议Swap根据内存大小合理配置生产环境建议≥4GBFirewalld默认只开放必要的端口和服务public区域SELinux生产环境保持enforcing排障时可临时切permissive核心命令速查# Swapfree-m# 查看内存swapon-s# 查看swap设备swapon/dev/sdb1# 激活swapoff /dev/sdb1# 停用# Firewalldfirewall-cmd --list-all# 查看当前区域规则firewall-cmd --add-servicehttp# 放行服务firewall-cmd --add-port8080/tcp# 放行端口firewall-cmd --add-masquerade# 开启伪装firewall-cmd --add-rich-rulerule ...# 富规则# SELinuxgetenforce# 查看模式setenforce0# 切换permissivesetenforce1# 切换enforcing查看当前区域规则firewall-cmd --add-servicehttp # 放行服务firewall-cmd --add-port8080/tcp # 放行端口firewall-cmd --add-masquerade # 开启伪装firewall-cmd --add-rich-rule‘rule …’ # 富规则SELinuxgetenforce # 查看模式setenforce 0 # 切换permissivesetenforce 1 # 切换enforcing 点点关注持续更新欢迎技术讨论。