操作系统安全加固:打好边缘网关的第一道防线

边缘网关这东西,说白了就是跑在“前线”的Linux小盒子。我见过太多项目,业务代码写得漂漂亮亮,结果操作系统层面全是窟窿。嗯,今天我们就来聊聊怎么把这层地基打牢。

核心原则:边缘网关的操作系统加固,不是做加法,而是做减法。装最少的东西,开最少的端口,给最少的权限。

最小化安装原则:从源头瘦身

我个人习惯,装系统时只选“最小化安装”或“无图形化”选项。你想想看,一个跑在野外的网关,要什么桌面环境?要什么办公软件?

具体做法:

  • 安装时只选 @core 或 minimal 包组
  • 装完后用 rpm -qa | wc -l 检查包数量,一般控制在 300-400 个以内
  • 用 yum history 或 dnf history 记录每次安装,方便回溯

我的经验:有一次客户网关被入侵,查了半天,发现是系统自带的 cups 打印服务有漏洞。可那台网关压根没接打印机!从那以后,我坚持“不用的东西,一个包都不留”。

内核参数安全调优:让系统更“扛揍”

内核参数调优,很多人觉得是性能优化的事。其实不然,很多参数直接关系到安全。我一般会在 /etc/sysctl.d/ 下放一个 99-security.conf 文件,把调优规则集中管理。

几个必调参数:

参数 推荐值 作用
net.ipv4.tcp_syncookies 1 开启 SYN Cookie,防 SYN Flood 攻击
net.ipv4.conf.all.rp_filter 1 开启反向路径过滤,防 IP 欺骗
net.ipv4.conf.all.accept_source_route 0 禁用源路由,防路由劫持
kernel.exec-shield 1 启用执行保护,防缓冲区溢出
net.ipv4.tcp_timestamps 0 关闭时间戳,防系统指纹探测
# /etc/sysctl.d/99-security.conf 示例
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
kernel.exec-shield = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.all.log_martians = 1

# 应用配置
sysctl -p /etc/sysctl.d/99-security.conf

注意:调完参数一定要在测试环境验证。我曾经在线上网关直接改 net.core.somaxconn,结果业务连接全断了。嗯,血的教训。

禁用不必要的服务与端口:关掉每一扇“后门”

边缘网关通常只跑几个核心服务:数据采集、协议转换、上云通信。其他服务,一律禁用。

我的检查清单:

  1. 用 systemctl list-unit-files --type=service | grep enabled 列出所有开机自启服务
  2. 逐个确认:这个服务真的需要吗?
  3. 不需要的,执行 systemctl disable --now <服务名>
  4. 用 ss -tlnp 查看当前监听端口,只保留业务端口和 SSH(且 SSH 要改端口)

常见“多余”服务:

  • cups.service — 打印服务,边缘网关用不到
  • avahi-daemon.service — 零配置网络,容易泄露信息
  • postfix.service — 邮件服务,网关一般不收发邮件
  • rpcbind.service — RPC 服务,除非你用 NFS

避坑指南:我曾经遇到过禁用 systemd-journald 导致日志全丢的情况。所以,禁用前先搞清楚依赖关系,用 systemctl list-dependencies 查一下。

用户与权限管理:sudo 和 PAM 的“黄金搭档”

边缘网关通常只有 2-3 个运维人员管理。我建议:

  • 禁用 root 直接登录,用普通用户 + sudo 提权
  • sudo 权限要细化到命令级别
  • PAM 配置要限制登录来源和失败次数

sudo 配置示例:

# /etc/sudoers.d/edge-admin
# 允许 admin 用户执行特定命令
admin ALL=(ALL) /usr/bin/systemctl restart edge-gateway
admin ALL=(ALL) /usr/bin/journalctl
admin ALL=(ALL) /usr/bin/tail /var/log/edge/*.log

# 禁止执行危险命令
admin ALL=(ALL) !/usr/bin/passwd
admin ALL=(ALL) !/usr/bin/su
admin ALL=(ALL) !/usr/bin/visudo

PAM 配置要点:

配置项 推荐值 说明
pam_tally2.so deny=5 unlock_time=300 5次失败锁定5分钟
pam_limits.so 限制最大登录数 防止暴力破解
pam_access.so 限制登录IP段 只允许管理网段登录
# /etc/pam.d/sshd 关键配置
auth required pam_tally2.so deny=5 unlock_time=300
auth required pam_access.so
account required pam_limits.so

警告:PAM 配置一旦写错,可能导致所有人都无法登录。我建议先开一个备用 SSH 会话,再修改 PAM 文件。万一锁了,还能从备用会话救回来。

文件系统安全:挂载选项与权限设置

文件系统这块,很多人只关注权限(chmod 777 这种),却忽略了挂载选项。其实挂载选项能提供更底层的保护。

关键挂载选项:

  • noexec — 禁止在分区上执行二进制文件,适合 /tmp、/var/tmp
  • nosuid — 忽略 suid 位,防止提权
  • nodev — 禁止创建设备文件,防止挂载恶意设备
  • ro — 只读挂载,适合 /boot、/usr
# /etc/fstab 安全配置示例
/dev/sda1 /boot ext4 defaults,ro 0 0
/dev/sda2 / ext4 defaults 0 0
/dev/sda3 /var ext4 defaults 0 0
tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=512M 0 0
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,nodev,size=256M 0 0

权限设置原则:

  • 系统文件:755(目录) / 644(文件)
  • 日志文件:640,属主 root,属组 adm
  • 配置文件:600,只允许 root 读写
  • 可执行文件:750,只允许属主和属组执行

我的习惯:我会用 find / -perm -4000 -o -perm -2000 定期扫描 suid/sgid 文件。这些文件是提权的“捷径”,能少就少。

知识体系总览

下面这张图,把操作系统安全加固的五个维度串起来了。你可以把它贴在工位上,每次加固时对照检查。

操作系统安全加固知识体系 操作系统安全加固五维模型 安全加固目标 最小化安装 只装核心包组 内核参数调优 sysctl 安全配置 禁用服务端口 关掉多余服务 用户权限管理 sudo + PAM 文件系统安全 挂载选项 + 权限 加固顺序建议 ① 最小化安装 → ② 禁用服务端口 → ③ 内核参数调优 ④ 用户权限管理 → ⑤ 文件系统安全 每次加固后,用 nmap、lynis 等工具做一次安全扫描验证

操作系统安全加固,说白了就是“少即是多”。装得少,攻击面就小;权限控得严,提权就难;日志留得全,溯源就有据。嗯,这套方法论我在十几个边缘网关项目里验证过,效果不错。你照着做,至少能挡住 80% 的常见攻击。