4. 操作系统安全加固:最小化安装、内核参数优化、禁用不必要的服务、SELinux/AppArmor配置

边缘网关这东西,说白了就是放在无人值守环境里的小型服务器。你想想看,一个机柜在工厂车间、在路边灯杆上,风吹日晒,物理安全本来就弱。如果操作系统本身还漏洞百出,那基本等于把大门敞开了。

我做了这么多年边缘计算,见过太多因为系统没加固被攻破的案例。有一次去客户现场排查,发现一台网关被挖矿程序占了CPU,原因就是默认安装了一堆没用的服务,其中一个老旧版本的FTP服务被扫到了弱口令。嗯,从那以后,我每次部署边缘网关,第一件事就是做操作系统安全加固。

这一章,我就把我在实战中总结的四个核心加固点分享给你:最小化安装、内核参数优化、禁用不必要的服务、SELinux/AppArmor配置。

核心原则:边缘网关的操作系统,应该像一把手术刀——只保留你需要的功能,其他全部切掉。每多一个服务、多一个内核模块,就多一个被攻击的入口。

操作系统安全加固四大支柱 安全加固目标 最小化安装 内核参数优化 禁用无用服务 SELinux/AppArmor 仅安装必要软件包 不安装GUI/开发工具 网络参数调优 内核模块限制 systemd服务审计 移除rsh/telnet等 强制访问控制 策略编写与调试 四者缺一不可,形成纵深防御体系

4.1 最小化安装:从源头减少攻击面

我个人习惯,安装边缘网关的操作系统时,永远选择最小化安装模式。什么意思?就是只装一个最基本的系统内核和必要的驱动,其他一概不装。

你可能会问:「那万一后面需要某个包怎么办?」我的回答是:需要的时候再装,而且装完用完就删。别图省事一次性装个完整版。

实战建议:对于Debian/Ubuntu系统,安装时选择「最小化服务器」或「无桌面环境」;对于CentOS/RHEL,选择「最小化安装」或「基础设施服务器」。安装完成后,用 dpkg -l 或 rpm -qa 检查已安装的包,把不需要的统统卸载。

我记得有一次,一个团队在部署边缘网关时用了桌面版Ubuntu,结果被攻击者利用桌面环境的一个漏洞提权成功。你说冤不冤?一个跑在机柜里的设备,要什么桌面?

具体来说,最小化安装要遵循以下原则:

  • 不安装GUI:X Window、GNOME、KDE等全部不要
  • 不安装开发工具:gcc、make、gdb等只在开发机上用
  • 不安装不必要的网络服务:如FTP、Telnet、NFS等
  • 不安装打印服务:CUPS在边缘场景基本用不到
  • 不安装多媒体组件:音频、视频解码库统统不要

注意:最小化安装后,记得检查系统是否缺少关键驱动(如网卡、存储控制器驱动)。我遇到过一台网关因为缺少网卡驱动,部署到现场才发现连不上网,最后只能派人去现场重装系统。所以,最小化不等于盲目删减,核心驱动必须保留。

4.2 内核参数优化:让系统更抗揍

内核参数优化,说白了就是调整Linux内核的行为,让它更安全、更稳定。边缘网关的网络环境通常比较复杂,可能直接暴露在公网上,也可能在复杂的NAT后面。所以,网络相关的内核参数必须调优。

我常用的优化参数,整理成了一张表:

参数 推荐值 说明
net.ipv4.tcp_syncookies 1 启用SYN Cookie,防止SYN Flood攻击
net.ipv4.ip_forward 0 关闭IP转发,除非网关需要路由功能
net.ipv4.conf.all.accept_redirects 0 不接受ICMP重定向,防止路由欺骗
net.ipv4.conf.all.send_redirects 0 不发送ICMP重定向
net.ipv4.conf.all.rp_filter 1 启用反向路径过滤,防止IP欺骗
net.ipv4.tcp_fin_timeout 30 缩短FIN-WAIT-2超时时间,减少资源占用
kernel.exec-shield 1 启用执行保护,防止缓冲区溢出攻击
kernel.randomize_va_space 2 启用ASLR(地址空间布局随机化)

这些参数怎么生效?很简单,编辑 /etc/sysctl.conf 文件,把上面的参数加进去,然后执行 sysctl -p 使其生效。

# 示例:/etc/sysctl.conf 安全配置片段
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_fin_timeout = 30
kernel.exec-shield = 1
kernel.randomize_va_space = 2

避坑指南:我曾经在一台网关上启用了IP转发(ip_forward=1),结果忘了配置iptables规则,导致网关变成了一个透明的路由器,内网流量直接暴露到了外网。所以,除非你的网关确实需要路由功能,否则一定要关闭IP转发。

4.3 禁用不必要的服务:关掉每一扇虚掩的门

边缘网关上的服务,每一个都是一个潜在的攻击入口。我见过太多默认安装的服务,比如CUPS打印服务、Avahi零配置网络服务、rsh/rlogin远程shell服务,这些在边缘场景下基本用不到,但攻击者却很喜欢。

怎么检查当前系统运行了哪些服务?用 systemctl list-units --type=service --state=running 命令。然后,逐个判断每个服务是否必要。

我列一个「边缘网关服务禁用清单」,你可以对照着检查:

  • cups.service:打印服务,禁用
  • avahi-daemon.service:零配置网络服务,禁用
  • rsh.service / rlogin.service / rexec.service:远程shell服务,禁用(用SSH替代)
  • telnet.service:明文传输的远程登录,禁用
  • nfs-server.service:网络文件系统,除非需要文件共享,否则禁用
  • smb.service:Samba文件共享,禁用
  • bluetooth.service:蓝牙服务,边缘网关基本用不到,禁用
  • ModemManager.service:调制解调器管理,禁用

禁用服务的命令很简单:

# 停止服务
systemctl stop cups.service
# 禁用开机自启
systemctl disable cups.service
# 屏蔽服务(防止被其他服务依赖启动)
systemctl mask cups.service

警告:禁用服务前,一定要确认该服务不是系统关键服务。我曾经在测试环境禁用了 systemd-journald.service,结果系统日志全部丢失,排查问题时完全找不到线索。所以,sshd、systemd-* 核心服务、NetworkManager 等不要轻易禁用。

4.4 SELinux/AppArmor配置:给系统穿上防弹衣

SELinux和AppArmor,说白了就是强制访问控制(MAC)机制。传统的Linux权限模型(DAC)只检查用户和文件权限,而MAC会检查进程、用户、文件、网络端口等多维度的安全上下文。

我个人更倾向于SELinux,因为它更精细、更强大。但AppArmor配置更简单,适合快速部署。选择哪个,取决于你的团队能力和业务需求。

4.4.1 SELinux配置要点

SELinux有三种模式:

模式 说明 适用场景
Enforcing 强制模式,违反策略的操作会被阻止 生产环境
Permissive 宽容模式,违反策略的操作会被记录但不会阻止 调试/测试环境
Disabled 禁用SELinux 不推荐,除非有特殊兼容性需求

我建议在边缘网关上,SELinux设置为Enforcing模式。但要注意,很多应用在Enforcing模式下会出问题,需要先调试策略。

# 查看当前SELinux状态
getenforce

# 临时切换为Permissive模式(用于调试)
setenforce 0

# 永久修改模式(编辑配置文件)
vi /etc/selinux/config
# 将 SELINUX=enforcing 改为 SELINUX=permissive 或 disabled

实战经验:我曾经部署一个自定义的边缘应用,在SELinux Enforcing模式下一直报权限错误。用 ausearch -m avc -ts recent 查看审计日志,发现是进程没有访问某个目录的权限。然后我用 audit2allow -a -M myapp 生成了自定义策略模块,加载后问题解决。记住,不要因为SELinux报错就把它关了,要学会写策略。

4.4.2 AppArmor配置要点

AppArmor的配置比SELinux简单很多。它通过「配置文件」来限制程序的权限。每个配置文件定义了程序可以访问哪些文件、网络端口等。

# 查看AppArmor状态
aa-status

# 加载一个配置文件
apparmor_parser -r /etc/apparmor.d/usr.bin.myapp

# 将模式设置为complain(宽容模式,用于调试)
aa-complain /usr/bin/myapp

# 将模式设置为enforce(强制模式)
aa-enforce /usr/bin/myapp

一个简单的AppArmor配置文件示例:

# /etc/apparmor.d/usr.bin.myapp
#include <tunables/global>

/usr/bin/myapp {
  #include <abstractions/base>

  /etc/myapp/config r,
  /var/log/myapp/* w,
  /var/run/myapp.pid w,
  /usr/bin/myapp r,
  /lib/x86_64-linux-gnu/** mr,
  /usr/lib/** mr,

  # 禁止访问其他目录
  deny /etc/shadow r,
  deny /root/** rw,
  deny /tmp/** rw,
}

核心建议:无论是SELinux还是AppArmor,都建议在测试环境中先以Permissive/Complain模式运行一段时间,收集审计日志,确认没有误拦后再切换到Enforcing模式。直接在生产环境开启强制模式,很可能导致应用崩溃。

4.5 本章小结

操作系统安全加固,是边缘网关安全的第一道防线。最小化安装减少攻击面,内核参数优化提升抗攻击能力,禁用无用服务关闭潜在入口,SELinux/AppArmor提供强制访问控制。这四个步骤,缺一不可。

嗯,我记得有一次帮客户做安全审计,发现他们的网关系统居然装了Apache、MySQL、PHP全套,简直是个Web服务器。一问才知道,是运维人员图省事直接克隆了公司内部服务器的镜像。后来我帮他们重新做了最小化安装,攻击面减少了80%以上。

所以,别嫌麻烦。边缘网关的安全,从操作系统加固开始。