Linux 服务器安全加固完整指南:从入门到精通
发布时间:2026 年 2 月 19 日 | 阅读时间:约 15 分钟
1. 引言:为什么服务器安全至关重要
在数字化时代,服务器安全不再是可选项,而是必选项。根据 Verizon 2025 年数据泄露调查报告,超过 80% 的数据泄露都与配置错误或弱密码有关。本指南将带你从零开始,全面加固你的 Linux 服务器。
⚠️ 重要提示:在执行任何安全配置前,请确保你有服务器的物理访问权限或控制台访问权限,以防配置错误导致无法远程连接。
2. SSH 安全加固
SSH 是服务器最常见的攻击入口。让我们逐步加固它。
2.1 修改 SSH 配置文件
# 备份原始配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# 编辑配置文件
sudo nano /etc/ssh/sshd_config
2.2 关键安全配置项
# /etc/ssh/sshd_config
# 1. 修改默认端口(避免自动化扫描)
Port 2244
# 2. 禁用 root 直接登录
PermitRootLogin no
# 3. 只允许密钥认证
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
# 4. 限制用户和组
AllowUsers yourusername admin
AllowGroups sshusers
# 5. 设置登录尝试限制
MaxAuthTries 3
MaxSessions 2
# 6. 启用空闲超时
ClientAliveInterval 300
ClientAliveCountMax 2
# 7. 禁用 X11 转发(如不需要)
X11Forwarding no
# 8. 限制协议版本
Protocol 2
2.3 生成 SSH 密钥对
# 在本地生成 Ed25519 密钥(比 RSA 更安全)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或使用 RSA 4096 位
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 复制公钥到服务器
ssh-copy-id -p 2244 yourusername@your-server-ip
2.4 重启 SSH 服务
# Ubuntu/Debian
sudo systemctl restart sshd
# CentOS/RHEL
sudo systemctl restart sshd
# 验证配置
sudo sshd -t
3. 防火墙配置(UFW 和 firewalld)
3.1 Ubuntu/Debian - 使用 UFW
# 安装 UFW(如果未安装)
sudo apt update && sudo apt install ufw
# 重置并设置默认策略
sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 SSH(使用自定义端口)
sudo ufw allow 2244/tcp comment 'SSH'
# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# 允许特定 IP(如办公室 IP)
sudo ufw allow from 192.168.1.0/24 to any port 2244
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status verbose
sudo ufw status numbered
3.2 CentOS/RHEL - 使用 firewalld
# 启动 firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 设置默认区域
sudo firewall-cmd --set-default-zone=drop
# 添加服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 添加自定义端口
sudo firewall-cmd --permanent --add-port=2244/tcp
# 添加 IP 白名单
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="2244" protocol="tcp" accept'
# 重新加载配置
sudo firewall-cmd --reload
# 查看配置
sudo firewall-cmd --list-all
4. Fail2Ban 防暴力破解
4.1 安装 Fail2Ban
# Ubuntu/Debian
sudo apt install fail2ban
# CentOS/RHEL
sudo yum install fail2ban
# 或
sudo dnf install fail2ban
4.2 配置 Fail2Ban
# 创建本地配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
4.3 关键配置项
# /etc/fail2ban/jail.local
[DEFAULT]
# 忽略的 IP(白名单)
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# 封禁时间(秒)
bantime = 3600
# 查找时间窗口(秒)
findtime = 600
# 最大尝试次数
maxretry = 3
# 封禁动作
banaction = ufw
# 邮件通知
destemail = admin@example.com
sender = fail2ban@example.com
mta = sendmail
[sshd]
enabled = true
port = 2244
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
4.4 启动和管理
# 启动服务
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
# 查看状态
sudo systemctl status fail2ban
# 查看封禁的 IP
sudo fail2ban-client status sshd
# 解封 IP
sudo fail2ban-client set sshd unbanip 1.2.3.4
# 查看日志
sudo tail -f /var/log/fail2ban.log
5. 用户权限管理
5.1 创建新用户
# 创建用户并设置家目录
sudo useradd -m -s /bin/bash newuser
# 设置密码
sudo passwd newuser
# 设置密码过期策略
sudo chage -M 90 -m 7 -W 14 newuser
# -M: 密码最大有效期 90 天
# -m: 密码最小修改间隔 7 天
# -W: 过期前 14 天警告
5.2 删除或禁用账户
# 锁定账户(不删除)
sudo usermod -L newuser
# 解锁账户
sudo usermod -U newuser
# 删除用户及其家目录
sudo userdel -r newuser
5.3 检查空密码账户
# 查找空密码账户
sudo awk -F: '($2 == "") {print $1}' /etc/shadow
# 查找无密码且可登录的账户
sudo grep -E '^[^:]+:[!*]:' /etc/shadow
6. Sudo 权限精细化配置
6.1 编辑 sudoers 文件
# 永远使用 visudo 编辑
sudo visudo
6.2 最佳实践配置
# /etc/sudoers
# 设置密码超时(15 分钟)
Defaults timestamp_timeout=15
# 记录所有 sudo 命令
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output
Defaults iolog_dir="/var/log/sudo-io"
# 需要密码的 sudo
Defaults requiretty
# 为特定用户授予特定权限
# 允许 deploy 用户重启 nginx,无需密码
deploy ALL=(ALL) NOPASSWD: /usr/sbin/service nginx restart, /usr/sbin/service nginx reload
# 允许 admin 组完全访问
%admin ALL=(ALL:ALL) ALL
# 禁止某些危险命令
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep -= "PASSWORD"
6.3 查看 sudo 日志
# 查看 sudo 使用记录
sudo grep sudo /var/log/auth.log
# 查看详细的 sudo 会话
sudo cat /var/log/sudo.log
7. 内核参数优化
7.1 编辑 sysctl.conf
# 备份并编辑
sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup
sudo nano /etc/sysctl.conf
7.2 安全内核参数
# /etc/sysctl.conf
# === 网络安全性 ===
# 禁用 IP 转发(除非是路由器)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 忽略 ICMP 广播
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 禁止 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 记录可疑包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 启用 SYN Cookie 防护
net.ipv4.tcp_syncookies = 1
# 限制 SYN 包重试
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
# === 内存保护 ===
# 禁用魔术 SysRq 键
kernel.sysrq = 0
# 核心转储限制
fs.suid_dumpable = 0
# 限制核心转储大小
kernel.core_pattern = |/bin/false
# 随机化虚拟地址空间
kernel.randomize_va_space = 2
# === 文件访问 ===
# 限制核心文件权限
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
7.3 应用配置
# 应用所有配置
sudo sysctl -p
# 验证单个参数
sudo sysctl net.ipv4.tcp_syncookies
8. 审计与日志监控
8.1 配置 rsyslog
# 编辑 rsyslog 配置
sudo nano /etc/rsyslog.conf
# 添加远程日志服务器(可选)
*.* @logs.example.com:514
8.2 使用 auditd 进行系统审计
# 安装 auditd
sudo apt install auditd audispd-plugins
# 或
sudo yum install audit audit-libs
# 启动服务
sudo systemctl start auditd
sudo systemctl enable auditd
8.3 配置审计规则
# 监控敏感文件
sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/shadow -p wa -k identity
sudo auditctl -w /etc/sudoers -p wa -k sudoers
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd
# 监控系统调用
sudo auditctl -a exit,always -F arch=b64 -S execve -k exec_monitor
# 查看规则
sudo auditctl -l
# 持久化规则
sudo nano /etc/audit/rules.d/audit.rules
8.4 查询审计日志
# 搜索特定密钥
sudo ausearch -k identity
# 搜索特定文件
sudo ausearch -f /etc/passwd
# 搜索最近 1 小时的执行记录
sudo ausearch -k exec_monitor -ts recent
# 生成报告
sudo aureport --all
9. 自动安全更新
9.1 Ubuntu/Debian - unattended-upgrades
# 安装
sudo apt install unattended-upgrades apt-listchanges
# 配置
sudo dpkg-reconfigure --priority=low unattended-upgrades
# 编辑配置
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
// /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Mail "admin@example.com";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
9.2 CentOS/RHEL - yum-cron
# 安装
sudo yum install yum-cron
# 或
sudo dnf install dnf-automatic
# 编辑配置
sudo nano /etc/yum/yum-cron.conf
# /etc/yum/yum-cron.conf
[commands]
update_cmd = security
update_messages = yes
download_updates = yes
apply_updates = yes
[emails]
email_from = root@localhost
email_to = admin@example.com
[security]
security_type = security
# 启动服务
sudo systemctl start yum-cron
sudo systemctl enable yum-cron
10. 备份策略与灾难恢复
10.1 使用 rsync 进行本地备份
#!/bin/bash
# backup.sh
BACKUP_DIR="/backup"
SOURCE_DIR="/"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup.log"
# 排除目录
EXCLUDES=(
--exclude=/proc
--exclude=/sys
--exclude=/tmp
--exclude=/dev
--exclude=/backup
--exclude=/lost+found
)
# 执行备份
rsync -avz --delete "${EXCLUDES[@]}" $SOURCE_DIR $BACKUP_DIR/$DATE >> $LOG_FILE 2>&1
# 保留最近 7 天的备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
echo "Backup completed: $DATE" >> $LOG_FILE
10.2 使用 rclone 进行云备份
# 安装 rclone
curl https://rclone.org/install.sh | sudo bash
# 配置远程存储
rclone config
# 备份到云存储
rclone sync /backup remote:backup-bucket --progress
# 加密备份
rclone sync /backup remote:backup-bucket --crypt-remote=encrypted
10.3 创建系统快照
# 使用 timeshift(类似系统还原点)
sudo apt install timeshift
# 创建快照
sudo timeshift --create --comments "Pre-security-update"
# 列出快照
sudo timeshift --list
# 恢复快照
sudo timeshift --restore --snapshot '2026-02-19_09-00-00'
11. 安全扫描工具
11.1 Lynis 安全审计
# 安装
sudo apt install lynis
# 或
sudo yum install lynis
# 运行系统审计
sudo lynis audit system
# 查看报告
cat /var/log/lynis.log
cat /var/log/lynis-report.dat
11.2 Rootkit 检测
# 安装 chkrootkit
sudo apt install chkrootkit
sudo chkrootkit
# 安装 rkhunter
sudo apt install rkhunter
sudo rkhunter --check
sudo rkhunter --update
11.3 文件完整性监控
# 使用 AIDE
sudo apt install aide
sudo aideinit
# 更新数据库
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# 检查文件变化
sudo aide --check
12. 总结与检查清单
安全加固检查清单
✅ SSH 安全
- [ ] 修改默认端口
- [ ] 禁用 root 登录
- [ ] 启用密钥认证
- [ ] 禁用密码认证
- [ ] 配置空闲超时
✅ 防火墙
- [ ] 配置默认拒绝策略
- [ ] 只开放必要端口
- [ ] 设置 IP 白名单
✅ 入侵防护
- [ ] 安装并配置 Fail2Ban
- [ ] 设置合理的封禁时间
- [ ] 配置邮件通知
✅ 用户管理
- [ ] 删除不需要的用户
- [ ] 设置密码策略
- [ ] 配置 sudo 权限
✅ 系统加固
- [ ] 配置内核参数
- [ ] 启用审计日志
- [ ] 配置自动更新
✅ 备份与监控
- [ ] 配置定期备份
- [ ] 设置远程日志
- [ ] 运行安全扫描
定期维护任务
| 频率 | 任务 |
|---|---|
| 每日 | 检查日志、监控告警 |
| 每周 | 审查用户账户、检查失败登录 |
| 每月 | 运行安全扫描、更新系统 |
| 每季度 | 审查防火墙规则、测试备份恢复 |
| 每年 | 全面安全审计、更新安全策略 |
文章评论