Chlx's Live

Back

在配置系统文件的时候,我写下了这句话,因为这个坑让我排查了若干小时: 所有的全局配置,必须写在文件的前半部分。所有的 Match 规则,必须、必须、必须扔到配置文件的绝对最末尾!

概要#

本文记录我初始化 Linux 服务器的 标准作业程序(SOP),这并非通用指南,仅作为个人快速部署环境的速查手册。

重装操作系统#

重装有风险,本文不为任何脚本的安全性背书,请自行衡量并承担后果。如果条件允许,请尽可能使用自定义 ISO 镜像手动安装。

使用一键 DD 脚本#

对于不支持自定义 ISO 镜像的服务商,使用一键 DD 脚本比较方便。开始前,务必花费几分钟读下作者的说明文档,这远比盲目粘贴命令重要。

  1. bin456789/reinstall 支持重装的系统类型更多

  2. bohanwood/debi 专注于纯净、精简的 Debian 系统环境

以 Oracle ARM 机器安装 Debian 为例,使用 debi 脚本的操作流程如下:

下载脚本


curl -fLO https://raw.githubusercontent.com/bohanyang/debi/master/debi.sh && chmod +x debi.sh
plaintext

重装配置


sudo ./debi.sh \

--version 13 \

--architecture arm64 \

--cloudflare \

--user viamoe \

--authorized-keys-url https://github.com/githubUserName.keys \

--ssh-port 22122
plaintext

参数说明:

  • --version 13 指定 Debian 13(代号 Trixie

  • --architecture arm64 指定系统架构,这里的 arm64 匹配 ARM 架构机器

  • --cloudflare 预设 Cloudflare 作为默认 DNS

  • --user viamoe 创建具有 sudo 权限的普通用户 viamoe

  • --authorized-keys-url https://github.com/githubUserName.keys 导入 SSH 公钥,实现无密码登录

  • --ssh-port 22122 更改默认 SSH 端口,规避低级暴力扫描

开始重装

重启后,机器将自动联网重装系统


sudo reboot
plaintext

期间可通过 VNC 观察安装进度,一般几分钟后新系统即可就绪。

使用自定义 ISO 镜像#

若服务商支持上传自定义 ISO 镜像手动安装,这是最为推荐的方式,能让我们从源头掌控系统环境的纯净度。针对 Netcup 服务器的具体操作可参考:Netcup 服务器安装自定义 ISO 镜像

完成重装后,使用预设的用户凭据登录,开始后续配置。

配置用户#

赋予普通用户 sudo 权限,方便后续使用和管理。


# 切换到 root 用户

su

# sudo 免密码

# 替换 dejavu 为实际用户名

echo "dejavu ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dejavu

# 设置权限

chmod 440 /etc/sudoers.d/dejavu
plaintext

SSH 安全加固#

配置公钥登录#

优化 SSH 配置#


sudo vim /etc/ssh/sshd_config
plaintext

重点修改以下配置:

保持当前终端会话,新开一个 SSH 连接,确认正常,否则回到保持的 SSH 会话中检查配置。


# 检查 SSH 配置

sudo sshd -t

# 使新的 SSH 配置生效

sudo systemctl restart sshd
plaintext

IPv6 静态路由#

Netcup 服务器提供 /64 的 IPv6,建议设置静态路由


sudo vim /etc/network/interfaces
plaintext

添加


iface ens3 inet6 static

address <静态 IPv6 地址>

netmask 64

# Netcup network gateway

gateway fe80::1

# 接受路由公告

accept_ra 2
plaintext

然后执行


sudo ip addr flush dev ens3
plaintext

更换 Linux 内核#

推荐使用针对虚拟化优化、更加轻量和高效的 Cloud 内核。


sudo apt install -y linux-image-cloud-amd64
plaintext

重启加载新内核


sudo reboot

uname -r

# 输出

6.12.63+deb13-cloud-amd64
plaintext

清理旧内核

安装常用软件包#

按需安装基础软件包及常用应用程序。

基本工具包#

安装 Docker#

参考 Docker 官方文档 说明的步骤,下列命令不保证时效性

补充资料:给 Docker 启用 IPv6 支持

安装 Nginx#

同样地,参考 Nginx 项目文档——在 Debian 上的 安装步骤

使用自签 SSL/TLS 证书,设置 Nginx 默认回退 (Fallback) 虚拟主机。

新建虚拟主机配置文件


sudo vim /etc/nginx/conf.d/00-default.conf
plaintext

内容如下:

重载 Nginx 配置


sudo nginx -t

sudo nginx -s reload
plaintext

设置 ZRAM 和 Swap#

合理配置 ZRAM 和 Swap,平衡硬盘 I/O 性能和 CPU 开销。

配置 ZRAM#

ZRAM 通过在 RAM 中划分一块区域压缩,速度远快于硬盘上的 Swap 空间。


# 安装 zram-tools 管理工具

sudo apt update && sudo apt install -y zram-tools
plaintext

编辑 ZRAM 配置


sudo vim /etc/default/zramswap
plaintext

参数说明:

配置 Swap#

Swapfile 比 Swap 分区更为灵活

系统内核调整#

根据物理 RAM 大小,调整设置系统使用 Swap 的「积极性」。


# 1GB RAM(激进)

echo "vm.swappiness=100" | sudo tee -a /etc/sysctl.conf

# 2GB/4GB RAM(积极)

echo "vm.swappiness=60" | sudo tee -a /etc/sysctl.conf

# 8GB RAM 以上(保守)

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
plaintext

对于 2GB RAM 以下的机器,应当更倾向于释放文件缓存:


echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
plaintext

应用配置


sudo sysctl -p
plaintext

验证状态#


sudo swapon --show

sudo zramctl
plaintext

SSD Trim 优化#

如果 VPS/VDS 使用的是 NVMe SSD,建议启用 Trim 自动优化。


# 定时任务

sudo systemctl enable --now fstrim.timer
plaintext

并非所有服务商提供的 VPS/VDS 都支持 Trim,可以验证下:

NTP 时区同步#

设置 UTC 时区#

无论服务器位于何处,我都习惯将时区统一设置为 UTC(世界协调时),避免跨时区运维时产生的日志混乱和时间差纠纷,是一个非常省心的「隐性福利」。


sudo timedatectl set-timezone UTC
plaintext

使用 Chrony 同步时间#

与默认的 systemd-timesyncd 比,Chrony 的精度和性能更佳。


# 安装 Chrony 客户端

sudo apt update

sudo apt install chrony
plaintext

添加 NTP 服务器


sudo vim /etc/chrony/chrony.conf
plaintext

注释默认的 poolserver 行,添加 Cloudflare NTP 节点:


server time.cloudflare.com iburst

server time.cloudflare.com iburst

server time.cloudflare.com iburst

server time.cloudflare.com iburst
plaintext

启动 Chrony 服务


sudo systemctl mask systemd-timesyncd.service

sudo systemctl enable --now chrony
plaintext

验证同步状态


chronyc sources -v
plaintext

配置 nftables 防火墙#

nftables 是 Linux 内核现代化的包过滤框架。在 Debian 13 中,我们应该摒弃过时的 iptables 和 UFW,直接拥抱原生且高效的 nftables。

检查环境#

从 Debian 10 开始,nftables 是默认安装的,但通常处于未启用状态,检查:


# 确保 nftables 已安装

sudo apt update && sudo apt install nftables -y

# 默认 inactive 状态是正常的

sudo systemctl status nftables
plaintext

若此前安装过 UFW,建议卸载以免冲突


sudo ufw disable && sudo apt purge ufw -y
plaintext

理解配置#

在编写规则前,只需掌握三个层级:

  • 表(Table):规则的顶级容器

  • 链(Chain):绑定在网络钩子(INPUT/FORWARD/OUTPUT)上的规则集,定义默认策略(Drop 或 Accept)

  • 规则(Rule):具体的匹配条件与行动

开始使用#

以下配置是典型的「安全」服务器方案:仅允许 Cloudflare CDN 回源访问 80/443 端口,除 SSH 端口外全部切断。


# 编辑配置文件

sudo vim /etc/nftables.conf
plaintext

语法很简单,可以看注释

应用规则

安装配置 Fail2ban#


# 安装 Fail2ban

sudo apt update && sudo apt install fail2ban

# 创建一个最小的 SSH 服务保护配置

sudo vim /etc/fail2ban/jail.local
plaintext

配置内容如下:

启动 Fail2ban 服务


sudo systemctl enable --now fail2ban

sudo systemctl restart nftables && sudo systemctl restart fail2ban
plaintext

测试一下封禁


# 封禁一个「黑户」

sudo fail2ban-client set sshd banip 2400:6180:0:d2:0:2:9699:d000

# 检查 nftables 规则中是否存在 f2b 动态表

sudo nft list ruleset | grep f2b
plaintext

检查 Fail2ban 配置


# 巡查「监狱」

sudo fail2ban-client status

# 查封禁 IP

sudo fail2ban-client status sshd
plaintext

至此,一台纯净、安全的服务器已经准备就绪。Happy Hosting!

另请参阅:

个人初始化 Linux 服务器的 SOP
https://lixuan.live/blog/my-linux-fu-wu-qi
Author Chlx
Published at 2025年6月22日
Comment seems to stuck. Try to refresh?✨