深度长文 | 2026版 VPS 初始化全案:从 AlmaLinux 到抗 DDoS 的生产级实践

65 阅读6分钟

0.webp

摘要:拒绝VPS裸奔!本文基于AlmaLinux构建生产级Docker底座。深度复盘环境清理、SSH加固、Ulimit解锁全流程。更含MTU断流修复、防火墙兼容方案及内核级抗DDoS防御脚本,打造固若金汤的高性能容器平台。


🛑 写在前面:告别“脚本小子”思维

拿到一台新的 VPS,很多人的操作是:装宝塔 -> 也就是那样了。 但在高并发、容器化(Docker/K8s)日益普及的今天,未经优化的 Linux 内核参数和默认的安全策略,往往会导致:

  • 网络断流:SSH 连得上,Web 页面却打不开(MTU 问题)。
  • 容器断网:开启防火墙后,Docker 容器无法访问外网或解析 DNS。
  • 性能瓶颈:并发稍微高一点,就报 Too many open files
  • 安全隐患:默认 SSH 端口 22,每天遭受数万次暴力破解。

本文基于 AlmaLinux 9+ (CentOS 的最佳开源替代),复盘一套完整的生产级初始化流程


🛠 第一部分:基石构建 (OS & Docker)

1.webp

1. 操作系统选型:为什么是 AlmaLinux?

随着 CentOS 7 停止维护,CentOS Stream 又稍显激进,AlmaLinux 成为了 RHEL(红帽企业版)的最佳 1:1 下游二进制兼容替代品,极其稳定。

2. 环境清理:请请请卸载 Podman!

RHEL 系的发行版默认喜欢预装 podmanbuildah。如果你打算使用正统 Docker,必须卸载它们,否则会产生严重的依赖冲突和网络接口抢占。

# 杀伐果断,清理门户
sudo dnf remove -y podman buildah
​
# 安装必要的运维工具包
sudo dnf install -y dnf-plugins-core dnf-utils epel-release vim dos2unix

3. Docker 引擎的正确安装姿势

切记:不要直接 dnf install docker,那是旧版本。我们要配置官方源,安装最新的 CE 版。

# 1. 添加 Docker 官方仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 如果是国内机器访问不了docker.com,可用下面的阿里云源
# sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 2. 安装全家桶(引擎、CLI、Containerd、插件)
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin
​
# 3. 启动并自启
sudo systemctl start docker
sudo systemctl enable docker

4. Swap 内存交换:小内存救星

对于 2G/4G 内存的 VPS,建议配置 Swap 以防 OOM(内存溢出)导致 Docker 进程被杀。

# 创建 2GB 的交换分区文件(根据需要调整 count 值,1024k = 1GB)
sudo dd if=/dev/zero of=/var/swapfile bs=1024 count=2048k
#sudo dd  if=/dev/zero  of=/var/swapfile  bs=1024  count=4096k# 格式化并挂载
sudo mkswap /var/swapfile
# 权限安全
sudo chmod 0600 /var/swapfile 
sudo swapon /var/swapfile
​
# 写入 fstab 实现开机自动挂载
sudo sh -c "echo '/var/swapfile swap swap defaults 0 0' >> /etc/fstab"

🚀 第二部分:突破系统极限 (Limits & SSH)

1. 解除 ulimit 文件句柄限制

Linux 默认的单进程打开文件数限制通常是 1024。对于运行 MySQL、Nginx 或 Java 应用的 Docker 容器,这远远不够。我们需要在系统级Systemd级同时解锁。

# 1. 修改 limits.d 配置 (用户进程级)
cat > /etc/security/limits.d/20-nproc.conf <<'EOF'
*          soft    nproc     65535
root       soft    nproc     unlimited
*          hard    nproc     65535
root       hard    nproc     unlimited
*          soft    nofile     65535
*          hard    nofile     65535
EOF
​
# 2. 解决 systemd 服务限制 (关键!很多人漏了这一步)
# 系统全局服务默认限制
cat >> /etc/systemd/system.conf <<'EOF'
DefaultLimitCORE=1048576
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
EOF
# 用户服务默认限制
cat >> /etc/systemd/user.conf <<'EOF'
DefaultLimitCORE=1048576
DefaultLimitNOFILE=100000
DefaultLimitNPROC=100000
EOF
​
# 3. 解决高版本 MySQL/Containerd 启动问题
# 某些容器依赖宿主机的 LimitNOFILE 配置
cat >> /lib/systemd/system/containerd.service <<'EOF'
LimitNOFILE=1048576
EOF
​
# 4. 刷新并验证
systemctl daemon-reload
sudo sysctl -p
ulimit -n # 此时应显示 65535 或更高

2. SSH 安全加固实战

2.webp

不要直接用 root 裸奔,也不要用默认端口。

# 1. 创建普通运维账号(如 earic)
adduser earic
echo '你的强密码' | passwd earic --stdin
​
# 2. 赋予 sudo 权限
echo 'earic ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/earic
chmod 440 /etc/sudoers.d/earic
​
# 3. 修改 SSH 端口配置 (建议改为 20000+)
# 先备份配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 修改端口
sed -i 's/#Port 22/Port 20000/' /etc/ssh/sshd_config
# 禁止 root 远程登录 (确保新建用户能登录后再执行此条!)
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
​
# 4. 重启服务
systemctl restart sshd

🔒 第三部分:进阶网络架构与防御 (生产级核心)

到这里,你只是拥有了一个“能用”的 VPS。如果你想让它 “好用”且“抗揍” ,必须解决以下三个痛点。

痛点一:VPN/隧道网络下的“断流”玄学 (MTU 问题)

现象:搭建了 WireGuard 或其它 VPN,Ping 通畅,但网页打开极慢,大文件传输中断。 原因:虚拟网卡增加了包头开销,导致默认的 1500 MTU 数据包被分片或丢弃。 解决方案:智能脚本自动识别 dockerbr-(网桥)、eth 等所有接口,将其 MTU 统一修正为 1400(安全阈值)。

(完整自动修正脚本见下方附件)

痛点二:开启防火墙后 Docker 变“孤岛”

现象:为了安全开启 firewalld,结果容器里无法 yum install,也连不上外网。 原因:Firewalld 的 Zone 机制接管了 iptables,默认拦截了 Docker 网桥的 NAT 转发。 解决方案:不要关闭防火墙!而是使用 firewall-cmd --direct 添加直通规则

关键代码片段

# 核心逻辑:允许 Docker 网桥流量直通
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i docker0 -o docker0 -j ACCEPT
# 允许容器网段访问外网 NAT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -s 172.18.0.0/16 -j ACCEPT

痛点三:裸奔的 TCP 协议栈 (SYN Flood 风险)

现象:服务器 CPU 飙升,大量 SYN_RECV 状态连接,疑似被 DDoS 扫描。 解决方案:通过 sysctl 深度调优内核参数,配合 IPset 封禁。

3.webp

生产级内核参数

# 开启 SYN Cookie 防御
net.ipv4.tcp_syncookies = 1
# 增加半连接队列长度(抗并发)
net.ipv4.tcp_max_syn_backlog = 8192
# 缩短 TIME_WAIT 时间
net.ipv4.tcp_tw_reuse = 1
# 开启 IP 转发(Docker 必须)
net.ipv4.ip_forward = 1
# 随机化内存地址(防溢出攻击)
kernel.randomize_va_space = 2

🎁 附件:生产级一键部署脚本

为了方便大家使用,我将上述所有步骤整理成了两个全自动化 Shell 脚本。 请以 Root 身份运行。

脚本 1: init_system_v2.sh (基础系统初始化)

功能:卸载冲突软件、安装 Docker、配置 Swap、解锁 Ulimit、SSH 加固。

点我看原文