所以我在“普通”机器(不在 EC2 中)上做过几十次这样的操作,这似乎很简单。我试图在端口 22 和 80 上运行 ssh,但我无论如何也想不出为什么我无法通过端口 80 连接,而使用端口 22 可以正常连接。所以我做了以下事情:
- 创建一个新的实例(我使用了一个较小的 RHEL 实例,因为我试图为 RHEL HVM 实例实现它)
- SSH 进入机器并更新
/etc/ssh/sshd_config
并添加行Port 22
和Port 80
- 向 iptables 中添加一条新规则:
iptables -I INPUT 3 -s 0.0.0.0/0 -d 0.0.0.0/0 -p tcp --dport 80 -m state --state New -j ACCEPT
然后sudo service iptables restart
- 跑步
services sshd restart
重启显示“OK”,我可以使用端口 22 进行连接。但我无法通过端口 80 进行连接。然后我安装了 nmap,但没有看到端口 80 上运行任何程序(端口 22 在那里!)。我 200% 确定我的安全组是正确的。我甚至在新实例中尝试过,以防安全组没有实时更新。
我观察到的一些情况:
- 停止 iptables 和 ip6tables 服务无效
- 如果我从 sshd_config 中删除端口 22,我将无法再建立新连接
- 如果我在 Ubuntu AMI 上执行相同的步骤(减去 iptables 规则),我就可以成功连接!
更新:我仍未找到问题所在,但最有可能是由我的 ISP 引起的(也许他们阻止了来自端口 80 的非 HTTP 流量)。新加坡正在做大量流量过滤,这不是什么秘密,所以这并非不可能。我尝试从其他端口运行 SSH,结果成功了。此外,从不同区域的另一个 EC2 实例连接到端口 80 中的 SSH 也可以。所以无论如何,我标记了得票最多的答案。
答案1
实例所属的安全组中是否定义了端口 80?以下是示例:
顺便说一句,我的方法有点不同。也许,你会发现它很有用。我使用 iptables 和 DNAT 目标来转发 SSH,而无需触及 SSH 服务器配置:
iptables -t nat -A PREROUTING -m tcp -p tcp --dport 80 -j DNAT --to-destination INSTANCE_IP:22
此外,您还必须添加另一条规则以允许流量到端口 80。
iptables -A INPUT -m tcp -p tcp --dport 80 -j ACCEPT
答案2
这是 RHEL 中的 SELinux 配置,它不允许您随意添加端口。使用 ,netstat -ntlp
您将看到sshd
并未在端口 80 上运行,正如您所认为的那样sshd_config
。此外,快速检查/var/log/secure
将显示在端口 80 上绑定的失败尝试。您首先要做的是修改 selinux 配置:
semanage port -m -t ssh_port_t -p tcp 80
快速检查:
semanage port -l | grep ssh
将确认端口 80 已添加。
现在您可以编辑您的sshd_config
并重新加载sshd
。
答案3
为什么要在两个端口上运行 sshd?尤其是端口 22 和 80。请考虑使用“30000”到“63000”之间的端口,至少这样简单的端口扫描器就不会跳过它。但同时在两个端口上运行 SSHd 没有任何意义(例外情况是,如果您要从非常严格的公司防火墙内部进行连接 - 在这种情况下,您的防火墙也应该更加严格)如果您坚持使用端口 22 和 80,请输入/etc/ssh/sshd_config:
Port 22
Port 80
然后:
# service sshd restart
# service iptables restart (to clean any experiments you did lately)
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# service iptables save (to save your config)
我并不是建议就这样向全世界开放这些端口,你应该采取更严格的限制措施,例如:
# iptables -A INPUT -p tcp -m state --state NEW -m tcp -s 1.2.3.4 --dport 80 -j ACCEPT
在哪里1.2.3.4是您要连接的 IP。
答案4
听起来你的安全组中的 80 端口没有开放