Skip to content

AlmaLinux 安全加固指南

适用于AlmaLinux 9.x / 10.x

本指南面向 AlmaLinux 9 / 10 的服务器环境,提供一套实用的安全加固基线,涵盖系统更新、SELinux、防火墙、SSH、账户策略、入侵防护、审计与合规扫描。建议在测试环境验证后再应用到生产系统。

加固原则

  • 最小化:只安装和开放必要的软件与端口。
  • 纵深防御:SELinux、防火墙、账户策略、审计多层叠加,不依赖单一手段。
  • 可回退:每项变更前先备份配置;远程操作 SSH/防火墙时务必保留一个已连接的会话。

1. 保持系统更新

及时安装安全补丁是最有效的加固手段。

bash
# 更新全部软件包
sudo dnf upgrade -y

# 仅安装安全相关更新
sudo dnf upgrade --security -y

# 查看可用的安全公告
dnf updateinfo list security

启用自动安全更新

bash
sudo dnf install -y dnf-automatic

# 编辑 /etc/dnf/automatic.conf,建议设置:
#   upgrade_type = security      # 只自动应用安全更新
#   apply_updates = yes          # 自动安装(而非仅下载)
sudo systemctl enable --now dnf-automatic.timer

2. SELinux

AlmaLinux 默认启用 SELinux,请勿为图省事而关闭它。遇到服务被拦截时,应排查并放行,而不是禁用。

bash
# 确认处于强制模式(Enforcing)
getenforce
sudo sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config

# 排查被拒绝的访问
sudo dnf install -y setroubleshoot-server
sudo ausearch -m AVC,USER_AVC -ts recent
sudo sealert -a /var/log/audit/audit.log

# 按需放行(示例:允许 httpd 发起网络连接)
sudo setsebool -P httpd_can_network_connect on

# 修正文件上下文
sudo restorecon -Rv /var/www

3. 防火墙(firewalld)

默认仅放行确实需要的服务,关闭其余入站端口。

bash
sudo systemctl enable --now firewalld

# 查看当前放行项
sudo firewall-cmd --list-all

# 放行必要服务(按需调整)
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=https

# 移除不需要的服务
sudo firewall-cmd --permanent --remove-service=cockpit

sudo firewall-cmd --reload

限制来源

可用 rich rule 把管理端口(如 SSH)限制到可信网段:

bash
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload

4. SSH 加固

务必保留会话

修改 SSH 配置并重启服务前,请额外保留一个已登录的 SSH 会话用于回退。配置错误可能把你锁在系统外。

编辑 /etc/ssh/sshd_config(或在 /etc/ssh/sshd_config.d/ 下新增 drop-in 文件),推荐设置:

text
PermitRootLogin no            # 禁止 root 直接登录
PasswordAuthentication no     # 仅允许密钥登录(先确保已配置密钥)
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
bash
# 先在本地生成并部署密钥(在你的客户端执行)
# ssh-copy-id user@server

# 校验配置语法后再重启
sudo sshd -t && sudo systemctl restart sshd

如需修改 SSH 端口,记得同步更新防火墙与 SELinux:

bash
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload

5. 账户与权限策略

bash
# 使用 sudo 而非共享 root 密码;将管理员加入 wheel 组
sudo usermod -aG wheel <your-admin-user>

# 锁定不需要登录的系统账户
sudo passwd -l <service-account>

密码与登录策略

bash
# 密码复杂度(编辑 /etc/security/pwquality.conf)
#   minlen = 12
#   minclass = 3

# 密码有效期(编辑 /etc/login.defs)
#   PASS_MAX_DAYS   90
#   PASS_MIN_DAYS   1
#   PASS_WARN_AGE   7

# 失败锁定由 faillock 提供(EL8+ 默认机制)
faillock --user <username>

6. 入侵防护(fail2ban)

自动封禁暴力破解来源 IP。

bash
sudo dnf install -y epel-release
sudo dnf install -y fail2ban

sudo tee /etc/fail2ban/jail.local >/dev/null <<'EOF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
backend  = systemd

[sshd]
enabled = true
EOF

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

7. 审计与文件完整性

bash
# auditd 默认安装,确认其运行
sudo systemctl enable --now auditd

# 文件完整性基线(AIDE)
sudo dnf install -y aide
sudo aide --init
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 之后定期比对
sudo aide --check

8. 内核与网络加固(sysctl)

/etc/sysctl.d/99-hardening.conf 中按需添加,然后 sudo sysctl --system 生效:

text
# 防止 IP 欺骗 / 反向路径校验
net.ipv4.conf.all.rp_filter = 1
# 忽略 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# 不接受源路由
net.ipv4.conf.all.accept_source_route = 0
# 记录可疑数据包
net.ipv4.conf.all.log_martians = 1
# 开启 SYN Cookie 抵御 SYN Flood
net.ipv4.tcp_syncookies = 1

9. 最小化攻击面

bash
# 列出并停用不需要的服务
systemctl list-unit-files --type=service --state=enabled
sudo systemctl disable --now <unneeded-service>

# 用 ss 检查监听端口(netstat 已弃用)
sudo ss -tulpn

10. 合规基线扫描(OpenSCAP)

用官方安全基线(如 CIS、PCI-DSS)评估并生成报告。

bash
sudo dnf install -y openscap-scanner scap-security-guide

# 列出适用于本系统的 profile
oscap info /usr/share/xml/scap/ssg/content/ssg-almalinux*-ds.xml

# 评估并生成 HTML 报告(profile ID 以上一步输出为准)
sudo oscap xccdf eval \
  --profile <profile-id> \
  --report scan-report.html \
  /usr/share/xml/scap/ssg/content/ssg-almalinux*-ds.xml

加固检查清单

  • [ ] 系统已更新,且已启用自动安全更新
  • [ ] SELinux 处于 Enforcing
  • [ ] 防火墙仅放行必要服务,管理端口限制来源
  • [ ] SSH 禁用 root 登录、改用密钥认证
  • [ ] 使用 sudo,锁定无用账户,启用密码与锁定策略
  • [ ] 部署 fail2ban
  • [ ] auditd 与 AIDE 已启用并建立基线
  • [ ] 应用 sysctl 网络加固参数
  • [ ] 停用无用服务,核对监听端口
  • [ ] 通过 OpenSCAP 完成一次合规基线扫描

延伸阅读

Released under the MIT License