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

所以我在一个“正常”的盒子里(不是在EC2中)做了几次,看起来很简单。 我试图在端口22和80上运行ssh,但我不能,为了我的生活,找出为什么我不能通过端口80连接,但我可以使用端口22连接良好。所以,这就是我所做的:

  1. 创build一个新的实例(我使用了一个较小的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,我不能再build立新的连接
  3. 如果我在Ubuntu AMI上执行相同的步骤(减去iptables规则),我可以成功连接!

更新:我仍然没有发现问题,但它最有可能是由我的ISP造成的(也许他们阻止来自端口80的stream量不是HTTPstream量)。 新加坡进行大量stream量过滤并不是秘密,所以也不是不可能的。 我尝试从一个不同的端口运行SSH,并工作。 此外,从另一个区域的另一个EC2实例连接到80端口的SSH工作。 所以无论如何,我已经标出了最有回报的答案。

您是否在实例所属的安全组中定义了端口80? 下面是一个例子:

在这里输入图像说明

顺便说一下,我做了一点不同的方式。 也许,你会发现它有用。 我使用iptables和DNAT目标转发SSH而不接触SSH服务器configuration:

 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 

这是RHEL中的SELinuxconfiguration,不允许您随意添加端口。 使用netstat -ntlp你将会看到sshd没有运行在80端口上,就像你基于sshd_config所想的那样。 另外,快速检查你的/var/log/secure会告诉你在80端口绑定失败的尝试。你首先要做的是修改你的selinuxconfiguration:

 semanage port -m -t ssh_port_t -p tcp 80 

快速检查:

 semanage port -l | grep ssh 

将确认端口80已被添加。

现在你可以编辑你的sshd_config并重新加载sshd

为什么在两个端口上运行sshd? 尤其是端口22和80.请考虑使用“30000”到“63000”以上的端口至less被简单的端口扫描器跳过。 但是同时在两个端口上运行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地址。

听起来像80端口不在您的安全组中打开