sudo-iのBlog

  • 🍟首页
  • 🍊目录
    • 技术分享
    • vps教程
    • 软件分享
    • 干货分享
  • 🍎链接
  • 🍓工具
    • 🌽IP路由追踪
    • 域名被墙检测
    • KMS激活
    • 域名whois查询
  • 🍕联系
  • 🍌登录
Sudo-i
关注互联网,生活,音乐,乐此不疲
  1. 首页
  2. 干货分享
  3. 正文

Linux 服务器安全加固完整指南:从入门到精通

19 2 月, 2026 47点热度 0人点赞 0条评论

Linux 服务器安全加固完整指南:从入门到精通

发布时间:2026 年 2 月 19 日 | 阅读时间:约 15 分钟

目录

  1. 引言:为什么服务器安全至关重要
  2. SSH 安全加固
  3. 防火墙配置(UFW 和 firewalld)
  4. Fail2Ban 防暴力破解
  5. 用户权限管理
  6. Sudo 权限精细化配置
  7. 内核参数优化
  8. 审计与日志监控
  9. 自动安全更新
  10. 备份策略与灾难恢复
  11. 安全扫描工具
  12. 总结与检查清单

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 权限

✅ 系统加固

  • [ ] 配置内核参数
  • [ ] 启用审计日志
  • [ ] 配置自动更新

✅ 备份与监控

  • [ ] 配置定期备份
  • [ ] 设置远程日志
  • [ ] 运行安全扫描

定期维护任务

频率 任务
每日 检查日志、监控告警
每周 审查用户账户、检查失败登录
每月 运行安全扫描、更新系统
每季度 审查防火墙规则、测试备份恢复
每年 全面安全审计、更新安全策略

🎯 结语

服务器安全是一个持续的过程,而不是一次性的任务。通过实施本指南中的措施,你已经大大降低了服务器被攻击的风险。记住:

  1. 最小权限原则 - 只授予必要的权限
  2. 纵深防御 - 多层安全措施
  3. 持续监控 - 及时发现异常
  4. 定期更新 - 修补已知漏洞

安全无小事,祝你运维顺利!

无关联文章

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:19 2 月, 2026

李炫炫

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2025 sudo-iのBlog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2024054662号

鲁公网安备37108102000450号