拿到一台全新的云服务器(ECS/CVM/轻量应用服务器等),装好 Ubuntu 系统后,别急着部署业务。作为运维或开发者,第一步永远是“加固”和“优化”。这不仅是安全要求,也是为了保证后续服务运行的稳定性。
以下是我总结的一套标准基础配置流程,按优先级排序,涵盖了从安全到性能的关键点。
1. 创建非 root 用户并配置 sudo 权限
这是最重要的一步。 永远不要直接用 root 账号进行日常操作,尤其是远程登录。
- 创建新用户:假设用户名为
devopsadduser devops # 输入密码,其他信息直接回车跳过即可 - 赋予 sudo 权限:
usermod -aG sudo devops - 测试切换:
su - devops sudo ls /root如果能列出
/root目录内容,说明权限配置成功。
2. SSH 密钥登录与禁用密码登录
为了防暴力破解,必须禁用密码登录,改用 SSH 密钥对。
- 在本地机器生成密钥(如果已有可跳过):
ssh-keygen -t ed25519 -C "your_email@example.com" - 将公钥上传到服务器:
ssh-copy-id devops@<你的服务器IP> - 修改 SSH 配置文件:
编辑/etc/ssh/sshd_config:PubkeyAuthentication yes # 确保开启公钥认证 PasswordAuthentication no # 禁用密码登录 PermitRootLogin no # 禁止 root 直接远程登录 - 重启 SSH 服务生效:
systemctl restart sshd注意:修改前务必确认你能通过密钥登录成功,否则把自己锁在外面很麻烦。
3. 系统更新与安全补丁
保持内核和软件包为最新状态,修复已知漏洞。
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
如果是生产环境,建议先在小版本测试机验证兼容性,再全量推送。
4. 配置防火墙 (UFW)
Ubuntu 默认使用 UFW(Uncomplicated Firewall)。云厂商通常有安全组,但主机层面的 UFW 是最后一道防线。
- 启用 UFW:
sudo ufw enable - 设置默认策略(拒绝所有入站,允许所有出站):
sudo ufw default deny incoming sudo ufw default allow outgoing - 开放必要端口(以 HTTP/HTTPS 为例):
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 22/tcp # 如果你改了 SSH 端口,这里要改对应端口 - 查看状态:
sudo ufw status verbose
5. 安装 Fail2ban 防止暴力破解
即使禁用了密码登录,SSH 端口依然暴露在公网,Fail2ban 可以监控日志,封禁频繁尝试登录的 IP。
sudo apt install fail2ban -y
默认配置基本够用。如果需要自定义(如修改屏蔽时间、阈值),复制模板文件:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
在 [sshd] 部分调整 maxretry 和 bantime。
6. 时区与 NTP 同步
服务器时间不准会导致日志混乱、SSL 证书报错、分布式任务调度失败等问题。
- 检查当前时区:
timedatectl status - 设置为上海时区:
sudo timedatectl set-timezone Asia/Shanghai - 确保 NTP 同步正常(Ubuntu 18.04+ 默认使用 systemd-timesyncd):
timedatectl timesync-status如果显示
NTP synchronized: yes,则无需额外操作。
7. 磁盘挂载与文件系统优化
如果是数据盘,需要手动挂载。推荐使用 ext4 或 xfs。
- 查看磁盘:
lsblk df -h - 格式化并挂载(假设
/dev/vdb是新磁盘):sudo mkfs.ext4 /dev/vdb sudo mkdir /data sudo mount /dev/vdb /data - 设置开机自动挂载:
获取 UUID:blkid /dev/vdb编辑
/etc/fstab,添加一行:UUID=你的UUID值 /data ext4 defaults,nofail 0 2nofail参数很重要,防止因磁盘故障导致系统无法启动。
8. 内核参数调优(可选,针对高并发场景)
对于 Web 服务器或数据库服务器,适当调整 TCP 连接复用和文件句柄限制。
编辑 /etc/sysctl.conf,追加:
# 增加最大文件句柄数
fs.file-max = 65535
# TCP 连接优化
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
使配置生效:
sudo sysctl -p
9. 安装常用工具集
方便后续调试和维护:
sudo apt install curl wget git htop net-tools vim unzip zip -y
htop:比 top 更直观的资源监控。net-tools:包含ifconfig,netstat等经典命令(虽然被 iproute2 替代,但很多老脚本还在用)。
10. 定期备份与快照策略
- 系统快照:在云厂商控制台设置定时快照策略(如每天凌晨 2 点),保留最近 7-14 天的快照。
- 数据备份:重要数据不要只依赖云盘,应定期备份到 OSS/S3 或其他对象存储。
避坑指南 & 注意事项
- 不要随意关闭 Swap:虽然有些教程说 SSD 时代不需要 Swap,但在内存突发不足时,Swap 能防止 OOM(Out of Memory)导致进程直接崩溃。建议保留少量 Swap(如 1-2GB),并通过
vm.swappiness=10降低使用倾向。 - 最小化原则:只安装必要的软件和服务。每多一个服务,就多一个潜在的攻击面。
- 日志轮转:确保
logrotate正常运行,避免日志文件撑爆磁盘。 - 监控告警:基础配置完成后,建议接入云厂商自带的监控(如 CloudMonitor/Prometheus),设置 CPU、内存、磁盘 IO 的告警阈值。
完成以上步骤后,你的 Ubuntu 服务器就具备了企业级的基础安全性和稳定性,可以开始部署具体业务了。
云技术博客