Files
estel_docs/content/blog/1.技术栈/971.服务器加固实战.md
estel 4569d80f03
Some checks failed
CI / lint (push) Has been cancelled
CI / typecheck (push) Has been cancelled
CI / build (ubuntu-latest) (push) Has been cancelled
chore: 更新图片链接域名从lijue-me.oss-cn-chengdu.aliyuncs.com到img.jiwei.xin
2025-09-08 19:52:04 +08:00

14 KiB
Raw Permalink Blame History

title, description, date, img, navigation
title description date img navigation
防于未然,先固不破 — Debian 12 快速加固实战 在数字化浪潮席卷全球的今天,服务器已成为承载企业核心业务与数据的“心脏”。一旦这颗心脏被攻破,轻则业务中断,重则数据泄漏、引发监管问责、品牌声誉坍塌,甚至于法律诉讼。 2025-08-15 https://img.jiwei.xin/20250815215319708.png
icon
simple-icons:debian

前言

在数字化浪潮席卷全球的今天,服务器已成为承载企业核心业务与数据的“心脏”。一旦这颗心脏被攻破,轻则业务中断,重则数据泄漏、引发监管问责、品牌声誉坍塌,甚至于法律诉讼。也正因如此,“我不知道漏洞藏在那里”已经不是借口,而是失责;真正负责任的运维与安全团队,必须把“ 防于未然,先固不破 ”当作铁律。

然而,系统配置千头万绪——从 BIOS 到内核参数,从系统服务到用户策略,从网络栈到文件权限——千里之堤,溃于蚁穴,任何一个角落的配置失误,都可能成为攻击者趁虚而入的跳板。“人眼”已无法在短时间内遍历所有细节,唯有借助安全团队丰富的经验与标准化的自动安全审计工具,将复杂环境拆解成可度量的检查项,才能在海量主机、混部容器与虚拟化场景中抽丝剥茧,还原安全真相。

本文将以 Lynis 审计工具来还原一次服务器加固实战。

正文

什么是Lynis?

Lynis 是一款开源、针对基于 UNIX 系统(如 Linux、macOS、BSD 等的安全审计工具。它能检测系统配置、文件权限、日志、网络等多个方面提供详细的安全建议帮助系统管理员加强系统的安全性。Lynis 通常被系统管理员和网络安全工程师用来评估其系统的安全防御能力。

  • 除了“蓝队”之外,如今的渗透测试人员也将 Lynis 作为他们的工具之一。

环境

  • OSDebian 12 (bookworm) 全新 Server 最小化安装
  • 内核6.1.0-12-amd64Debian 12 官方 6.1 LTS 最新版)
  • 架构x86_64
  • 软件源 :启用 Debian Security 及官方主仓库
  • 用户root 初始登录,已创建 sudo 普通用户 estel,后续所有操作便于演示均以 su - 模式执行
  • 时间NTP 已启用,与 pool.ntp.org 同步,时区 UTC+8
  • 防火墙iptables 未配置(默认空规则)
  • 已更新apt update && apt full-upgrade -y 三天前更新
  • 已安装包 Docker nfs-server openssh-server

使用

# ssh 连接进服务器
# 在合适的目录进行克隆 Lynis
git clone https://github.com/CISOfy/lynis

#执行安全审查脚本
cd lynis && sudo ./lynis audit system

扫描结果部分摘录

**[ Lynis 3.1.6 ]**
  **Lynis security scan details**:
  **Scan mode**:
  Normal [▆]  Forensics [ ]  Integration [ ]  Pentest [ ]
  **Lynis modules**:
  - Compliance status      [**?**]
  - Security audit         [**V**]
  - Vulnerability scan     [**V**]
  **Details**:
  Hardening index : **63** [**############**        ]
  Tests performed : **280**
  Plugins enabled : **2**

  **Software components**:
  - Firewall               [**V**]
  - Intrusion software     [**X**]
  - Malware scanner        [**X**]

  **Files**:
  - Test and debug information      : **/var/log/lynis.log**
  - Report data                     : **/var/log/lynis-report.dat**
==============================================================
    **Lynis** 3.1.6
  Auditing, system hardening, and compliance for UNIX-based systems
  (Linux, macOS, BSD, and others)
  2007-2025, CISOfy - https://cisofy.com/lynis/
  **Enterprise support available (compliance, plugins, interface and tools)**

结果分析

  • 根据 Lynis 的体检单
  • Hardening Index 63/100
  1. 系统概况
  • Debian 12无内核更新无重启需求存在 2 个高风险补丁PKGS-7392
  1. 关键问题
  • GRUB 无密码 ,可单用户模式提权
    • SSH 端口为 22允许 root 登录,多项参数过宽
    • 大量 systemd 服务暴露评分 9.xatd、cron、docker、rsyslog 等)
    • 未挂载 /var /tmp /home 独立分区,可能导致 DoS
    • 缺乏防火墙规则审查、恶意软件扫描器、文件完整性监控、审计框架
  1. 次要风险
  • 仅 1 个 DNS 服务器NFS 空 exports 文件却运行守护进程
  • USB/火线驱动、编译器、核心参数未加固
  • 日志未远程归档、登录 banner 未配置

进行服务器加固

# 为便于演示默认以下所有操作均在 root 权限下
su -
# 更新系统补丁
apt update && apt dist-upgrade -y
  1. 给 GRUB 加密码
apt install -y grub2-common
grub-mkpasswd-pbkdf2 # 生成 PBKDF2 哈希

nano /etc/grub.d/40_custom # 追加到配置中

cat <<EOF
set superusers="grubadmin"
password_pbkdf2 grubadmin grub.pbkdf2.sha512.10000.xxxxxxxx...
EOF

# 更新
update-grub

#如果更新报错,改为在 40_custom 中追加
set superusers="root"
password_pbkdf2 grubadmin grub.pbkdf2.sha512.10000.xxxxxxxx...
  1. SSH 强化
# 修改 SSH 默认端口号 与登录配置

cp /etc/ssh/sshd_config{,.bak}
cat >> /etc/ssh/sshd_config <<EOF
Port 49222
PermitRootLogin no
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 2
AllowTcpForwarding no
TCPKeepAlive no
X11Forwarding no
AllowAgentForwarding no
LogLevel VERBOSE
EOF
systemctl restart ssh

3.强化 sshd 安全

cp /lib/systemd/system/ssh.service /etc/systemd/system/ssh.service

# 使用 systemd-analyze security 的建议调整
systemctl edit --full ssh.service

systemctl restart ssh
  1. 禁用不必要的 systemd 服务
# atd 一次性计划任务守护进程,不需要调度就关掉;
# exim4 Debian 系列默认的 MTA 邮件服务,不需要本地发件关掉;
# containerd  Docker/K8s 的运行时,此服务不用容器关掉。

systemctl disable --now atd exim4 containerd
  1. Kernel 级系统参数
cat >/etc/sysctl.d/99-hardening.conf <<EOF
dev.tty.ldisc_autoload=0
fs.protected_fifos=2
kernel.core_uses_pid=1
kernel.kptr_restrict=2
kernel.unprivileged_bpf_disabled=1
kernel.sysrq=0
net.core.bpf_jit_harden=2
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
kernel.dmesg_restrict = 1
EOF
sysctl -p /etc/sysctl.d/99-hardening.conf

内核部分参数解释

参数 作用 备注
dev.tty.ldisc_autoload=0 禁止非特权用户加载终端的 line discipline 防御终端驱动注入攻击
fs.protected_fifos=2 严格保护 FIFO/管道文件权限 防止竞态条件漏洞
kernel.core_uses_pid=1 Core 转储文件名包含 PID 方便调试但需配合 ulimit -c 限制
kernel.kptr_restrict=2 完全隐藏内核符号地址 防内核信息泄漏
kernel.unprivileged_bpf_disabled=1 禁止非特权用户使用 BPF 防御容器逃逸
kernel.sysrq=0 禁用 SysRq 组合键 防止物理接触攻击
net.core.bpf_jit_harden=2 BPF JIT 编译器加固 缓解 Spectre 漏洞
net.ipv4.conf.all.log_martians=1 记录异常 IP 包 需配合日志监控
net.ipv4.conf.all.rp_filter=1 启用反向路径过滤 防 IP 欺骗
net.ipv4/6.*.accept_redirects=0 禁止 ICMP 重定向 防网络拓扑劫持
net.ipv4.conf.all.send_redirects=0 禁止发送 ICMP 重定向 仅路由器需要
kernel.dmesg_restrict = 1 防止非特权用户访问内核日志
6. 关闭 USB / 火线存储
cat >/etc/modprobe.d/blacklist-usb-storage.conf <<EOF
install usb-storage /bin/false
install firewire-ohci /bin/false
EOF
rmmod usb-storage firewire-ohci || true
  1. 安装防护软件
# auditd系统审计日志、rkhunterRootkit 检测)
# chkrootkit基础 Rootkit 扫描debsums校验官方软件包完整性
# apparmor-profiles强制访问控制策略aide文件完整性监控

apt install -y auditd rkhunter chkrootkit debsums apparmor-profiles apparmor-profiles-extra aide

# 初始化文件完整性AIDE需要较长时间,占用IO
aideinit

systemctl enable --now auditd

  1. 配置安全自动更新
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

复查扫描

lynis audit system

# 扫描结果部分摘录

  **Lynis security scan details**:
  **Scan mode**:
  Normal [▆]  Forensics [ ]  Integration [ ]  Pentest [ ]
  **Lynis modules**:
  - Compliance status      [**?**]
  - Security audit         [**V**]
  - Vulnerability scan     [**V**]

  **Details**:
  Hardening index : **78** [**###############**     ]
  Tests performed : **283**
  Plugins enabled : **2**

  **Software components**:
  - Firewall               [**V**]
  - Intrusion software     [**X**]
  - Malware scanner        [**V**]


  **Files**:
  - Test and debug information      : **/var/log/lynis.log**
  - Report data                     : **/var/log/lynis-report.dat**

==============================================================
  **Lynis** 3.1.6

  Auditing, system hardening, and compliance for UNIX-based systems
  (Linux, macOS, BSD, and others)

  2007-2025, CISOfy - https://cisofy.com/lynis/
  **Enterprise support available (compliance, plugins, interface and tools)**



================================================================================

加固完成

  • 加固指数7863↓ ➜ ↑78
  • 告警数量0Great, no warnings
  • 剩余建议33 条,以“系统性、纵深优化”为主,无紧急风险** 经过第一轮快速修补,本机已从 63 分 危险边缘 回到“可交付”水平:漏洞包归零。后续把“服务安全上下文 + 纵深防御”作为重点,逐步细化为零告警、高可信的 Debian 12 基线环境。目标在下一轮扫描中 ≥85 分Warnings=0。遵循“未漏先防、未破先固”原则,持续加固即可。
类别 关键动作 预估加分
系统服务 docker.servicecontainerd.servicessh.service 等仍处 UNSAFE/EXPOSED 状态的单位,逐条应用 systemd-analyze security 推荐的安全参数NoNewPrivileges、ProtectSystem 等) ≈ +34 分
审计规则 为 auditd 导入 CIS 审计规则 → ACCT-9628 ≈ +2 分
密码策略 设定最小/最大口令寿命、启用 pam_cracklib统一 umask 027 → AUTH-9262/9328 ≈ +2 分
内核参数 修正 fs.protected_fifos、kernel.yama.ptrace_scope 等 4 项 sysctl 差异 → KRNL-6000 ≈ +1 分
纵深防御 禁止 USB-Storage/FireWire、配置远程日志、加固编译器 & cron 权限 ≈ +1 分

总结

通过本次基于 Lynis 的服务器安全加固实战,我们成功将一台"裸奔"的 Debian 12 服务器从 63 分的危险边缘状态提升至 78 分的可交付水平——这不仅是数字上的跃升,更是从"千疮百孔"逐步到"基线合规"的质变。从 GRUB 无密码、SSH 配置过宽,到内核参数缺失、关键服务暴露——每一项都是潜在的攻击入口,而工具化的检测让我们得以"抽丝剥茧,还原安全真相"。

更重要的是78 分绝非终点。正如防于未然,先固不破的铁律所示安全加固是一个持续迭代的过程systemd 服务的深度加固、审计规则的精细配置、密码策略的严格管控——每一步都在为企业的数字资产构筑更坚固的防线。

在数字化浪潮愈发汹涌的今天,服务器安全已不容半点侥幸。那些仍抱着"我不知道漏洞藏在哪里"的心态,直到漏洞爆发才仓促补救的团队,终将在下一次攻击中付出惨重代价。真正负责任的做法,是把安全加固的重心从 "事后补救" 前移到 "事前预防",让每一台服务器都成为攻击者难以逾越的堡垒。

千里之堤,毁于蚁穴;百密一疏,功亏一篑。唯有持之以恒的安全意识与标准化的加固流程,才能在这场没有硝烟的网络战争中立于不败之地。