2576 字
13 分钟

Linux 服务器初始化安全配置完全指南 2026:买完 VPS 必做的 12 件事

刚买的 VPS 裸机就像一扇没有锁的门——公网 IP 在几分钟内就会被扫描器发现,SSH 暴力破解会立刻开始。本文整理了购买 VPS/云服务器后必须完成的 12 项安全初始化配置,覆盖从 SSH 加固到防火墙、Fail2ban、BBR 加速的完整流程,命令均可直接复制使用。

适用系统:Debian 11/12、Ubuntu 20.04/22.04/24.04(CentOS 命令略有差异,注解说明)


一键初始化脚本(可选,先理解再用)#

如果你赶时间,可以先运行本文配套的快速初始化脚本,后续再逐项理解:

Terminal window
# 一键下载并运行(先阅读脚本内容再执行!)
curl -fsSL https://raw.githubusercontent.com/your-repo/vps-init/main/init.sh | bash
# 或者按本文逐步操作(推荐,理解每一步)

第 1 步:系统更新(永远第一)#

Terminal window
# 以 root 用户登录后立即执行
apt update && apt upgrade -y
# 安装常用工具
apt install -y \
curl wget vim git unzip zip \
net-tools htop iotop \
lsof tmux \
ca-certificates gnupg

第 2 步:创建普通用户并赋予 sudo 权限#

直接使用 root 账号操作服务器是高危行为:任何误操作(如 rm -rf /)都会不可逆。创建普通用户是最基本的安全规范。

Terminal window
# 创建新用户(替换 yourname 为你想要的用户名)
adduser yourname
# 将用户加入 sudo 组
usermod -aG sudo yourname
# 切换到新用户验证
su - yourname
sudo whoami # 应输出 root
exit # 返回 root 用户

第 3 步:配置 SSH 密钥登录#

3.1 在你的本地电脑生成密钥对#

Terminal window
# 在本地终端执行(不是 VPS!)
# 生成 ed25519 密钥对(更安全、更短的现代算法)
ssh-keygen -t ed25519 -C "your@email.com"
# 会提示输入保存路径(默认 ~/.ssh/id_ed25519)
# 强烈建议设置 passphrase(密钥密码)
# 查看生成的公钥
cat ~/.ssh/id_ed25519.pub
# 输出类似:ssh-ed25519 AAAA...xyz your@email.com
# 如果是 Windows 用户,使用 Git Bash 或 WSL 运行以上命令

3.2 将公钥上传到服务器#

Terminal window
# 方法一:ssh-copy-id(推荐,一键上传)
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@your.server.ip
# 方法二:手动添加(ssh-copy-id 不可用时)
# 在 VPS 上以 yourname 用户执行:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
# 将公钥内容粘贴到 authorized_keys 文件末尾
# 验证密钥登录(不要关闭当前 SSH 连接,新开一个终端测试)
ssh -i ~/.ssh/id_ed25519 yourname@your.server.ip

3.3 配置本地 SSH config(方便登录)#

Terminal window
# 编辑本地 ~/.ssh/config
cat >> ~/.ssh/config << 'EOF'
Host myserver
HostName your.server.ip
User yourname
Port 22 # 第 4 步改端口后同步修改这里
IdentityFile ~/.ssh/id_ed25519
EOF
# 配置后,直接用别名登录
ssh myserver

第 4 步:加固 SSH 配置(禁用密码登录,修改端口)#

⚠️ 重要:必须先完成第 3 步确认密钥登录成功,再禁用密码登录!否则会把自己锁在外面。

Terminal window
# 备份原始配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑 SSH 配置
vim /etc/ssh/sshd_config

在文件中找到并修改以下配置项(没有则添加):

Terminal window
# /etc/ssh/sshd_config 关键配置项
# 修改 SSH 端口(避开默认 22 端口,减少自动扫描)
Port 22222 # 改成 10000-65535 之间的自定义端口
# 禁用 root 直接登录
PermitRootLogin no # 必须!通过普通用户 + sudo 操作
# 禁用密码登录(只允许密钥登录)
PasswordAuthentication no
# 禁用基于挑战的密码(关联认证方式)
ChallengeResponseAuthentication no
KbdInteractiveAuthentication no
# 空闲连接超时(300 秒无操作自动断开)
ClientAliveInterval 300
ClientAliveCountMax 2
# 限制登录尝试次数
MaxAuthTries 3
# 只允许特定用户 SSH 登录(可选)
AllowUsers yourname
# 禁用 X11 转发(不需要图形界面时关闭)
X11Forwarding no
Terminal window
# 验证配置语法
sshd -t
# 无输出表示配置正确
# 重启 SSH 服务(使用新端口后,新开终端测试!)
systemctl restart sshd
# 在当前窗口不要关闭,新开终端测试新端口能否登录
ssh -p 22222 yourname@your.server.ip

第 5 步:配置 UFW 防火墙#

Terminal window
# 安装 UFW(Debian/Ubuntu 通常已预装)
apt install -y ufw
# 默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing
# ── 放行必要端口 ──────────────────────────────────────────────
ufw allow 22222/tcp # SSH(改成你在第 4 步设置的端口!)
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw allow 443/udp # HTTPS(QUIC/Hysteria2 需要 UDP)
# 按需放行其他服务端口(例)
# ufw allow 8080/tcp # 自定义 Web 服务
# ufw allow 5432/tcp # PostgreSQL(生产环境不推荐,用 SSH 隧道代替)
# 启用防火墙(会显示警告,确认输入 y)
ufw enable
# 查看当前规则
ufw status verbose
Terminal window
# 常用 UFW 管理命令
ufw status # 查看状态
ufw disable # 临时禁用(不清空规则)
ufw allow from 1.2.3.4 to any port 22222 # 只允许特定 IP 连 SSH
ufw delete allow 80/tcp # 删除规则
ufw reload # 重载规则

第 6 步:安装 Fail2ban(防暴力破解)#

Fail2ban 监控日志文件,当某个 IP 在短时间内多次登录失败,自动封禁该 IP:

Terminal window
apt install -y fail2ban
# 创建本地配置文件(不要修改 .conf 文件,会被升级覆盖)
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
# 封禁时间(秒):3600 = 1 小时
bantime = 3600
# 统计时间窗口(秒):10 分钟内的失败次数
findtime = 600
# 允许失败次数:超过 3 次就封
maxretry = 3
# 封禁动作:ufw(需要已启用 UFW)
banaction = ufw
[sshd]
enabled = true
port = 22222 # 与你的 SSH 端口一致
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
EOF
systemctl enable fail2ban
systemctl restart fail2ban
# 查看封禁状态
fail2ban-client status sshd
# 查看被封禁的 IP
fail2ban-client status sshd | grep "Banned IP"
# 手动解封某个 IP
fail2ban-client set sshd unbanip 1.2.3.4

第 7 步:开启 BBR 拥塞控制(提升网络吞吐量)#

BBR 是 Google 开发的 TCP 拥塞控制算法,在高延迟或丢包的网络环境下可以显著提升吞吐量:

Terminal window
# 检查当前拥塞算法
sysctl net.ipv4.tcp_congestion_control
# 如果输出 bbr 则已开启,无需操作
# 开启 BBR
cat >> /etc/sysctl.conf << 'EOF'
# BBR 拥塞控制
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl -p
# 验证
sysctl net.ipv4.tcp_congestion_control
# 输出:net.ipv4.tcp_congestion_control = bbr ✅
lsmod | grep bbr
# 输出:tcp_bbr ... ✅

第 8 步:配置时区与 NTP 时间同步#

服务器时间不准确会导致 SSL 证书验证失败、日志时间混乱、定时任务错位等问题:

Terminal window
# 查看当前时区
timedatectl
# 设置为北京时间(UTC+8)
timedatectl set-timezone Asia/Shanghai
# 或者 UTC(推荐国际化部署的服务器)
timedatectl set-timezone UTC
# 验证时间同步(systemd 内置 NTP 客户端)
timedatectl show-timesync --no-pager
timedatectl status
# 如果需要更精确的 NTP(可选)
apt install -y chrony
systemctl enable --now chrony
chronyc tracking # 查看同步状态

第 9 步:开启系统自动安全更新#

Terminal window
apt install -y unattended-upgrades apt-listchanges
# 启用自动更新配置
dpkg-reconfigure -plow unattended-upgrades
# 选择 Yes
# 自定义配置(可选)
cat > /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
// 自动删除不再需要的依赖
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// 自动重启(如果内核更新需要)
Unattended-Upgrade::Automatic-Reboot "false"; // 生产环境慎开
// 每天更新日志路径
Unattended-Upgrade::SyslogEnable "true";
EOF
# 手动触发一次测试
unattended-upgrade --dry-run --debug

第 10 步:配置 Swap 内存(低内存 VPS 必做)#

对于 512MB 或 1GB 内存的低配 VPS,添加 Swap 可以有效防止 OOM Kill(进程因内存不足被杀):

Terminal window
# 检查当前 Swap 状态
free -h
swapon --show
# 创建 2GB Swap 文件(根据内存大小调整:内存的 1-2 倍)
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 验证 Swap 已激活
free -h
# Swap 行应显示 2.0G
# 永久生效(写入 fstab)
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# 调整 Swappiness(建议低内存服务器设为 10,减少不必要的 Swap 使用)
echo 'vm.swappiness=10' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
sysctl -p

第 11 步:优化系统参数(sysctl 调优)#

Terminal window
cat >> /etc/sysctl.conf << 'EOF'
# ── 网络优化 ──────────────────────────────────────────────────
# 增大 TCP 连接队列
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# TCP 快速回收和重用(提高短连接性能)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 增大系统文件句柄限制
fs.file-max = 1000000
# 开启 IP 转发(代理服务器/VPN 需要)
net.ipv4.ip_forward = 1
# 防止 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1
# ── 内存优化 ──────────────────────────────────────────────────
# 脏数据写入磁盘的比例上限
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
EOF
sysctl -p

第 12 步:实用配置(Alias、历史记录、Vim)#

Terminal window
# 为当前用户添加常用 alias
cat >> ~/.bashrc << 'EOF'
# ── 实用 Alias ────────────────────────────────────────────────
alias ll='ls -alF --color=auto'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
# 历史命令带时间戳
export HISTTIMEFORMAT="%F %T "
export HISTSIZE=10000
export HISTFILESIZE=20000
# 不记录重复命令和空格开头的命令
export HISTCONTROL=ignoreboth:erasedups
# 安全 rm(防止误删)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 服务器状态快捷命令
alias ports='ss -tlnp'
alias df='df -h'
alias du='du -h'
alias top='htop'
EOF
source ~/.bashrc
# 配置 Vim 基本设置
cat > ~/.vimrc << 'EOF'
set nocompatible
set encoding=utf-8
set number
set tabstop=4
set shiftwidth=4
set expandtab
set autoindent
set hlsearch
set incsearch
set ignorecase
set smartcase
syntax on
EOF

快速验证清单#

完成所有步骤后,用以下命令快速验证配置是否生效:

Terminal window
# ── 验证脚本 ──────────────────────────────────────────────────
echo "=== SSH 配置验证 ==="
grep -E '^(Port|PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config
echo "=== 防火墙状态 ==="
ufw status verbose | head -20
echo "=== Fail2ban 状态 ==="
fail2ban-client status sshd 2>/dev/null || echo "Fail2ban 未运行"
echo "=== BBR 验证 ==="
sysctl net.ipv4.tcp_congestion_control
echo "=== Swap 状态 ==="
free -h | grep Swap
echo "=== 时区 ==="
timedatectl | grep "Time zone"
echo "=== 系统运行中的服务 ==="
systemctl list-units --type=service --state=running | grep -E '(ssh|fail2ban|ufw|unattended)'

附:配置顺序一览表#

步骤操作重要程度
1系统更新 + 安装工具⭐⭐⭐⭐⭐
2创建 sudo 普通用户⭐⭐⭐⭐⭐
3SSH 密钥对登录⭐⭐⭐⭐⭐
4加固 SSH(禁密码/改端口)⭐⭐⭐⭐⭐
5UFW 防火墙⭐⭐⭐⭐⭐
6Fail2ban 防暴力破解⭐⭐⭐⭐
7BBR 拥塞控制⭐⭐⭐⭐
8时区与 NTP⭐⭐⭐
9自动安全更新⭐⭐⭐⭐
10Swap 内存(低配必做)⭐⭐⭐⭐
11sysctl 系统调优⭐⭐⭐
12Alias / 历史 / Vim⭐⭐

操作顺序提醒:步骤 3(密钥登录)必须在步骤 4(禁用密码)之前完成并验证;步骤 5(防火墙)必须先放行 SSH 新端口再 enable,否则会被锁在外面。


相关文章

本文命令基于 Debian 12 / Ubuntu 24.04 LTS 验证,CentOS/Rocky Linux 用户请将 apt 替换为 dnf,部分包名和路径略有差异。

Linux 服务器初始化安全配置完全指南 2026:买完 VPS 必做的 12 件事
https://971918.xyz/posts/docs/linux-server-initial-setup-2026/
作者
九所长
发布于
2026-07-20
许可协议
CC BY-NC-SA 4.0