Linux 服务器安全加固完全指南

Linux 服务器安全加固完全指南

Someone Lv5

本文以 Ubuntu 22.04/24.04 LTS 和 CentOS 7/8/Stream 为例,系统性地介绍 Linux 服务器安全加固的各个环节,覆盖从初始配置到持续监控的完整安全实践。

一、引言

随着网络安全威胁日益增多,Linux 服务器的安全加固已成为运维工作的重中之重。无论是部署在云上的生产环境,还是本地的实验服务器,都应遵循”最小权限、纵深防御”的原则进行安全配置。

二、初始系统配置

2.1 系统更新

第一时间确保系统所有软件包处于最新版本:

1
2
3
4
5
6
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

# CentOS/RHEL
sudo yum update -y # CentOS 7
sudo dnf upgrade -y # CentOS 8/9, RHEL 8/9

2.2 创建普通用户并禁用 root 直接登录

1
2
3
4
5
6
7
8
9
# 创建新用户
sudo adduser xinyu
sudo usermod -aG sudo xinyu # Ubuntu 赋予 sudo 权限
sudo usermod -aG wheel xinyu # CentOS 赋予 sudo 权限

# 验证 sudo 权限
su - xinyu
sudo whoami
# 应输出: root

三、SSH 安全加固

SSH 是服务器最常暴露的服务,也是最容易受到攻击的入口。

3.1 修改默认端口

将 SSH 端口从默认的 22 改为高位端口,减少自动化扫描攻击。

1
2
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config

3.2 禁用 root 登录和密码认证

1
2
3
4
5
6
7
8
9
10
11
12
# 编辑 /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config

# 确认以下配置
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

3.3 配置 SSH 密钥登录

1
2
3
4
5
# 在本地机器生成密钥(不要使用密码短语以方便自动化,生产环境建议使用)
ssh-keygen -t ed25519 -C "xinyu@server"

# 将公钥复制到服务器
ssh-copy-id -p 2222 xinyu@your-server-ip

3.4 配置 AllowUsers 白名单

1
2
# 在 /etc/ssh/sshd_config 末尾添加
AllowUsers xinyu

修改完成后重启 SSH 服务:

1
2
sudo systemctl restart sshd   # Ubuntu
sudo systemctl restart sshd # CentOS

重要:在断开当前连接前,务必另开一个终端验证新配置是否工作正常!

四、防火墙配置

4.1 ufw(Ubuntu 推荐)

1
2
3
4
5
6
7
8
9
10
11
12
# 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 开放必要端口
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

# 启用防火墙
sudo ufw enable
sudo ufw status verbose

4.2 firewalld(CentOS/RHEL 推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装并启动
sudo yum install firewalld -y
sudo systemctl enable --now firewalld

# 配置规则
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --remove-service=ssh

# 应用配置
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
场景推荐工具说明
Ubuntu 个人/轻量服务器ufw配置简单,上手快
CentOS/RHEL 企业服务器firewalld支持区域策略和丰富的网络环境
Docker 宿主机iptables + Docker 网络策略需额外配置 Docker 与防火墙协同
云服务器(云防火墙)云厂商安全组服务器内可配合 iptables 做二次加固

五、Fail2Ban 入侵防御

Fail2Ban 能自动分析日志并将恶意 IP 加入防火墙黑名单。

5.1 安装与基本配置

1
2
3
4
5
6
7
8
9
# Ubuntu
sudo apt install fail2ban -y

# CentOS
sudo yum install epel-release -y
sudo yum install fail2ban -y

# 创建本地配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

5.2 配置 SSH 防护

编辑 /etc/fail2ban/jail.local,找到 [sshd] 部分:

1
2
3
4
5
6
7
8
9
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log # Ubuntu
# logpath = /var/log/secure # CentOS
maxretry = 3
bantime = 86400 # 禁止时间:1天
findtime = 600 # 检测窗口:10分钟

5.3 启动服务

1
2
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

六、SELinux / AppArmor

6.1 SElinux(CentOS/RHEL)

检查 SELinux 状态并设置为强制模式:

1
2
3
4
5
6
7
8
# 查看当前状态
getenforce

# 设置为 enforcing(强制模式)
sudo setenforce 1

# 永久修改
sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config

6.2 AppArmor(Ubuntu)

1
2
3
4
5
6
7
8
# 查看状态
sudo aa-status

# 安装额外配置工具
sudo apt install apparmor-utils -y

# 将 profile 设为强制模式
sudo aa-enforce /path/to/profile

七、系统审计与日志

7.1 auditd 审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安装
sudo apt install auditd -y # Ubuntu
sudo yum install audit -y # CentOS

# 启动
sudo systemctl enable --now auditd

# 监控关键文件变更
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 auditctl -w /var/log/auth.log -p wa -k auth_log

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

7.2 日志轮转配置

确保日志不会无限增长导致磁盘满:

1
2
3
4
5
6
7
8
9
10
11
12
sudo vim /etc/logrotate.d/custom

# 添加内容
/var/log/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 root adm
}

八、内核参数优化

编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-security.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 防止 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2

# 禁止 IP 转发(非路由服务器)
net.ipv4.ip_forward = 0

# 禁止 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# 禁止源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# 忽略广播 ping
net.ipv4.icmp_echo_ignore_broadcasts = 1

# 保护时间戳
net.ipv4.tcp_timestamps = 0

# 限制连接追踪
net.netfilter.nf_conntrack_max = 200000
net.netfilter.nf_conntrack_tcp_timeout_established = 432000

应用配置:

1
sudo sysctl -p /etc/sysctl.d/99-security.conf

九、自动安全更新

Ubuntu / Debian

1
2
3
4
5
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

# 查看配置
sudo cat /etc/apt/apt.conf.d/50unattended-upgrades

CentOS / RHEL

1
2
sudo yum install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

十、入侵检测与文件完整性

10.1 AIDE 文件完整性检查

1
2
3
4
5
6
7
8
9
10
11
12
# 安装
sudo apt install aide -y # Ubuntu
sudo yum install aide -y # CentOS

# 初始化数据库
sudo aideinit
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 定期检查(添加到 crontab)
sudo crontab -e
# 添加:每天早上6点检查
0 6 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@example.com

10.2 RKHunter 检测 Rootkit

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt install rkhunter -y    # Ubuntu
sudo yum install rkhunter -y # CentOS

# 更新特征库
sudo rkhunter --update

# 执行扫描
sudo rkhunter --check --skip-keypress

# 添加到系统定时任务
sudo crontab -e
0 3 * * 0 /usr/bin/rkhunter --check --cronjob

十一、安全核查清单

序号检查项状态操作方式
1系统已更新至最新apt update / dnf upgrade
2已创建sudo用户并禁用root登录adduser + PermitRootLogin no
3SSH端口已修改为非默认端口Port 2222
4SSH已禁用密码认证PasswordAuthentication no
5已配置 SSH 密钥登录ssh-keygen + ssh-copy-id
6已启用防火墙ufw enable / firewalld
7已安装并配置 Fail2Banfail2ban-client status
8已配置日志审计(auditd)auditctl 规则
9已启用自动安全更新unattended-upgrades / dnf-automatic
10已配置文件完整性检查(AIDE)aideinit + crontab

十二、附录:快速一键加固脚本

为了方便快速部署基础安全配置,以下是一段 bash 脚本,整合了上述主要步骤(请根据实际情况修改端口和用户名):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
# Linux 服务器快速安全加固脚本
# 适用于 Ubuntu 22.04+ / Debian 12+
# 使用前请修改 USERNAME 和 SSH_PORT 变量

USERNAME="xinyu"
SSH_PORT="2222"

set -e

echo "=== 1. 更新系统 ==="
apt update && apt upgrade -y

echo "=== 2. 创建用户 ==="
adduser --disabled-password --gecos "" $USERNAME
usermod -aG sudo $USERNAME

echo "=== 3. 配置 SSH ==="
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i "s/#Port 22/Port $SSH_PORT/" /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
echo "AllowUsers $USERNAME" >> /etc/ssh/sshd_config
systemctl restart sshd

echo "=== 4. 配置防火墙 ==="
ufw default deny incoming
ufw default allow outgoing
ufw allow $SSH_PORT/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable

echo "=== 5. 安装 Fail2Ban ==="
apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sed -i 's/#ignoreip = 127.0.0.1/ignoreip = 127.0.0.1/' /etc/fail2ban/jail.local
systemctl enable --now fail2ban

echo "=== 6. 安装审计 ==="
apt install auditd aide rkhunter -y
systemctl enable --now auditd

echo "=== 7. 自动安全更新 ==="
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

echo "=== 8. 内核参数 ==="
cat >> /etc/sysctl.d/99-security.conf << 'EOF'
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
EOF
sysctl -p /etc/sysctl.d/99-security.conf

echo ""
echo "=========================================="
echo " 基础安全加固完成!"
echo " 请手动将所有公钥添加到 ~$USERNAME/.ssh/authorized_keys"
echo " 推荐立即重启服务器:sudo reboot"
echo "=========================================="

总结

Linux 服务器安全加固不是一次性工作,而是一个持续的过程。本文介绍的实践涵盖了从初始安全配置到持续监控的主要环节。核心原则是:

  1. 最小权限 — 每个服务、每个用户只获得完成任务所需的最小权限
  2. 纵深防御 — 不依赖单一安全措施,构建多层次防护
  3. 持续监控 — 部署日志审计和入侵检测,及时发现异常
  4. 及时更新 — 保持系统和软件包处于最新版本,修补已知漏洞

安全没有终点,只有持续的努力和关注。建议每季度至少进行一次安全审计,对照本文的核查清单逐项检查。


本文由AI辅助生成,内容仅供参考

  • 标题: Linux 服务器安全加固完全指南
  • 作者: Someone
  • 创建于 : 2026-06-07 12:25:00
  • 更新于 : 2026-06-18 08:39:57
  • 链接: https://demo-blog.qusite.cn/2026-06-07-linux-security-hardening/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。