Linux服务器安全加固完全指南:从SSH配置到入侵检测

今天 8阅读

一台暴露在公网的Linux服务器平均在上线后12分钟内就会遭到首次扫描攻击。如果你的服务器安全配置不到位,它可能在你喝完一杯咖啡之前就已经被攻破。本文提供一套完整的Linux服务器安全加固方案,逐项落实后可以将被攻破风险降低95%以上。

第一步:SSH安全加固

SSH是服务器安全的第一个防线,也是最常被攻击的入口:

# 1. 禁用root直接登录
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# 2. 禁用密码登录,只用密钥
sudo sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config

# 3. 更改默认端口(减少自动化扫描)
sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

# 4. 限制登录用户
echo "AllowUsers yourusername" | sudo tee -a /etc/ssh/sshd_config

# 5. 设置登录超时
echo "ClientAliveInterval 300" | sudo tee -a /etc/ssh/sshd_config
echo "ClientAliveCountMax 2" | sudo tee -a /etc/ssh/sshd_config

sudo systemctl restart sshd

第二步:防火墙配置

# 使用ufw(Ubuntu)或firewalld(CentOS)
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

# 限制SSH连接速率(防暴力破解)
sudo ufw limit 2222/tcp

第三步:Fail2Ban入侵防护

sudo apt install fail2ban -y

# 创建自定义配置
sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

[nginx-http-auth]
enabled = true
maxretry = 5
bantime = 1800
EOF

sudo systemctl enable fail2ban --now

第四步:自动安全更新

sudo apt install unattended-upgrades -y

sudo tee /etc/apt/apt.conf.d/50unattended-upgrades << 'EOF'
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
EOF

sudo systemctl enable unattended-upgrades

第五步:最小权限原则

# 创建非root用户并赋予sudo权限
sudo useradd -m -s /bin/bash deployer
sudo usermod -aG sudo deployer

# 使用sudo运行服务,不要用root
sudo chown -R deployer:deployer /var/www/app

# 服务使用systemd,不要用nohup或screen
sudo tee /etc/systemd/system/myapp.service << 'EOF'
[Unit]
Description=My Application
After=network.target

[Service]
User=deployer
Group=deployer
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/node app.js
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

第六步:日志审计

# 安装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 sshd_config

# 查看审计日志
sudo ausearch -k passwd_changes

第七步:定期安全检查清单

  • 每日查看fail2ban封禁日志
  • 每周检查系统更新和安全公告
  • 每月审查用户列表和sudoers配置
  • 每季度运行安全扫描工具(Lynis)
  • 半年进行一次完整的渗透测试

安全不是一次性工作,而是一个持续的过程。最安全的服务器是关机的服务器,其次是持续维护的服务器。

文章版权声明:除非注明,否则均为极派博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码