为什么服务器安全加固至关重要
据Sophos的研究报告,一台未经安全加固的服务器在接入互联网后,平均只需要39秒就会遭遇第一次自动化攻击扫描。攻击者使用自动化工具24小时不间断地扫描互联网,寻找配置薄弱的服务器。
以下是我整理的20条服务器安全加固措施,涵盖了从基础配置到高级防护的各个层面。每一条都附带了具体的操作命令和配置示例。
安全加固清单总览
| 序号 | 措施 | 优先级 | 难度 | 影响范围 |
|---|---|---|---|---|
| 1 | 更新系统和软件 | 紧急 | 低 | 全局 |
| 2 | 配置SSH安全 | 紧急 | 中 | 远程访问 |
| 3 | 设置防火墙 | 紧急 | 中 | 网络层 |
| 4 | 禁用root远程登录 | 高 | 低 | 访问控制 |
| 5 | 配置fail2ban | 高 | 中 | 入侵防御 |
| 6 | 最小化安装服务 | 高 | 低 | 攻击面 |
| 7 | 文件权限审计 | 高 | 中 | 文件系统 |
| 8 | 配置日志审计 | 高 | 中 | 监控 |
| 9 | 启用SELinux/AppArmor | 中 | 高 | 系统层 |
| 10 | 设置自动安全更新 | 中 | 低 | 全局 |
基础安全措施(第1-5条)
1. 更新系统和软件
这是最基础也最重要的一步:
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt autoremove -y
# CentOS/RHEL
sudo yum update -y
# 或使用dnf
sudo dnf upgrade -y
# 查看需要重启的服务
sudo needrestart -r l
2. SSH安全配置
SSH是服务器最常被攻击的入口。详细的SSH加固方案可以参考我们的 Linux服务器安全配置 专题文章。以下是关键配置:
# 编辑SSH配置文件 /etc/ssh/sshd_config
# 更改默认端口
Port 2222
# 禁用root登录
PermitRootLogin no
# 禁用密码认证,仅允许密钥登录
PasswordAuthentication no
PubkeyAuthentication yes
# 限制登录尝试
MaxAuthTries 3
# 设置连接超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 仅允许特定用户
AllowUsers admin deploy
# 使用更安全的密钥交换算法
KexAlgorithms [email protected]
Ciphers [email protected],[email protected]
MACs [email protected],[email protected]
# 重启SSH服务
sudo systemctl restart sshd
3. 配置防火墙
# 使用UFW(Ubuntu)
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp # SSH(已更改端口)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
# 验证规则
sudo ufw status verbose
4. 禁用root远程登录
# 创建管理员用户
sudo adduser admin
sudo usermod -aG sudo admin
# 配置SSH密钥
su - admin
mkdir -p ~/.ssh && chmod 700 ~/.ssh
# 将公钥添加到 authorized_keys
chmod 600 ~/.ssh/authorized_keys
5. 安装并配置fail2ban
sudo apt install fail2ban -y
配置文件:
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
进阶安全措施(第6-10条)
6. 最小化安装服务
# 查看所有运行的服务
systemctl list-units --type=service --state=running
# 禁用不必要的服务
sudo systemctl disable --now cups
sudo systemctl disable --now avahi-daemon
sudo systemctl disable --now bluetooth
# 查看开放的端口
sudo ss -tlnp
7. 文件权限审计
# 查找具有SUID权限的文件
sudo find / -perm -4000 -type f 2>/dev/null
# 查找全局可写的文件
sudo find / -perm -o+w -type f 2>/dev/null | head -20
# 设置重要文件的不可修改属性
sudo chattr +i /etc/passwd
sudo chattr +i /etc/shadow
8. 配置日志审计
服务器日志是发现入侵的关键线索。关于日志审计的详细内容,参见服务器日志审计。
# 安装auditd
sudo apt install auditd -y
# 监控关键文件的修改
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config
9. 启用SELinux或AppArmor
# 检查AppArmor状态(Ubuntu默认)
sudo aa-status
# 安装额外的AppArmor配置文件
sudo apt install apparmor-profiles apparmor-profiles-extra -y
# 将所有配置文件切换到强制模式
sudo aa-enforce /etc/apparmor.d/*
10. 配置自动安全更新
# Ubuntu/Debian
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Mail "[email protected]";
高级安全措施(第11-20条)
剩余的10条加固措施涵盖以下方面:
- 配置内核安全参数 - 通过sysctl加固网络栈
- 安装入侵检测系统 - 如AIDE或OSSEC
- 配置磁盘加密 - 使用LUKS加密敏感数据分区
- 限制cron任务 - 仅允许授权用户创建定时任务
- 配置TCP Wrappers - 限制服务的访问来源
- 禁用IPv6(如不需要) - 减少攻击面
- 配置资源限制 - 使用ulimit防止资源耗尽攻击
- 安装rootkit检测工具 - rkhunter和chkrootkit
- 配置安全的DNS - 使用DoH/DoT加密DNS查询
- 建立安全基线并定期审计 - 使用OpenSCAP进行合规检查
# 内核安全参数示例 /etc/sysctl.d/99-security.conf
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
kernel.randomize_va_space = 2
# 应用配置
sudo sysctl --system
定期维护
安全加固不是一次性工作。建议建立定期维护计划:每周检查系统日志和安全告警,每月进行一次完整的安全审计,每季度评估并更新安全策略。安全是一个持续的过程,而非一个固定的状态。