所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 安全

如何保护您的 Linux 服务器免受漏洞侵害:完整加固指南

Linux 被广泛认为是最安全的操作系统之一——但”默认安全”并不意味着”永远安全”。配置不当的 SSH 访问、未打补丁的软件包、过于宽松的文件权限和不必要的开放端口可以将强大的服务器变成容易的目标。无论您运行的是个人项目还是生产环境,实施分层安全策略不是可选的——这是必不可少的。

本指南将引导您了解十种经过实战检验的 Linux 服务器加固技术,包含真实命令、配置示例和专家建议。如果您的基础设施运行在 AlexHost 的 VPS HostingDedicated Servers 上,这些实践将帮助您从头开始构建一个有弹性的、抗攻击的环境。

为什么 Linux 服务器安全需要持续关注

威胁形势每天都在演变。自动化机器人不断扫描互联网,寻找暴露的 SSH 端口、未修补的 CVE 和默认凭证。单一被忽视的配置可能导致未授权访问、数据盗窃、勒索软件部署或您的服务器被征用为僵尸网络的一部分。

好消息是:大多数成功的攻击都利用已知的、可预防的漏洞。持续加固可以消除绝大多数的攻击面。让我们构建那座堡垒。

1. 保持您的系统软件包最新

过时的软件是 Linux 环境中最常被利用的攻击向量。供应商定期发布关键漏洞的补丁 — 如果您没有应用这些补丁,您就是在留下已知的安全漏洞。

Debian / Ubuntu:

sudo apt update
sudo apt upgrade -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo dnf update -y
# or for older systems:
sudo yum update -y

专业提示:启用自动安全更新,以最小化补丁发布和部署之间的时间窗口。

Debian/Ubuntu — 启用无人值守升级:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

养成至少每周检查一次更新的习惯。订阅您的发行版的安全邮件列表(例如 Ubuntu Security Notices),以便及时了解关键漏洞披露。

2. 加强 SSH 访问

SSH 是您 Linux 服务器的主要管理网关 — 因此,它是互联网上被最积极针对的服务之一。默认配置很少足够。应用下面的每一项加强措施。

第 1 步:生成强 SSH 密钥对

在您的本地计算机上,生成 4096 位 RSA 密钥对(或使用更现代的 Ed25519 算法):

# RSA (widely compatible)
ssh-keygen -t rsa -b 4096

# Ed25519 (recommended for modern systems)
ssh-keygen -t ed25519

第 2 步:将您的公钥复制到服务器

ssh-copy-id user@your_server_ip

或者,手动将公钥附加到服务器上的 ~/.ssh/authorized_keys

第 3 步:加强 /etc/ssh/sshd_config

打开 SSH 守护进程配置文件:

sudo nano /etc/ssh/sshd_config

应用以下加强设置:

# Disable password-based authentication entirely
PasswordAuthentication no

# Prevent direct root login via SSH
PermitRootLogin no

# Change the default SSH port to reduce automated scan noise
Port 2222

# Limit authentication attempts
MaxAuthTries 3

# Disable unused authentication methods
ChallengeResponseAuthentication no
X11Forwarding no
AllowTcpForwarding no

# Restrict SSH access to specific users
AllowUsers yourusername

# Set idle session timeout (seconds)
ClientAliveInterval 300
ClientAliveCountMax 2

第 4 步:重启 SSH 服务

sudo systemctl restart sshd

> 重要:在关闭当前会话之前,打开第二个终端并验证您可以使用新配置进行连接。将自己锁定在自己的服务器之外是一个常见且可以避免的错误。

3. 配置防火墙

正确配置的防火墙是防止未授权网络访问的第一道防线。它强制执行严格的允许列表——只有明确允许的流量才能到达您的服务器。

UFW (Uncomplicated Firewall) — Ubuntu / Debian

# Set default policies
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Allow essential services
sudo ufw allow 2222/tcp    # SSH on custom port
sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS

# Enable the firewall
sudo ufw enable

# Verify rules
sudo ufw status verbose

firewalld — CentOS / RHEL / AlmaLinux

sudo systemctl enable --now firewalld

# Allow services
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Reload to apply
sudo firewall-cmd --reload

高级选项:iptables / nftables

对于精细控制,经验丰富的管理员可以直接使用 iptables 或现代 nftables 框架。这些工具允许速率限制、连接状态跟踪和超越 UFW 功能的复杂规则链。

4. 部署入侵防护和完整性监控工具

被动安全是不够的。您需要能够主动检测和响应可疑行为的工具。

Fail2Ban — 自动化暴力破解防护

Fail2Ban 监控日志文件,并自动禁止表现出恶意模式的 IP 地址(例如,重复失败的 SSH 登录尝试)。

sudo apt install fail2ban -y   # Debian/Ubuntu
sudo dnf install fail2ban -y   # CentOS/RHEL

创建本地监狱配置以避免在更新期间覆盖默认设置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

推荐的 SSH 监狱设置:

[sshd]
enabled = true
port    = 2222
maxretry = 5
bantime  = 3600
findtime = 600
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

文件完整性监控

  • AIDE(高级入侵检测环境):创建文件系统的加密基线,并在发生未授权更改时向您发出警报。
  • OSSEC / Wazuh:开源基于主机的入侵检测系统 (HIDS),具有日志分析、rootkit 检测和主动响应功能。
sudo apt install aide -y
sudo aideinit
sudo aide --check

5. 禁用和删除不必要的服务

每个运行的服务都是一个潜在的攻击面。您不使用的服务不应该运行——句号。

列出所有活跃的服务:

sudo systemctl list-units --type=service --state=active

禁用和停止服务:

sudo systemctl disable service_name
sudo systemctl stop service_name

完全删除未使用的软件包:

sudo apt purge package_name -y
sudo apt autoremove -y

最小化服务器上的常见删除候选项:telnetrshfingertalkavahi-daemoncups(打印),以及生产环境中不需要的任何开发工具。

6. 强制实施强身份验证策略

密码仍然是许多服务的关键身份验证因素。弱密码或重复使用的密码很容易被破解。

通过 PAM 强制密码复杂性

编辑 /etc/security/pwquality.conf:

minlen = 14
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
maxrepeat = 3

为 SSH 启用双因素身份验证 (2FA)

使用 google-authenticator(也适用于任何 TOTP 应用,如 Authy 或 Aegis):

sudo apt install libpam-google-authenticator -y
google-authenticator

编辑 /etc/pam.d/sshd 以添加:

auth required pam_google_authenticator.so

更新 /etc/ssh/sshd_config

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
sudo systemctl restart sshd

7. 监控日志和系统活动

日志是您的取证线索。定期审查日志使您能够在入侵尝试、配置错误和异常行为升级之前检测到它们。

必要的日志文件

# Authentication events (logins, sudo usage, SSH attempts)
sudo tail -f /var/log/auth.log          # Debian/Ubuntu
sudo tail -f /var/log/secure            # CentOS/RHEL

# General system messages
sudo tail -f /var/log/syslog

# Kernel messages
sudo dmesg | tail -50

高级日志管理和监控

工具用途
Logwatch通过电子邮件发送每日日志摘要报告
GoAccess实时网络服务器日志分析
Prometheus + Grafana指标收集和可视化仪表板
WazuhSIEM 级日志关联和威胁检测
Auditd内核级系统调用审计

设置集中式日志转发(例如,到 ELK 堆栈或远程 syslog 服务器),以便即使主服务器被入侵,日志仍然可以访问。

8. 保护Web应用程序和数据库

如果您的服务器托管Web应用程序或数据库,这些组件需要自己的加固层。

Web服务器加固(Nginx / Apache)

隐藏版本信息以防止指纹识别:

*Nginx — /etc/nginx/nginx.conf:*

server_tokens off;

*Apache — /etc/apache2/conf-enabled/security.conf:*

ServerTokens Prod
ServerSignature Off

使用来自Let’s Encrypt的免费SSL证书在任何地方强制使用HTTPS

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

将安全标头添加到您的Web服务器配置:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Referrer-Policy "strict-origin-when-cross-origin";

数据库加固(MySQL / MariaDB / PostgreSQL)

# Run the MySQL secure installation wizard
sudo mysql_secure_installation

关键加固步骤:

  • 绑定到localhost,除非明确需要远程访问:在/etc/mysql/mysql.conf.d/mysqld.cnf中设置bind-address = 127.0.0.1
  • 删除匿名用户和测试数据库
  • 使用具有最小权限的专用数据库用户——切勿使用root账户连接应用程序
  • 使用数据库原生加密功能对静态敏感数据进行加密

9. 实施定期自动备份

安全加固可以降低风险——但不能完全消除风险。硬件故障、零日漏洞和人为错误仍然可能导致数据丢失。可靠的备份策略是您的最终安全网。

rsync — 增量文件同步

# Sync local directory to backup location
rsync -avz --delete /var/www/html/ /backup/www/

# Sync to a remote backup server
rsync -avz -e ssh /var/www/html/ backupuser@backup_server:/backup/www/

tar — 压缩存档

# Create a timestamped compressed archive
tar -czvf /backup/site-$(date +%Y%m%d).tar.gz /var/www/html/

# Verify archive integrity
tar -tzvf /backup/site-$(date +%Y%m%d).tar.gz

使用 Cron 自动化

crontab -e
# Daily backup at 2:00 AM
0 2 * * * rsync -avz /var/www/html/ /backup/www/ >> /var/log/backup.log 2>&1

# Weekly full archive on Sunday at 3:00 AM
0 3 * * 0 tar -czvf /backup/full-$(date +%Y%m%d).tar.gz /var/www/ >> /var/log/backup.log 2>&1

备份最佳实践:

  • 遵循 3-2-1 规则:3 份副本,存储在 2 种不同的媒体类型上,其中 1 份在异地
  • 定期测试您的恢复过程——未测试的备份不是备份
  • 使用 GPG 或类似工具加密包含敏感数据的备份
  • 将备份存储在单独的服务器或存储服务上,而不是在同一台机器上

10. 应用最小权限原则

每个用户、进程和应用程序应该只能访问它绝对需要的资源——不能更多。这个原则限制了任何成功入侵的影响范围。

文件和目录权限

# Set ownership
sudo chown -R www-data:www-data /var/www/html/

# Set appropriate permissions
sudo chmod -R 755 /var/www/html/
sudo chmod -R 644 /var/www/html/*.html

# Find world-writable files (potential security risk)
find / -perm -0002 -type f 2>/dev/null

# Find SUID/SGID binaries (review carefully)
find / -perm /6000 -type f 2>/dev/null

用户账户管理

# List all users with login shells
grep -v nologin /etc/passwd

# Lock unused accounts
sudo usermod -L username

# Restrict sudo access — edit with visudo
sudo visudo

只向真正需要 sudo 访问权限的用户授予权限。使用基于组的 sudo 规则,而不是无限制的 ALL=(ALL) ALL 条目。

以非 Root 用户身份运行应用程序

永远不要以 root 身份运行 Web 服务器、数据库或应用程序进程。创建专用服务账户:

sudo useradd --system --no-create-home --shell /bin/false appuser
sudo chown -R appuser:appuser /opt/myapp/

奖励:值得实施的额外加固措施

措施描述
禁用 IPv6(如果未使用)如果不需要 IPv6,可减少攻击面
通过 sysctl 进行内核加固禁用 IP 转发,启用 SYN cookies,限制核心转储
AppArmor / SELinux强制访问控制框架,限制进程行为
ClamAV用于扫描上传文件和电子邮件附件的开源防病毒软件
LynisLinux 系统的综合安全审计工具
rkhunter / chkrootkitRootkit 检测扫描程序
网络分段使用 VLAN 或单独的网络接口隔离服务

通过 /etc/sysctl.conf 快速进行内核加固:

# Disable IP forwarding
net.ipv4.ip_forward = 0

# Enable SYN flood protection
net.ipv4.tcp_syncookies = 1

# Disable ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# Ignore broadcast pings
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Restrict kernel pointer exposure
kernel.kptr_restrict = 2

# Restrict dmesg access
kernel.dmesg_restrict = 1

立即应用更改:

sudo sysctl -p

为安全服务器选择正确的托管基础

您的安全态势始于基础设施级别。提供完整root访问权限、清洁网络基础设施和可靠正常运行时间的托管提供商是有效加固的前提条件。

AlexHost的VPS托管计划提供完整root访问权限、SSD支持的性能和灵活的操作系统选择——让您完全控制来实施本指南中的每项加固技术。对于高流量或资源密集型工作负载,专用服务器提供隔离的硬件,没有嘈杂的邻居,性能最大化。

如果您更喜欢托管控制面板环境,带cPanel的VPS简化了服务器管理,同时保留了应用安全配置的能力。如果您的服务器托管网站或Web应用程序,将其与受信任的SSL证书配对,可确保所有传输中的数据都被加密——这是任何生产部署的不可协商的基线。

结论:安全是一个过程,而不是一次性事件

保护 Linux 服务器不是一项完成后就可以遗忘的任务。这是一项持续的纪律,需要定期关注、主动监控,以及在威胁形势演变时适应的意愿。

以下是你的加固检查清单概览:

  • ✅ 定期应用系统更新并自动化安全补丁
  • ✅ 加固 SSH:基于密钥的身份验证、禁用 root 登录、更改默认端口
  • ✅ 配置防火墙,采用默认拒绝策略
  • ✅ 部署 Fail2Ban 和文件完整性监控
  • ✅ 禁用所有不必要的服务和软件包
  • ✅ 强制使用强密码并启用 2FA
  • ✅ 监控日志并为异常活动设置告警
  • ✅ 保护 Web 服务器、应用程序和数据库
  • ✅ 自动化和测试备份,遵循 3-2-1 规则
  • ✅ 在用户、文件和进程中应用最小权限原则

从影响最大的项目开始——SSH 加固、防火墙配置和更新——然后系统地完成其余部分。你添加的每一层都会使你的服务器呈指数级地更难被攻击。

你的基础设施只有在其最薄弱的配置处才能坚强。立即将其锁定。