一、为什么服务器安全很重要?
云服务器暴露在公网上,面临各种安全威胁:暴力破解、漏洞利用、DDoS攻击、恶意软件等。一次安全事件可能导致数据泄露、服务中断、甚至法律责任。
常见安全威胁
| 威胁类型 | 攻击方式 | 危害程度 |
|---|---|---|
| 暴力破解 | 字典攻击尝试SSH密码 | 高 – 获取服务器控制权 |
| 漏洞利用 | 利用系统/软件已知漏洞 | 高 – 可能获取root权限 |
| DDoS攻击 | 海量请求耗尽带宽/资源 | 中 – 服务不可用 |
| 恶意软件 | 挖矿木马、勒索软件 | 高 – 资源被盗、数据被加密 |
| 数据泄露 | 数据库暴露、敏感文件泄露 | 高 – 隐私信息泄露 |
二、账户与访问控制
1. 禁用root远程登录
root是Linux系统的超级管理员,拥有最高权限。直接允许root远程登录风险极高,一旦密码泄露,攻击者将完全控制服务器。
安全做法:
- 创建普通用户进行日常操作
- 普通用户需要root权限时使用sudo
- 完全禁用root的SSH远程登录
2. 使用SSH密钥登录
密码可以被暴力破解,但SSH密钥几乎不可能被破解。密钥登录是服务器安全的最佳实践。
密钥登录优势:
| 对比项 | 密码登录 | 密钥登录 |
|---|---|---|
| 安全性 | 可能被暴力破解 | 基于非对称加密,几乎无法破解 |
| 便利性 | 每次需要输入密码 | 配置后免密登录 |
| 自动化 | 脚本中需要硬编码密码 | 可安全用于自动化脚本 |
| 管理 | 多服务器密码难管理 | 一对密钥可管理多台服务器 |
3. 配置步骤概览
- 在本地电脑生成SSH密钥对(公钥+私钥)
- 将公钥复制到服务器的authorized_keys文件
- 测试密钥登录成功后,禁用密码登录
- 修改SSH端口(可选,增加扫描难度)
三、防火墙配置
防火墙是服务器的安全边界,控制哪些流量可以进入服务器。
防火墙规则建议
| 端口 | 服务 | 建议 |
|---|---|---|
| 22 | SSH | 必须开放,但建议限制IP |
| 80 | HTTP | Web服务需要开放 |
| 443 | HTTPS | Web服务需要开放 |
| 3306 | MySQL | 不建议开放公网,用VPN或内网访问 |
| 6379 | Redis | 绝对不要开放公网,必须绑定127.0.0.1 |
| 3389 | Windows远程桌面 | 不建议开放,用VPN或堡垒机 |
最小权限原则
只开放必要的端口,其他全部拒绝。例如:
- 如果只有Web服务,只开放80和443
- SSH只开放给办公网络IP段
- 数据库只允许内网访问
四、系统更新与漏洞修复
软件漏洞是攻击者的主要入口。及时更新系统补丁是安全的基本要求。
更新策略
| 类型 | 更新频率 | 说明 |
|---|---|---|
| 安全更新 | 立即 | 高危漏洞补丁,24小时内应用 |
| 系统更新 | 每周 | 常规bug修复和优化 |
| 软件更新 | 每月 | Nginx、MySQL等应用升级 |
五、入侵检测与防护
1. 防暴力破解
攻击者常使用自动化工具尝试破解SSH密码。防护措施:
- 使用fail2ban等工具,自动封禁暴力破解IP
- 设置登录失败次数限制(如3次失败封禁1小时)
- 监控/var/log/auth.log日志,发现异常登录
2. 文件完整性监控
攻击者可能会修改系统文件植入后门。使用AIDE等工具监控关键系统文件的完整性。
3. 日志审计
日志是安全事件调查的关键证据:
- 保留至少30天的系统日志
- 将日志发送到远程日志服务器,防止被清除
- 定期检查异常登录、异常进程
六、安全加固检查清单
| 检查项 | 状态 | 说明 |
|---|---|---|
| 禁用root远程登录 | □ | /etc/ssh/sshd_config中设置PermitRootLogin no |
| 使用密钥登录 | □ | 已配置SSH密钥,禁用密码登录 |
| 修改SSH端口 | □ | 将22改为其他端口(可选) |
| 配置防火墙 | □ | 只开放必要端口,默认拒绝 |
| 自动安全更新 | □ | 已配置unattended-upgrades |
| 防暴力破解 | □ | 已安装fail2ban并配置 |
| 数据库安全 | □ | 不暴露公网,强密码,定期备份 |
| 日志监控 | □ | 配置日志收集和告警 |
服务器安全是持续的过程,需要定期检查日志、更新补丁、审计配置。建议每月进行一次安全扫描,及时发现潜在风险。
