EC2实例仅22端口可访问,如何开放其他端口供外部服务访问?
解决EC2实例仅22端口可访问的问题
核心排查与解决步骤
EC2端口无法对外访问,主要受安全组规则、实例内部防火墙、Docker端口映射三个环节控制,按以下顺序逐一处理:
1. 配置EC2安全组入站规则
- 登录AWS控制台,找到目标EC2实例关联的安全组
- 新增入站规则:
- 类型选「自定义TCP」,端口范围填
1234(你需要暴露的数据库端口) - 源地址若需全网访问填
0.0.0.0/0,仅限特定客户端访问则填对应IP段(更安全) - 若要测试80端口,重复上述步骤添加80端口的入站规则
- 类型选「自定义TCP」,端口范围填
- 保存规则
2. 检查实例内部防火墙(Linux系统为例)
- 通过SSH登录EC2实例,执行命令查看当前防火墙规则:
sudo iptables -L - 若1234/80端口未放行,添加规则:
# 放行1234端口 sudo iptables -A INPUT -p tcp --dport 1234 -j ACCEPT # 放行80端口(测试用) sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT - 若实例使用firewalld防火墙,执行:
sudo firewall-cmd --add-port=1234/tcp --permanent sudo firewall-cmd --reload
3. 确认Docker端口映射配置
- 部署数据库容器时,必须用
-p参数做端口映射,格式为主机端口:容器内部端口,示例:# 将主机1234端口映射到MySQL容器的3306端口 docker run -d -p 1234:3306 mysql:latest - 执行
docker ps查看容器状态,确认PORTS列显示0.0.0.0:1234->容器端口/tcp,说明映射生效
4. 测试端口连通性
- 用telnet测试:
telnet 你的EC2公网IP 1234 - 或用nc命令(更简洁):
nc -zv 你的EC2公网IP 1234
内容的提问来源于stack exchange,提问作者Preston_Jarvis
相关产品推荐
相关产品推荐

