如何配置仅允许通过bastion堡垒机访问AWS EC2实例
配置Linux EC2实例仅允许堡垒机SSH访问的操作步骤
第一步:修改EC2实例关联的安全组规则(优先级最高,必选配置)
安全组是AWS EC2的实例级网络防火墙,通过调整规则即可从网络层面拦截非堡垒机的SSH访问请求:
- 登录AWS控制台,进入目标EC2实例详情页,切换到「安全」选项卡,点击关联的安全组ID进入配置页
- 选择「入站规则」标签页,点击「编辑入站规则」,删除所有源地址为
0.0.0.0/0、::/0或其他非堡垒机IP的22端口(SSH)允许规则 - 新增一条入站规则:
- 类型:SSH
- 端口范围:22
- 源:填写堡垒机的公网IP(跨VPC/堡垒机通过公网访问EC2场景)或私有IP(同VPC内网互通场景),格式为
x.x.x.x/32 - 描述可填写「仅允许堡垒机SSH访问」
- 保存规则后立即生效,此时本地直接SSH访问EC2会被拦截,仅堡垒机可发起SSH连接。
第二步:(可选)EC2实例内部SSH服务加固
如需在系统层面再加一层校验,避免安全组误配置导致的访问泄露,可修改SSH服务配置:
- 登录EC2实例,编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config - 在文件末尾添加如下规则(替换为实际的EC2登录用户名、堡垒机IP):
AllowUsers ec2-user@1.2.3.4
上述配置表示仅允许
ec2-user用户从1.2.3.4(堡垒机IP)发起SSH登录,其他所有用户和来源IP的请求都会被SSH服务直接拒绝。
- 验证配置合法性:
sudo sshd -t,无报错则表示配置正确 - 重启SSH服务生效:
- CentOS/RHEL 系列:
sudo systemctl restart sshd - Debian/Ubuntu 系列:
sudo systemctl restart ssh
- CentOS/RHEL 系列:
第三步:(可选)iptables规则第三层防护
对安全要求极高的场景,可在实例内部配置iptables规则做第三层访问限制:
- 清空原有22端口的允许规则:
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT - 新增仅允许堡垒机IP访问22端口的规则:
sudo iptables -A INPUT -p tcp -s 1.2.3.4/32 --dport 22 -j ACCEPT - 拒绝其他所有IP访问22端口:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP - 保存规则避免实例重启后失效:
- CentOS/RHEL 系列:
sudo service iptables save - Debian/Ubuntu 系列:先安装
iptables-persistent包,再执行sudo netfilter-persistent save
- CentOS/RHEL 系列:
注意:修改SSH配置或iptables规则时,请保持至少一个已登录EC2的SSH会话不关闭,新开终端测试登录是否符合预期,确认配置无误后再关闭原有会话,避免配置错误导致无法连接实例。
内容的提问来源于stack exchange,提问作者Luca
相关产品推荐
相关产品推荐

