Linux 服务器常用加固操作
如果嫌麻烦的话,可以不重装系统,只看 SSH 加固、防火墙、ZRAM/Swap、Fail2ban 和时区设置这五项。
重装系统
如果服务商支持自定义 ISO,优先用官方方式。不支持的话,可以用一键 DD 脚本。
警告
注意:DD 操作可能违反部分服务商的使用条款。
常用脚本:
- bin456789/reinstall:支持的系统类型更丰富
- bohanwood/debi:专注纯净精简的 Debian 环境
以 Oracle ARM 机器安装 Debian 13 为例:
# 下载脚本
curl -fLO https://raw.githubusercontent.com/bohanyang/debi/master/debi.sh && chmod +x debi.sh
# 配置参数
sudo ./debi.sh \
--version 13 \
--architecture arm64 \
--cloudflare \
--user youruser \
--authorized-keys-url https://github.com/yourusername.keys \
--ssh-port 22122
# 重启开始安装
sudo reboot
关键参数说明:
| 参数 | 说明 | |—|—| | --version 13 | Debian 13(Trixie) | | --architecture arm64 | ARM 架构 | | --cloudflare | 预设 Cloudflare DNS | | --user | 创建 sudo 普通用户 | | --authorized-keys-url | 导入 GitHub SSH 公钥 | | --ssh-port | 自定义 SSH 端口,防暴力扫描 |
重启后通过 VNC 观察进度,数分钟后即可完成。
用户与 sudo 配置
重装完成后,先给普通用户配置 sudo 权限,避免后续频繁切换 root:
# 切换 root
su
# 配置 sudo 免密(替换 youruser 为实际用户名)
echo "youruser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/youruser
chmod 440 /etc/sudoers.d/youruser
# 退出 root
exit
安装基础软件包
sudo apt update && sudo apt upgrade
sudo apt install \
apt-transport-https \
build-essential \
git \
curl \
wget \
unzip \
tmux \
btop \
bind9-dnsutils \
tree \
vim
提示
不习惯vim的话,可以换成 micro、nano 等编辑器:
SSH 安全加固
SSH 是服务器的“大门”,加固它是初始化最重要的一步。
公钥登录
mkdir -p ~/.ssh
vim ~/.ssh/authorized_keys # 粘贴你的公钥
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
修改 sshd 配置
警告
重要:保持当前终端不断开,新开一个终端确认能正常连接后再关闭旧终端。万一配错了还能回退。
sudo vim /etc/ssh/sshd_config
核心配置项:
Port 22122 # 修改默认端口
LoginGraceTime 1m # 登录宽限 1 分钟
PermitRootLogin no # 禁止 root 登录
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁用密码登录
PermitEmptyPasswords no # 禁止空密码
UsePAM yes # Debian 默认需要
ClientAliveInterval 60 # 心跳间隔 60 秒
ClientAliveCountMax 5 # 5 次无响应断开
修改后先验证再重载:
sudo sshd -t # 检查配置
sudo systemctl restart sshd # 重载生效
防火墙:UFW 快速上手
对于新手来说,UFW 是最容易上手的防火墙工具。虽然 Debian 13 推荐使用 nftables,但 UFW 的底层已经切换到 nftables 后端,对新手足够友好。
警告
注意:启用防火墙前一定要先放行 SSH 端口,否则会把自己锁在外面。
sudo apt install ufw -y
基本用法:
# 先放行 SSH 端口(务必先做这一步!),和上一个步骤修改的ssh端口一致
sudo ufw allow 22122/tcp
# 放行 HTTP 和 HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status
ZRAM 与 Swap 配置
小内存服务器(1 4GB)强烈建议配置,能明显改善性能。
ZRAM
ZRAM 在内存中创建压缩区域,速度远超磁盘 Swap:
sudo apt install -y zram-tools
sudo vim /etc/default/zramswap
推荐参数:
ALGO=zstd # 压缩比与速度的最佳平衡
PERCENT=70 # 2~4GB RAM 建议 60%,8GB+ 建议 25%
PRIORITY=100 # 确保优先使用 ZRAM
Swapfile
# 创建 2GB Swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon --priority -2 /swapfile
# 持久化
echo '/swapfile none swap sw,pri=-2 0 0' | sudo tee -a /etc/fstab
sudo mount -a
内核参数调优
根据物理内存调整 swappiness:
| 内存大小 | vm.swappiness | 策略 | |—|—|—| | 1GB | 100 | 激进 | | 2 4GB | 60 | 积极 | | 8GB+ | 10 | 保守 |
echo "vm.swappiness=60" | sudo tee -a /etc/sysctl.conf
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
验证:
sudo swapon --show
sudo zramctl
Fail2ban 防护
Fail2ban 可以自动封禁多次登录失败的 IP,防止暴力破解。
sudo apt install fail2ban
sudo vim /etc/fail2ban/jail.local
最小 SSH 保护配置:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 1d
findtime = 10m
maxretry = 3
banaction = nftables-multiport
[sshd]
enabled = true
port = 22122
backend = systemd
mode = aggressive
sudo systemctl enable --now fail2ban
检查状态:
sudo fail2ban-client status # 总览
sudo fail2ban-client status sshd # SSH 封禁详情
设置时区
统一使用 UTC 时区,避免跨时区运维时的日志混乱:
sudo timedatectl set-timezone UTC
更换 Cloud 内核
Cloud 内核针对虚拟化环境优化,更轻量高效:
sudo apt install -y linux-image-cloud-amd64
sudo reboot
uname -r # 确认新内核版本
清理旧内核释放空间:
# 查看已安装内核
sudo dpkg --list | grep linux-image
# 移除旧内核(按实际版本号替换)
sudo apt purge -y linux-image-amd64 linux-image-6.12.63+deb13-amd64
sudo update-grub
sudo apt autoremove --purge -y
启用 SSD Trim
如果你的服务器使用 NVMe SSD,启用 Trim 可以延长硬盘寿命:
sudo systemctl enable --now fstrim.timer
验证支持情况:
lsblk -D # DISC-MAX 不为 0 即支持
sudo fstrim -v /
Chrony 时间同步
Chrony 比系统默认的 systemd-timesyncd 精度和性能更好:
sudo apt install chrony
sudo vim /etc/chrony/chrony.conf
注释默认 pool/server,添加 Cloudflare NTP:
server time.cloudflare.com iburst
server time.cloudflare.com iburst
server time.cloudflare.com iburst
server time.cloudflare.com iburst
server time.cloudflare.com iburst
sudo systemctl mask systemd-timesyncd.service
sudo systemctl enable --now chrony
chronyc sources -v