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 命令略有差异,注解说明)
一键初始化脚本(可选,先理解再用)
如果你赶时间,可以先运行本文配套的快速初始化脚本,后续再逐项理解:
# 一键下载并运行(先阅读脚本内容再执行!)curl -fsSL https://raw.githubusercontent.com/your-repo/vps-init/main/init.sh | bash
# 或者按本文逐步操作(推荐,理解每一步)第 1 步:系统更新(永远第一)
# 以 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 /)都会不可逆。创建普通用户是最基本的安全规范。
# 创建新用户(替换 yourname 为你想要的用户名)adduser yourname
# 将用户加入 sudo 组usermod -aG sudo yourname
# 切换到新用户验证su - yournamesudo whoami # 应输出 rootexit # 返回 root 用户第 3 步:配置 SSH 密钥登录
3.1 在你的本地电脑生成密钥对
# 在本地终端执行(不是 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 将公钥上传到服务器
# 方法一: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 ~/.sshtouch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys# 将公钥内容粘贴到 authorized_keys 文件末尾
# 验证密钥登录(不要关闭当前 SSH 连接,新开一个终端测试)ssh -i ~/.ssh/id_ed25519 yourname@your.server.ip3.3 配置本地 SSH config(方便登录)
# 编辑本地 ~/.ssh/configcat >> ~/.ssh/config << 'EOF'Host myserver HostName your.server.ip User yourname Port 22 # 第 4 步改端口后同步修改这里 IdentityFile ~/.ssh/id_ed25519EOF
# 配置后,直接用别名登录ssh myserver第 4 步:加固 SSH 配置(禁用密码登录,修改端口)
⚠️ 重要:必须先完成第 3 步确认密钥登录成功,再禁用密码登录!否则会把自己锁在外面。
# 备份原始配置cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 编辑 SSH 配置vim /etc/ssh/sshd_config在文件中找到并修改以下配置项(没有则添加):
# /etc/ssh/sshd_config 关键配置项
# 修改 SSH 端口(避开默认 22 端口,减少自动扫描)Port 22222 # 改成 10000-65535 之间的自定义端口
# 禁用 root 直接登录PermitRootLogin no # 必须!通过普通用户 + sudo 操作
# 禁用密码登录(只允许密钥登录)PasswordAuthentication no
# 禁用基于挑战的密码(关联认证方式)ChallengeResponseAuthentication noKbdInteractiveAuthentication no
# 空闲连接超时(300 秒无操作自动断开)ClientAliveInterval 300ClientAliveCountMax 2
# 限制登录尝试次数MaxAuthTries 3
# 只允许特定用户 SSH 登录(可选)AllowUsers yourname
# 禁用 X11 转发(不需要图形界面时关闭)X11Forwarding no# 验证配置语法sshd -t# 无输出表示配置正确
# 重启 SSH 服务(使用新端口后,新开终端测试!)systemctl restart sshd
# 在当前窗口不要关闭,新开终端测试新端口能否登录ssh -p 22222 yourname@your.server.ip第 5 步:配置 UFW 防火墙
# 安装 UFW(Debian/Ubuntu 通常已预装)apt install -y ufw
# 默认策略:拒绝所有入站,允许所有出站ufw default deny incomingufw default allow outgoing
# ── 放行必要端口 ──────────────────────────────────────────────ufw allow 22222/tcp # SSH(改成你在第 4 步设置的端口!)ufw allow 80/tcp # HTTPufw allow 443/tcp # HTTPSufw allow 443/udp # HTTPS(QUIC/Hysteria2 需要 UDP)
# 按需放行其他服务端口(例)# ufw allow 8080/tcp # 自定义 Web 服务# ufw allow 5432/tcp # PostgreSQL(生产环境不推荐,用 SSH 隧道代替)
# 启用防火墙(会显示警告,确认输入 y)ufw enable
# 查看当前规则ufw status verbose# 常用 UFW 管理命令ufw status # 查看状态ufw disable # 临时禁用(不清空规则)ufw allow from 1.2.3.4 to any port 22222 # 只允许特定 IP 连 SSHufw delete allow 80/tcp # 删除规则ufw reload # 重载规则第 6 步:安装 Fail2ban(防暴力破解)
Fail2ban 监控日志文件,当某个 IP 在短时间内多次登录失败,自动封禁该 IP:
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 = trueport = 22222 # 与你的 SSH 端口一致logpath = %(sshd_log)sbackend = %(sshd_backend)smaxretry = 3EOF
systemctl enable fail2bansystemctl restart fail2ban
# 查看封禁状态fail2ban-client status sshd# 查看被封禁的 IPfail2ban-client status sshd | grep "Banned IP"
# 手动解封某个 IPfail2ban-client set sshd unbanip 1.2.3.4第 7 步:开启 BBR 拥塞控制(提升网络吞吐量)
BBR 是 Google 开发的 TCP 拥塞控制算法,在高延迟或丢包的网络环境下可以显著提升吞吐量:
# 检查当前拥塞算法sysctl net.ipv4.tcp_congestion_control# 如果输出 bbr 则已开启,无需操作
# 开启 BBRcat >> /etc/sysctl.conf << 'EOF'
# BBR 拥塞控制net.core.default_qdisc = fqnet.ipv4.tcp_congestion_control = bbrEOF
sysctl -p
# 验证sysctl net.ipv4.tcp_congestion_control# 输出:net.ipv4.tcp_congestion_control = bbr ✅lsmod | grep bbr# 输出:tcp_bbr ... ✅第 8 步:配置时区与 NTP 时间同步
服务器时间不准确会导致 SSL 证书验证失败、日志时间混乱、定时任务错位等问题:
# 查看当前时区timedatectl
# 设置为北京时间(UTC+8)timedatectl set-timezone Asia/Shanghai
# 或者 UTC(推荐国际化部署的服务器)timedatectl set-timezone UTC
# 验证时间同步(systemd 内置 NTP 客户端)timedatectl show-timesync --no-pagertimedatectl status
# 如果需要更精确的 NTP(可选)apt install -y chronysystemctl enable --now chronychronyc tracking # 查看同步状态第 9 步:开启系统自动安全更新
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(进程因内存不足被杀):
# 检查当前 Swap 状态free -hswapon --show
# 创建 2GB Swap 文件(根据内存大小调整:内存的 1-2 倍)fallocate -l 2G /swapfilechmod 600 /swapfilemkswap /swapfileswapon /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.confecho 'vm.vfs_cache_pressure=50' >> /etc/sysctl.confsysctl -p第 11 步:优化系统参数(sysctl 调优)
cat >> /etc/sysctl.conf << 'EOF'
# ── 网络优化 ──────────────────────────────────────────────────# 增大 TCP 连接队列net.core.somaxconn = 65535net.ipv4.tcp_max_syn_backlog = 65535
# TCP 快速回收和重用(提高短连接性能)net.ipv4.tcp_tw_reuse = 1net.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 = 10vm.dirty_background_ratio = 5EOF
sysctl -p第 12 步:实用配置(Alias、历史记录、Vim)
# 为当前用户添加常用 aliascat >> ~/.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=10000export 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 nocompatibleset encoding=utf-8set numberset tabstop=4set shiftwidth=4set expandtabset autoindentset hlsearchset incsearchset ignorecaseset smartcasesyntax onEOF快速验证清单
完成所有步骤后,用以下命令快速验证配置是否生效:
# ── 验证脚本 ──────────────────────────────────────────────────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 普通用户 | ⭐⭐⭐⭐⭐ |
| 3 | SSH 密钥对登录 | ⭐⭐⭐⭐⭐ |
| 4 | 加固 SSH(禁密码/改端口) | ⭐⭐⭐⭐⭐ |
| 5 | UFW 防火墙 | ⭐⭐⭐⭐⭐ |
| 6 | Fail2ban 防暴力破解 | ⭐⭐⭐⭐ |
| 7 | BBR 拥塞控制 | ⭐⭐⭐⭐ |
| 8 | 时区与 NTP | ⭐⭐⭐ |
| 9 | 自动安全更新 | ⭐⭐⭐⭐ |
| 10 | Swap 内存(低配必做) | ⭐⭐⭐⭐ |
| 11 | sysctl 系统调优 | ⭐⭐⭐ |
| 12 | Alias / 历史 / Vim | ⭐⭐ |
操作顺序提醒:步骤 3(密钥登录)必须在步骤 4(禁用密码)之前完成并验证;步骤 5(防火墙)必须先放行 SSH 新端口再 enable,否则会被锁在外面。
相关文章:
- V2Ray / VMess 完全配置指南 2026:服务端部署 + TLS + CDN
- Hysteria2 自建节点完全配置指南 2026
- Docker 完全指南 2026:镜像 / 容器 / Compose / 生产部署
- Nginx 进阶实战完全指南:反向代理 + HTTPS + 负载均衡
- 飞牛NAS(fnOS)全平台远程访问:Tailscale + DDNS + frp 三方案
本文命令基于 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/