一、Amazon Linux 2023 安全基线简述
二、前置准备:防失联操作
修改网络或 SSH 配置前,请务必执行以下操作,防止配置失误导致实例无法连接:
- 确认密钥连接:确保当前已通过 .pem/ .ppk 密钥对建立稳定的 SSH 连接,全程保留这个会话窗口不关闭。
- 核对公钥:确认实例内 ~/.ssh/authorized_keys文件中包含正确的公钥信息,权限为 600。
- 系统盘快照:在 AWS 控制台卷管理,为此实例系统盘手动创建 EBS 快照。配置失误失联时,可以通过快照回滚或者挂载卷修复系统。
- 备份 SSH 配置目录:
sudo cp -r /etc/ssh/sshd_config.d /etc/ssh/sshd_config.d.bak
三、网络层加固:配置 AWS 安全组
注意:Amazon Linux2023 默认未安装 firewalld 系统防火墙;外网流量过滤优先依靠 VPC 安全组,流量到达操作系统之前就被拦截,比操作系统内部防火墙优先级更高、更可靠。
1. 端口开放原则
遵循 “最小权限原则”,仅放行必需端口。
| 业务场景 | 协议 | 端口 | 源 (Source) 建议 | 说明 |
| SSH 管理 | TCP | 22 | 指定管理员 IP / 堡垒机 IP | 严禁对 0.0.0.0/0 全网开放 |
| Web 服务 | TCP | 80/443 | 0.0.0.0/0 或者负载均衡器安全组 | 对外网站访问 |
| 数据库 | TCP | 3306 | 仅限内网应用服务器安全组 | 禁止外网直连,防范勒索与爆破 |
| 缓存服务 | TCP | 6379 | 仅限内网安全组 | 禁止外网直接访问 |
2. 操作步骤
- 登录 AWS 管理控制台,进入 EC2 仪表板。
- 在实例列表勾选目标实例。
- 切换到安全选项卡,点击对应的安全组 ID 跳转。
- 编辑入站规则。
- 清理规则:删除测试遗留无用端口(如 3306、6379 全网放行规则)。
- SSH 22 端口源修改为固定办公 IP 或堡垒机安全组,拒绝 0.0.0/0。
- 保存入站规则,修改即时生效。
3. 连通性验证
AL2023 默认不带 nc 工具,需要先执行 sudo dnf install nc -y 安装。
nc -zv <EC2_公网_IP> 3306
返回连接超时 / 拒绝,代表安全组拦截已生效。
四、系统层加固:禁用 SSH 密码登录、禁止 root 远程登录
为规避弱密码暴力破解风险,彻底禁用 SSH 网络密码认证,强制密钥登录。
AL2023 配置机制说明 AL2023 采用 dropin 分片配置模式;主文件/etc/ssh/sshd_config会加载/etc/ssh/sshd_config.d/*.conf。 配置文件前缀数字代表加载优先级,数字越大越晚加载,优先级越高,可以覆盖前面内置 50redhat.conf 配置,因此自定义加固使用99xxx.conf命名。
注意:AL2023 (RHEL 系列) 不建议设置UsePAM no,会破坏系统账号、审计日志等基础能力;保留UsePAM yes,只要关闭 PasswordAuthentication 即可阻断 SSH 网络密码登录。 补充:本设置仅作用于网络 SSH;EC2 串行控制台属于本地 tty 终端,不受该配置控制,应急串行登录需要单独设置操作系统用户密码。
创建高优先级自定义加固配置
sudo vi /etc/ssh/sshd_config.d/99hardening.conf
写入内容:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
PermitRootLogin no
PubkeyAuthentication yes
- 关键步骤:语法校验(必须执行)修改完成先校验 sshd 配置语法,出现 ERROR 绝对不要重载服务!
sudo sshd -t
无任何输出代表语法正常;有报错需要修正配置文件。
- 重载 SSH 配置(推荐 reload,不切断现有 SSH 会话)
sudo systemctl reload sshd
补充说明:systemctl restart sshd会断开全部 SSH 连接,配置出错直接锁实例,加固调试优先使用 reload。
验证测试(最重要)
不要关闭当前已经登录的 SSH 窗口! 新开本地终端,尝试密码方式 SSH 登录;出现 Permission denied (publickey) 无法输入密码,说明密码登录已经关闭。 同时测试密钥登录可以正常连通,确认无误,才可以关闭旧会话窗口。
五、可选基线加固(SELinux)
AL2023 默认 SELinux 为permissive宽容模式,仅记录告警不拦截;生产环境建议开启强制模式 enforcing。
# 修改配置永久生效
sudo vi /etc/selinux/config
# SELINUX=enforcing
# 修改后重启实例生效
六、常见问题 FAQ
Q1:修改 sshd 配置重载后,SSH 依然可以密码登录? A:①检查 dropin 配置文件名数字优先级,不要用低数字前缀被内置配置覆盖;②执行sudo sshd -T | grep passwordauthentication查看运行时生效参数,确认配置是否被加载;③确认 reload 执行成功。
Q2:执行 sshdt 出现报错怎么办? A:代表配置文件语法错误,不要执行 reload/restart;对比备份目录 /etc/ssh/sshd_config.d.bak恢复排查。
Q3:禁用 PasswordAuthentication 之后,EC2 串行控制台还能不能登录? A:SSH 密码关闭不影响 EC2 串行控制台;串行控制台是本地终端,需要单独给操作系统用户设置密码,用于网络完全断网时应急排障。
Q4:Amazon Linux2023 关闭端口,是改系统防火墙还是安全组? A:优先修改 EC2 安全组,AL2023 默认没有 firewalld;操作系统防火墙需要手动 dnf 安装,不建议作为外网访问第一道防线。
Q5:加固后密钥无法登录实例,怎么应急恢复? A:使用前期创建的 EBS 快照;或者把系统盘挂载到其他临时实例,修改 sshd 配置文件修复。
Q6:PermitRootLogin no 是什么作用? A:禁止 root 账号通过 SSH 远程登录;管理员先用普通 ec2user 密钥登录后,再 sudo 提权,降低 root 对外暴露风险。
