最后更新于:2026年7月

Ubuntu 24.04 安全加固
Ubuntu 24.04 LTS 服务器安全加固:15分钟从裸奔到堡垒

你的 Ubuntu 服务器还在用密码登录 SSH 吗? 一台刚装好的 Ubuntu 24.04 服务器,如果不做任何加固,上线 24 小时内平均会收到 8000+ 次 SSH 暴力破解尝试。这不是危言耸听——用 journalctl -u ssh --since "24 hours ago" | grep "Failed" | wc -l 看看你就知道了。

Ubuntu 24.04 LTS(Noble Numbat)带来了不少安全方面的改进,但默认配置仍然偏重"易用性"而非"安全性"。本文是一份可执行的加固清单——15 分钟,从头到尾跟着做,把你的服务器从"裸奔"变成"堡垒"。

【与通用 VPS 加固的区别】 本文专门针对 Ubuntu 24.04 LTS 的特有功能(如 AppArmor 增强、unattended-upgrades 新配置、systemd-resolved 安全选项等),是 VPS 安全加固通用指南 的 Ubuntu 专属补充。


一、加固前的准备:基线检查

1.1 确认系统版本

BASH
lsb_release -a
# 确认输出包含 Ubuntu 24.04 LTS

uname -r
# 确认内核版本 6.8+

1.2 创建非 root 管理用户

永远不要用 root 直接操作。 创建一个有 sudo 权限的普通用户:

BASH
# 创建新用户(替换 yourname)
adduser yourname

# 赋予 sudo 权限
usermod -aG sudo yourname

# 切换到新用户测试
su - yourname
sudo whoami
# 输出 root 说明 sudo 权限正常

1.3 更新系统到最新

BASH
apt update && apt upgrade -y
apt autoremove -y

二、SSH 安全加固(最重要)

SSH 是服务器的大门,也是攻击者最常尝试的入口。

2.1 配置 SSH 密钥登录

在你的本地电脑(不是服务器)生成密钥对:

BASH
# 本地执行
ssh-keygen -t ed25519 -C "your_email@example.com"
# ed25519 比 RSA 更短更快更安全

上传公钥到服务器:

BASH
# 本地执行
ssh-copy-id -i ~/.ssh/id_ed25519.pub yourname@服务器IP

测试密钥登录(不断开当前连接,另开一个终端):

BASH
ssh yourname@服务器IP
# 如果不需要输密码就能登录,说明密钥配置成功

2.2 禁用密码登录和 root 登录

确认密钥登录正常后,修改 SSH 配置:

BASH
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

修改以下配置项:

BASH
# 禁用 root 登录
PermitRootLogin no

# 禁用密码登录
PasswordAuthentication no

# 禁用空密码
PermitEmptyPasswords no

# 限制最大认证尝试次数
MaxAuthTries 3

# 登录超时时间(秒)
LoginGraceTime 30

# 空闲超时自动断开(秒)
ClientAliveInterval 300
ClientAliveCountMax 2

# 禁用 X11 转发(如不需要)
X11Forwarding no

# 只允许指定用户登录
AllowUsers yourname

Ubuntu 24.04 还有一个额外的配置文件可能覆盖设置:

BASH
# 检查并修改 override 文件
sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf
# 确保里面没有 PasswordAuthentication yes

重启 SSH 服务:

BASH
sudo systemctl restart ssh

⚠️ 重要! 修改 SSH 配置前,保持当前连接不断开,另开一个终端测试新配置。如果新连接进不去,还能用旧连接改回来。

2.3 修改 SSH 默认端口(可选但推荐)

改掉默认的 22 端口可以挡掉 99% 的自动扫描:

BASH
sudo nano /etc/ssh/sshd_config
# 修改
Port 22222  # 换成一个高位端口(1024-65535)

先在防火墙放行新端口:

BASH
sudo ufw allow 22222/tcp

然后重启 SSH:

BASH
sudo systemctl restart ssh

之后连接时指定端口:

BASH
ssh -p 22222 yourname@服务器IP

2.4 SSH 配置速查表

配置项 推荐值 作用
PermitRootLogin no 禁止 root 直接登录
PasswordAuthentication no 禁止密码登录
Port 22222 等高位端口 避免自动扫描
MaxAuthTries 3 限制尝试次数
ClientAliveInterval 300 空闲 5 分钟断开
AllowUsers yourname 白名单用户

三、UFW 防火墙配置

Ubuntu 24.04 默认安装了 UFW(Uncomplicated Firewall),但可能没有启用。

3.1 基础配置

BASH
# 设置默认策略:拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 放行 SSH(如果你改了端口,用新端口)
sudo ufw allow 22222/tcp comment 'SSH'

# 放行 HTTP/HTTPS(如果是 Web 服务器)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'

# 启用防火墙
sudo ufw enable

# 查看状态
sudo ufw status verbose

3.2 限制连接频率

UFW 支持限速功能,防止暴力扫描:

BASH
# 限制 SSH:每个 IP 每 30 秒最多 6 次连接
sudo ufw limit 22222/tcp

# 限制其他敏感端口
sudo ufw limit 443/tcp

3.3 按来源 IP 限制(更安全)

如果你有固定 IP,可以只允许自己的 IP 访问 SSH:

BASH
# 只允许指定 IP 访问 SSH
sudo ufw allow from 你的IP to any port 22222 proto tcp

# 删除之前的开放规则
sudo ufw delete allow 22222/tcp

3.4 常用服务端口放行参考

服务 端口 协议 UFW 命令
SSH 22222 TCP ufw allow 22222/tcp
HTTP 80 TCP ufw allow 80/tcp
HTTPS 443 TCP ufw allow 443/tcp
DNS 53 TCP+UDP ufw allow 53
TUIC/Hysteria2 自定义 UDP ufw allow 端口/udp
WireGuard 51820 UDP ufw allow 51820/udp
V2Ray/Clash 自定义 TCP ufw allow 端口/tcp

原则:只开放需要的端口,用完即关。不确定的端口不要开。


四、Fail2ban:自动封禁恶意 IP

4.1 安装与配置

BASH
sudo apt install fail2ban -y

Fail2ban 的配置不要直接改 jail.conf,而是创建本地配置:

BASH
sudo nano /etc/fail2ban/jail.local
INI
[DEFAULT]
# 封禁时间(秒),1小时
bantime = 3600
# 检测时间窗口(秒),10分钟
findtime = 600
# 最大失败次数
maxretry = 3
# 封禁动作
banaction = ufw

# 忽略本地 IP
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/16 10.0.0.0/8

[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400  # SSH 封禁 24 小时

启动服务:

BASH
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

4.2 查看封禁状态

BASH
# 查看所有 jail 状态
sudo fail2ban-client status

# 查看 SSH 详细状态
sudo fail2ban-client status sshd

# 手动解封某个 IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

# 手动封禁某个 IP
sudo fail2ban-client set sshd banip 1.2.3.4

4.3 进阶:递增封禁时间

对屡教不改的 IP,可以配置递增封禁:

INI
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 604800  # 最长封禁 7 天

这样第一次封 1 小时,第二次封 2 小时,第三次封 4 小时…递增翻倍。


五、自动安全更新

Ubuntu 24.04 默认安装了 unattended-upgrades,但需要确认配置。

5.1 检查并启用

BASH
sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure -plow unattended-upgrades
# 选择 Yes

5.2 配置更新策略

BASH
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

确认以下配置:

BASH
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};

// 自动重启(如果更新需要)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

// 自动清理旧内核
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

5.3 测试自动更新

BASH
# 模拟运行(不会真的更新)
sudo unattended-upgrade --dry-run -v

# 手动触发一次
sudo unattended-upgrade -v

建议: 安全更新自动安装,但大版本升级(如 24.04 → 26.04)一定要手动操作。


六、AppArmor 强制访问控制

Ubuntu 24.04 默认启用 AppArmor,但很多人不知道怎么用。

6.1 检查 AppArmor 状态

BASH
sudo apparmor_status

输出应该显示 apparmor module is loaded 和多个已加载的 profile。

6.2 为自定义服务创建 AppArmor Profile

以保护一个自定义服务为例:

BASH
# 生成 profile 模板
sudo aa-genprof /usr/local/bin/your-service

AppArmor 会进入交互模式,根据提示选择允许的操作。

6.3 常用 AppArmor 命令

BASH
# 查看所有 profile
sudo aa-status

# 设置 profile 为投诉模式(只记录不阻止,用于测试)
sudo aa-complain /usr/local/bin/your-service

# 设置为强制模式(阻止违规操作)
sudo aa-enforce /usr/local/bin/your-service

# 查看 AppArmor 日志
sudo dmesg | grep apparmor
sudo journalctl -k | grep apparmor

实用建议: 如果你不确定某个服务的 profile 是否正确,先用 complain 模式运行几天,看日志没有问题后再切到 enforce 模式。


七、入侵检测与日志审计

7.1 安装 AIDE(文件完整性检查)

AIDE(Advanced Intrusion Detection Environment)会监控关键文件是否被篡改。

BASH
sudo apt install aide -y

# 初始化数据库(需要几分钟)
sudo aideinit

# 安装数据库
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 手动检查
sudo aide --check

加入定时任务:

BASH
# 每天凌晨 3 点检查文件完整性
echo "0 3 * * * root /usr/bin/aide --check | mail -s 'AIDE Report' yourname@localhost" | sudo tee /etc/cron.d/aide

7.2 配置日志审计

BASH
sudo apt install auditd -y

# 审计 SSH 配置文件修改
sudo auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_change

# 审计 sudo 使用
sudo auditctl -w /var/log/sudo.log -p wa -k sudo_usage

# 审计用户创建/删除
sudo auditctl -w /etc/passwd -p wa -k user_modify
sudo auditctl -w /etc/group -p wa -k group_modify
sudo auditctl -w /etc/shadow -p wa -k shadow_modify

# 查看审计日志
sudo ausearch -k ssh_config_change
sudo ausearch -k user_modify

让审计规则永久生效:

BASH
sudo nano /etc/audit/rules.d/audit.rules
# 把上面的 auditctl 命令去掉 sudo 和 auditctl,只保留参数部分
# 例如:-w /etc/ssh/sshd_config -p wa -k ssh_config_change

sudo systemctl restart auditd

7.3 关键日志位置速查

日志文件 内容
/var/log/auth.log SSH 登录、sudo 使用、用户创建
/var/log/syslog 系统日志
/var/log/ufw.log 防火墙日志
/var/log/fail2ban.log Fail2ban 封禁记录
/var/log/audit/audit.log 审计日志
/var/log/unattended-upgrades/ 自动更新日志
journalctl -u 服务名 systemd 服务日志

7.4 快速排查命令

BASH
# 查看最近登录成功记录
last -20

# 查看最近登录失败记录
sudo lastb -20

# 查看当前登录用户
who

# 查看可疑的 SUID 文件
sudo find / -perm -4000 -type f 2>/dev/null

# 查看最近修改的文件(24小时内)
sudo find /etc /usr/local/bin /opt -mtime -1 -type f 2>/dev/null

# 查看异常网络连接
sudo ss -tunlp
sudo netstat -anp | grep ESTABLISHED

八、其他加固措施

8.1 禁用不必要的服务

BASH
# 查看所有运行的服务
sudo systemctl list-unit-files --type=service --state=enabled

# 禁用不需要的服务(举例)
sudo systemctl disable --now snapd  # 如果不用 snap
sudo systemctl disable --now apport  # 关闭错误报告
sudo systemctl disable --now modemmanager  # 服务器不需要调制解调器

8.2 内核参数加固

BASH
sudo nano /etc/sysctl.d/99-security.conf
BASH
# 禁用 IP 转发(如果不是路由器)
net.ipv4.ip_forward = 0

# 防 SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

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

# 禁用源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

# 禁用 ping(可选,防探测)
# net.ipv4.icmp_echo_ignore_all = 1

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

# 反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# 记录可疑数据包
net.ipv4.conf.all.log_martians = 1
BASH
sudo sysctl -p /etc/sysctl.d/99-security.conf

8.3 配置时间同步

BASH
# Ubuntu 24.04 默认用 systemd-timesyncd
sudo timedatectl set-ntp true
timedatectl status

时间准确对日志审计和证书验证非常重要。

8.4 安装 Rootkit 检测

BASH
sudo apt install rkhunter chkrootkit -y

# 更新数据库
sudo rkhunter --update
sudo rkhunter --propupd

# 扫描
sudo rkhunter --check
sudo chkrootkit

加入定时任务:

BASH
# 每周扫描一次
echo "0 4 * * 0 root /usr/bin/rkhunter --check --sk --report-warnings-only | mail -s 'Rkhunter Report' yourname@localhost" | sudo tee /etc/cron.d/rkhunter

九、一键加固脚本

把上面的步骤整合成一个脚本,新服务器上线时一键执行:

BASH
#!/bin/bash
# Ubuntu 24.04 安全加固脚本
# 使用方法:sudo bash harden.sh

set -e

# 颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

echo_step() {
    echo -e "${GREEN}[✓]${NC} $1"
}

echo_error() {
    echo -e "${RED}[✗]${NC} $1"
}

# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
    echo_error "请用 sudo 运行此脚本"
    exit 1
fi

# 1. 系统更新
echo "=== 1. 系统更新 ==="
apt update && apt upgrade -y
apt autoremove -y
echo_step "系统已更新"

# 2. 安装安全工具
echo "=== 2. 安装安全工具 ==="
apt install -y fail2ban ufw unattended-upgrades auditd rkhunter
echo_step "安全工具已安装"

# 3. 配置 UFW 防火墙
echo "=== 3. 配置防火墙 ==="
ufw default deny incoming
ufw default allow outgoing
ufw limit 22/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
yes | ufw enable
echo_step "防火墙已启用"

# 4. 配置 Fail2ban
echo "=== 4. 配置 Fail2ban ==="
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
EOF
systemctl enable fail2ban
systemctl restart fail2ban
echo_step "Fail2ban 已配置"

# 5. 内核参数加固
echo "=== 5. 内核参数加固 ==="
cat > /etc/sysctl.d/99-security.conf << 'EOF'
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sysctl -p /etc/sysctl.d/99-security.conf
echo_step "内核参数已加固"

# 6. 配置自动安全更新
echo "=== 6. 配置自动更新 ==="
cat > /etc/apt/apt.conf.d/20auto-upgrades << 'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
EOF
echo_step "自动更新已配置"

# 7. 审计规则
echo "=== 7. 配置审计规则 ==="
cat > /etc/audit/rules.d/hardening.rules << 'EOF'
-w /etc/ssh/sshd_config -p wa -k ssh_config_change
-w /etc/passwd -p wa -k user_modify
-w /etc/group -p wa -k group_modify
-w /etc/shadow -p wa -k shadow_modify
-w /etc/sudoers -p wa -k sudoers_modify
EOF
systemctl restart auditd
echo_step "审计规则已配置"

# 8. 时间同步
echo "=== 8. 配置时间同步 ==="
timedatectl set-ntp true
echo_step "时间同步已启用"

echo ""
echo "========================================"
echo "  安全加固完成!"
echo "========================================"
echo ""
echo "接下来请手动完成:"
echo "1. 配置 SSH 密钥登录"
echo "2. 禁用密码登录(修改 /etc/ssh/sshd_config)"
echo "3. 修改 SSH 默认端口"
echo "4. 创建非 root 管理用户"
echo "5. 初始化 AIDE 数据库:sudo aideinit"
echo ""

十、加固检查清单

完成所有步骤后,用这个清单检查:

SSH 安全

防火墙

入侵防护

系统更新

监控审计

其他


【相关推荐】


安全加固不是一劳永逸的事,而是一个持续的过程。建议每季度做一次安全审计,检查是否有新的风险。先把这份指南过一遍,你的服务器安全等级就能超过 90% 的个人项目了。🚀

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/ubuntu-2404-security-hardening-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。