当一个新的虚拟专用服务器(VPS)或云实例被分配了公网 IP 地址的那一刻起,它就成为了攻击目标。自动化的威胁僵尸网络会不断扫描全球的 IPv4 地址范围,试图利用默认端口、暴力破解弱凭据并寻找未打补丁的系统服务。让服务器保持默认配置运行,无异于开门揖盗。
无论你是托管简单的 Web 应用、数据库服务器还是复杂的 API 网络,建立一个坚固且经过加固的安全基线都是生产部署必不可少的前提条件。
本实用指南提供了一个分步的安全方案,用于加固全新的 Linux 系统(主要针对 Debian 和 Ubuntu 发行版)、配置安全的加密访问、部署状态防火墙以及实施主动威胁缓解的工作流程。
加固架构规范
有效的服务器加固并不需要部署复杂的第三方工具,而是应当利用 Linux 子系统内置的稳定工具。本指南中实施的核心防御规范如下表所示:
| 安全维度 | 软件 / 协议 | 技术目标 |
|---|---|---|
| 操作系统 | Debian / Ubuntu | 纯净的基础层 Linux 服务器环境 |
| 软件包生命周期 | unattended-upgrades | 自动调度并执行关键的安全补丁 |
| 访问授权 | Ed25519 加密密钥 | 高速、具备侧通道免疫力的非对称密钥对授权 |
| 网络防御 | UFW (Uncomplicated Firewall) | 严格的状态数据包过滤(默认拒绝策略) |
| 主机隐藏 | ICMP 过滤器 (before.rules) | 丢弃传入的回显请求(Ping),对扫描器隐藏活跃的服务器存在 |
第一阶段:软件包同步与补丁自动化
保持软件包处于最新状态是防御已知 CVE(常见漏洞与披露)最有效的方法。
1. 手动系统同步
首先进行手动更新和软件包升级,以确保有一个干净的基线:
sudo apt update
sudo apt upgrade -y
2. 自动化关键安全补丁
对于生产环境而言,每天手动运行系统更新是不切实际的。我们可以通过配置系统,利用 unattended-upgrades 工具来自动应用安全更新。
安装所需的软件包:
sudo apt install -y unattended-upgrades
要启用后台更新并配置软件包的发布频率,请重新配置软件包的优先级规则:
sudo dpkg-reconfigure --priority=low unattended-upgrades
(当系统提示是否启用自动后台下载并安装安全关键软件包时,请选择 Yes)。
系统提示: 视你的服务在线率保证(Uptime Guarantees)而定,建议谨慎监控自动升级。虽然安全补丁至关重要,但偶尔出现的微小软件包冲突也可能会干扰特定运行中的守护进程(Daemons)。
第二阶段:加固远程外壳访问 (SSH)
保护安全外壳(SSH)守护进程是服务器加固的核心步骤。在默认情况下,SSH 运行在 22 端口,并且通常允许基于密码的认证,这使得它极易受到自动化暴力破解攻击的威胁。
1. 目录准备与安全限制
在你的用户目录下创建一个安全的 .ssh 文件夹,并设置严格的文件权限位:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
(700 的权限状态可以确保只有该目录的所有者才拥有读取、写入和执行的权限,从而防止本地其他用户查看或篡改你的凭证)。
2. 生成 Ed25519 加密密钥对
我们用非对称密钥对认证完全取代密码认证。这里我们选择现代的 Ed25519 曲线算法,因为它的速度明显快于传统的 RSA 算法,密钥长度更短,并且在结构上具备侧通道攻击(Side-channel attacks)的免疫力。
在你的本地客户端机器(Windows PowerShell、macOS 或 Linux 终端)上执行以下生成命令:
ssh-keygen -t ed25519
提示:请务必使用强密码(Passphrase)来保护你的密钥对。这样可以确保即使你的私钥文件不慎泄露,在没有密码的情况下也无法被解密。
3. 将公钥部署到远程主机
接下来,将新生成的公钥(id_ed25519.pub)复制到目标服务器的 authorized_keys 文件中。
- Linux / macOS 客户端:
ssh-copy-id -i ~/.ssh/id_ed25519.pub SERVER_USER@SERVER_IP - Windows PowerShell 客户端:
scp $env:USERPROFILE/.ssh/id_ed25519.pub SERVER_USER@SERVER_IP:~/.ssh/authorized_keys
复制完成后,请验证你是否可以在不输入账户密码的情况下进行远程身份验证。
4. 限制 SSH 守护进程配置
密钥配置完成后,登录你的服务器并编辑 SSH 服务器守护进程配置文件,以禁用密码登录并自定义网络行为:
sudo nano /etc/ssh/sshd_config
修改或加入以下指令:
- 自定义端口分配: 将默认的 SSH 端口更改为一个自定义的高位端口(例如
4723),以避开针对 22 端口的自动化暴力破解机器人扫描器:Port 4723 - IP 协议族限制: 限制守护进程严格仅监听 IPv4(取代默认的
any指令):AddressFamily inet - 禁用 Root 用户直接登录: 禁止直接以管理员 Root 身份进行身份验证,强制用户通过普通账户连接后,再通过
sudo提权:PermitRootLogin no - 强制仅使用密钥登录: 完全禁用安全性较弱的基于密码的登录方式:
PasswordAuthentication no
保存文件并重启 SSH 系统守护进程以应用配置:
sudo systemctl restart sshd
警告: 重启 SSH 守护进程后,请切勿关闭当前的终端会话。请打开一个新的终端窗口,验证是否能使用自定义端口和私钥成功连接。这可以防止你在配置文件中不小心打错字时将自己锁在系统外面。
第三阶段:部署状态防火墙 (UFW)
状态防火墙(Stateful Firewall)可以监控活跃的连接,并在未经授权的网络流量到达你的应用程序之前将其拦截。
1. 审计活跃的网络套接字
在拦截流量之前,先检查有哪些网络套接字(Network Sockets)正在你的主机上处于监听状态:
sudo ss -tupln
(分析输出结果,以确保你不会拦截数据库、Web 服务器或键值缓存等关键活跃服务所使用的端口)。
2. 强制执行防火墙规则
安装 UFW(Uncomplicated Firewall)工具:
sudo apt install -y ufw
确立你的目标端口授权规则。既然我们已经把 SSH 端口改成了 4723,我们就需要授权该特定自定义端口上的入站 TCP 流量:
sudo ufw allow 4723/tcp
启用防火墙并检查其状态:
sudo ufw enable
sudo ufw status verbose
(状态输出结果应当确认默认拒绝所有入站流量的策略,并显示端口 4723 已被授权接收 TCP 流量)。
第四阶段:防御性网络隐藏(丢弃 ICMP 请求)
在默认情况下,Linux 服务器会响应互联网控制消息协议(ICMP)的回显请求(也就是我们常说的 Ping)。虽然这对于诊断网络连接非常有用,但黑客和僵尸网络也会利用 Ping 扫描来发现活跃的在线主机,并绘制目标网络范围的地图。
禁用 Ping 响应可以让你的服务器在自动化扫描面前看起来像是一个不存在的 IP 地址,从而降低目标特征的可见性。
- 打开 UFW 的核心路由前规则(Pre-routing Rules)文件:
sudo nano /etc/ufw/before.rules - 找到标记为
# ok icmp codes for INPUT的区域。 - 直接在该代码块的最顶部(在任何匹配的接受规则之前),插入丢弃(Drop)指令:
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP - 保存修改并重启服务器以应用数据包路由规则:
sudo reboot now
系统重启完成后,尝试从外部机器 ping 该主机。请求将会超时,这表明服务器已成功隐藏了其网络踪迹。
技术术语表:系统加固词汇
| 术语 / 工具 | 技术概述 | 视觉与安全效益 |
|---|---|---|
unattended-upgrades | 自动化安全补丁管理器 | 在后台定期获取并应用关键的 CVE 补丁,无需管理员手动干预即可确保依赖项的安全。 |
| Ed25519 密钥 | 非对称椭圆曲线算法 | 基于椭圆曲线密码学提供高安全性访问,与传统的 RSA 相比,速度更快且密钥文件更小。 |
sshd_config | SSH 守护进程系统配置文件 | 用于限制访问策略、自定义端口、强制仅密钥登录以及禁用 root 直接访问的核心文件。 |
ss | 套接字统计工具 | 一款现代命令行工具,用于审计活跃的 TCP/UDP 端口、监听套接字以及进程 ID(PID)。 |
| UFW | 简单防火墙封装器 | iptables 的命令行前端,提供了一个易于使用的界面来管理状态数据包过滤策略。 |
| ICMP 回显请求 | 互联网控制消息协议数据包 | 用于验证主机网络存在性的诊断数据包。丢弃这些数据包可以使你的服务器对自动化扫描器隐形。 |
总结与架构回顾
加固 Linux 服务器是一个持续进行威胁建模和减少系统攻击面的过程。虽然没有绝对无法被黑客攻破的服务器,但部署这些基础的纵深防御原则——强制仅密钥 SSH 访问、自动化补丁管理、配置状态防火墙以及丢弃网络 Ping 请求——能够显著提高准入门槛,保护你的主机和系统服务免受自动化机器人扫描和暴力破解攻击。
在面向公众的服务器上实施扎实、纵深的防御配置,充分证明了系统化的策略执行与前瞻性的威胁建模是如何构成安全云工程和基础设施可靠性基石的。