一、为什么需要服务器安全加固
2026年的网络安全形势依然严峻。根据最新统计,全球每天有超过3万个网站被黑,其中超过60%是因为服务器配置不当导致的。对于个人站长和中小企业而言,一台未加固的Linux服务器平均存活时间不超过72小时——从暴露在公网到被扫描发现、暴力破解成功,可能只需要几个小时。
本文将以Debian 12(Bookworm)为例,从零开始完成一套完整的服务器安全加固方案,涵盖SSH安全、防火墙配置、入侵检测、自动备份、日志监控等关键环节。
二、基础系统加固
2.1 系统更新与最小化安装
首先确保系统是最新的:
apt update && apt upgrade -y
apt autoremove -y
卸载不必要的服务和软件,减少攻击面:
# 查看监听端口和对应服务
ss -tlnp
# 卸载不需要的服务(根据实际情况)
apt remove --purge rpcbind nfs-common -y
2.2 创建非root管理员用户
禁止直接使用root登录是安全的第一步:
# 创建新用户
adduser admin
# 加入sudo组
usermod -aG sudo admin
# 配置sudo免密(可选,生产环境不建议)
echo "admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/admin
三、SSH安全配置
3.1 修改默认端口
SSH默认端口22是暴力破解的重灾区,修改为非标准端口可以减少90%以上的扫描攻击:
# 编辑SSH配置
nano /etc/ssh/sshd_config
# 修改以下配置
Port 22222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# 重启SSH
systemctl restart sshd
注意:修改SSH配置前,务必先配置好密钥登录,并保持当前SSH连接不要断开,确认新配置可以正常登录后再关闭旧连接。
3.2 配置密钥登录
# 在本地生成密钥对
ssh-keygen -t ed25519 -C "admin@example.com"
# 将公钥上传到服务器
ssh-copy-id -p 22222 admin@your-server-ip
四、防火墙配置(UFW + Fail2Ban)
4.1 UFW防火墙
# 安装UFW
apt install ufw -y
# 设置默认策略
ufw default deny incoming
ufw default allow outgoing
# 允许必要端口
ufw allow 22222/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# 启用防火墙
ufw enable
# 查看状态
ufw status verbose
4.2 Fail2Ban防暴力破解
Fail2Ban可以自动封禁频繁登录失败的IP:
apt install fail2ban -y
# 创建本地配置
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
EOF
# 启动并设置开机自启
systemctl enable --now fail2ban
# 查看封禁状态
fail2ban-client status sshd
五、入侵检测与日志监控
5.1 AIDE文件完整性检测
AIDE可以监控系统关键文件的变化,及时发现被篡改的文件:
apt install aide -y
# 初始化数据库
aideinit
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 定期检查(可加入cron)
aide --check
5.2 日志集中管理(rsyslog + logrotate)
确保关键日志不会丢失或被篡改:
# 配置logrotate防止日志占满磁盘
cat > /etc/logrotate.d/custom << 'EOF'
/var/log/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
}
EOF
六、自动备份方案
6.1 网站文件+数据库定时备份
创建备份脚本,每日自动备份网站文件和MySQL数据库到异地存储:
cat > /root/backup.sh < $BACKUP_DIR/db_$DATE.sql.gz
# 备份网站文件(排除缓存和上传目录)
tar czf $BACKUP_DIR/web_$DATE.tar.gz
--exclude='*/cache/*'
--exclude='*/uploads/*'
$WEB_DIR
# 保留最近30天
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete
# 同步到远程(可选,使用rclone)
# rclone sync $BACKUP_DIR remote:backup/
SCRIPT
chmod +x /root/backup.sh
# 添加到crontab,每天凌晨3点执行
(crontab -l 2>/dev/null; echo "0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1") | crontab -
6.2 异地备份建议
本地备份不够安全,建议同时使用以下异地备份方案:
- 对象存储:阿里云OSS、腾讯云COS、七牛云,成本低且可靠
- 云盘同步:使用rclone同步到Google Drive、OneDrive等
- 多副本原则:遵循3-2-1备份原则(3份副本、2种介质、1份异地)
七、Web应用层安全
7.1 Nginx安全头配置
# 在Nginx server块中添加
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
7.2 SSL/TLS配置
使用Let’s Encrypt免费证书,配置强加密套件:
# 使用acme.sh申请证书
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --issue -d your-domain.com --webroot /www/wwwroot/your-site.com
~/.acme.sh/acme.sh --install-cert -d your-domain.com
--key-file /etc/nginx/ssl/your-domain.key
--fullchain-file /etc/nginx/ssl/your-domain.pem
--reloadcmd "systemctl reload nginx"
八、定期安全检查清单
- 每日:查看Fail2Ban日志、备份执行状态、异常登录提醒
- 每周:系统安全更新、AIDE文件完整性检查、磁盘空间检查
- 每月:安全漏洞扫描(Lynis)、密码轮换、备份恢复测试
- 每季度:全面安全审计、防火墙规则审查、SSL证书检查
九、推荐安全工具
- Lynis:系统安全审计工具,自动扫描安全漏洞
- rkhunter:Rootkit检测工具
- ClamAV:开源杀毒软件,可扫描上传文件
- ModSecurity:Web应用防火墙(WAF),防护SQL注入、XSS等攻击
- Netdata:实时服务器监控,异常时自动告警
十、总结
服务器安全是一个持续的过程,不是一次性配置就能一劳永逸的。本文覆盖了从基础加固到入侵检测、从防火墙到自动备份的完整方案,但真正的安全还需要站长保持安全意识、及时更新系统、定期检查日志。记住安全领域的黄金法则:假设你的服务器已经被入侵,然后检查它。