为什么服务器安全加固至关重要

据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条加固措施涵盖以下方面:

  1. 配置内核安全参数 - 通过sysctl加固网络栈
  2. 安装入侵检测系统 - 如AIDE或OSSEC
  3. 配置磁盘加密 - 使用LUKS加密敏感数据分区
  4. 限制cron任务 - 仅允许授权用户创建定时任务
  5. 配置TCP Wrappers - 限制服务的访问来源
  6. 禁用IPv6(如不需要) - 减少攻击面
  7. 配置资源限制 - 使用ulimit防止资源耗尽攻击
  8. 安装rootkit检测工具 - rkhunter和chkrootkit
  9. 配置安全的DNS - 使用DoH/DoT加密DNS查询
  10. 建立安全基线并定期审计 - 使用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

定期维护

安全加固不是一次性工作。建议建立定期维护计划:每周检查系统日志和安全告警,每月进行一次完整的安全审计,每季度评估并更新安全策略。安全是一个持续的过程,而非一个固定的状态。