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.timer2. 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/www3. 防火墙(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 --reload4. 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 nobash
# 先在本地生成并部署密钥(在你的客户端执行)
# 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 --reload5. 账户与权限策略
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 sshd7. 审计与文件完整性
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 --check8. 内核与网络加固(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 = 19. 最小化攻击面
bash
# 列出并停用不需要的服务
systemctl list-unit-files --type=service --state=enabled
sudo systemctl disable --now <unneeded-service>
# 用 ss 检查监听端口(netstat 已弃用)
sudo ss -tulpn10. 合规基线扫描(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 完成一次合规基线扫描
