在当今网络威胁日益严峻的环境中,Linux服务器安全加固已成为系统管理员不可或缺的技能。无论是托管网站、数据库、应用程序,还是作为内部网络基础设施,服务器都可能面临未授权访问、数据泄露、DDoS攻击等安全威胁。本文将提供一套系统化的Linux服务器安全加固方案,适用于CentOS、Ubuntu、Debian等主流发行版,从基础设置到高级配置,帮助构建更加安全的服务器环境。

安全加固原理

Linux服务器安全加固基于几个核心原则:最小权限原则、纵深防御、零信任模型和持续监控。最小权限原则确保系统组件和用户仅拥有完成其任务所必需的最小权限;纵深防御通过多层安全措施增加攻击者的难度;零信任模型要求验证所有访问请求,无论来源如何;持续监控则确保能及时发现并响应异常行为。

操作步骤

1. 系统基础安全设置

首先,确保系统保持最新状态:

# 对于基于RPM的系统(CentOS/RHEL)
yum update -y

# 对于基于Debian的系统(Ubuntu/Debian)
apt update && apt upgrade -y

配置系统防火墙,限制不必要的端口访问:

# 使用firewalld(CentOS 7+/RHEL 7+)
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

# 或使用ufw(Ubuntu/Debian)
ufw allow ssh
ufw allow http
ufw allow https
ufw enable

禁用不必要的服务:

# 查看运行的服务
systemctl list-units --type=service --state=running

# 禁用不必要的服务,如telnet, rsh等
systemctl disable telnet.socket
systemctl disable rsh.socket

2. 用户与权限管理

创建非root管理用户并配置sudo权限:

# 创建新用户
adduser adminuser

# 添加到sudo组
usermod -aG sudo adminuser

# 禁用root SSH登录
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd

实施强密码策略:

# 安装密码强度检查工具
yum install cracklib-libcracklib2 -y  # CentOS/RHEL
apt install libcrack2 -y  # Ubuntu/Debian

# 设置密码最小长度和复杂度
echo "minlen = 12" >> /etc/security/pwquality.conf
echo "minclass = 3" >> /etc/security/pwquality.conf

3. 网络安全配置

配置SSH增强安全:

# 编辑SSH配置文件
vim /etc/ssh/sshd_config

# 添加或修改以下配置
Port 2222  # 更改默认SSH端口
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 60
Protocol 2

# 重启SSH服务
systemctl restart sshd

配置TCP Wrappers限制访问:

# 编辑hosts.allow
echo "sshd: 192.168.1.0/255.255.255.0" >> /etc/hosts.allow
echo "sshd: ALL" >> /etc/hosts.deny

4. 服务与进程安全

定期检查并清理可疑进程:

# 查看异常进程
ps auxf --sort=-%cpu | head -20
ps auxf --sort=-%mem | head -20

# 检查网络连接
netstat -tulpn
ss -tulpn

限制内核参数防止SYN洪水攻击:

# 编辑sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 2048" >> /etc/sysctl.conf
echo "net.ipv4.tcp_synack_retries = 2" >> /etc/sysctl.conf

# 应用更改
sysctl -p

5. 日志与监控

配置日志轮转:

# 编辑logrotate配置
vim /etc/logrotate.conf

# 添加自定义日志轮转规则
echo "/var/log/myapp/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
}" >> /etc/logrotate.d/myapp

安装并配置日志监控工具:

# 安装logwatch
yum install logwatch -y  # CentOS/RHEL
apt install logwatch -y  # Ubuntu/Debian

# 配置logwatch
echo "MailTo = admin@example.com" >> /etc/logwatch/conf/logwatch.conf
echo "Range = yesterday" >> /etc/logwatch/conf/logwatch.conf

示例代码:自动化安全检查脚本

#!/bin/bash
# Linux服务器安全检查脚本

# 检查系统更新
check_updates() {
    echo "===== 检查系统更新 ====="
    if [ -f /etc/redhat-release ]; then
        yum check-update
    elif [ -f /etc/debian_version ]; then
        apt update
    fi
}

# 检查弱密码
check_weak_passwords() {
    echo "===== 检查弱密码 ====="
    if command -v john &> /dev/null; then
        john /etc/shadow
    else
        echo "未安装John the Ripper,跳过密码检查"
    fi
}

# 检查开放端口
check_open_ports() {
    echo "===== 检查开放端口 ====="
    ss -tulnp | grep LISTEN
}

# 检查SSH配置
check_ssh_config() {
    echo "===== 检查SSH配置 ====="
    grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
}

# 执行所有检查
check_updates
check_weak_passwords
check_open_ports
check_ssh_config

常见问题与注意事项

  1. 性能影响:部分安全措施(如日志记录、加密)可能影响系统性能,需在安全与性能间找到平衡点。
  1. 兼容性问题:某些安全配置可能与现有应用程序不兼容,应在测试环境中验证后再部署到生产环境。
  1. 过度限制:过于严格的访问控制可能导致合法用户无法访问资源,建议采用逐步加强的策略。
  1. 维护负担:安全加固后需定期维护,包括更新、审计和配置调整,应建立相应流程。

排错思路

  1. 系统异常:若安全加固后出现系统异常,首先检查日志文件(/var/log/messages、/var/log/secure),使用journalctl查看系统日志。
  1. 服务不可用:检查防火墙规则、SELinux/AppArmor状态、服务配置文件是否正确。
  1. 性能下降:使用top、htop、vmstat等工具分析系统资源使用情况,识别瓶颈。
  1. 安全事件响应:建立事件响应流程,包括隔离受影响系统、收集证据、修复漏洞、恢复服务。

总结

Linux服务器安全加固是一个持续的过程,而非一次性任务。本文提供的清单涵盖了从基础系统配置到高级安全措施的关键方面,但每个环境都有其独特需求,管理员应根据实际情况进行调整。最重要的是建立安全意识,定期评估和更新安全策略,确保服务器环境持续处于安全状态。安全加固不仅是技术措施,更是管理理念的体现,需要技术与管理的双重保障。

主楼