在不同的端口上运行 SSH(RHEL EC2 实例)

在不同的端口上运行 SSH(RHEL EC2 实例)

所以我在“普通”机器(不在 EC2 中)上做过几十次这样的操作,这似乎很简单。我试图在端口 22 和 80 上运行 ssh,但我无论如何也想不出为什么我无法通过端口 80 连接,而使用端口 22 可以正常连接。所以我做了以下事情:

  1. 创建一个新的实例(我使用了一个较小的 RHEL 实例,因为我试图为 RHEL HVM 实例实现它)
  2. SSH 进入机器并更新/etc/ssh/sshd_config并添加行Port 22Port 80
  3. 向 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
  4. 跑步services sshd restart

重启显示“OK”,我可以使用端口 22 进行连接。但我无法通过端口 80 进行连接。然后我安装了 nmap,但没有看到端口 80 上运行任何程序(端口 22 在那里!)。我 200% 确定我的安全组是正确的。我甚至在新实例中尝试过,以防安全组没有实时更新。

我观察到的一些情况:

  1. 停止 iptables 和 ip6tables 服务无效
  2. 如果我从 sshd_config 中删除端口 22,我将无法再建立新连接
  3. 如果我在 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 端口没有开放

相关内容