VPC SSH端口转发到私有子网

好的,所以我一直在为这个困境而绞尽脑汁。 我有一个公共子网和私人子网的VPC设置。 NAT是当然的。 我可以从SSH连接到公有子网中的实例以及NAT。 我甚至可以连接到公共实例的私有实例。 我改变了私人实例SSHDconfiguration接受端口22和任意端口号1300.这工作正常。

但我需要设置它,以便我可以连接到私人实例直接使用1300端口号,即。

ssh -i keyfile.pem [email protected] -p 1300 

和1.2.3.4应该将它路由到内部服务器10.10.10.10。

现在我听说iptables是这个工作,所以我继续研究,并用一些路由玩弄。 这些是我在公共实例(而不是NAT)上设置的规则。 我不想为此使用NAT,因为AWS在设置NAT时会自动预先configurationNAT实例,而且我听说使用iptables会搞砸了。

 *filter :INPUT ACCEPT [129:12186] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [84:10472] -A INPUT -i lo -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 1300 -j ACCEPT -A INPUT -d 10.10.10.10/32 -p tcp -m limit --limit 5/min -j LOG --log-prefix "SSH Dropped: " -A FORWARD -d 10.10.10.10/32 -p tcp -m tcp --dport 1300 -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT # Completed on Wed Apr 17 04:19:29 2013 # Generated by iptables-save v1.4.12 on Wed Apr 17 04:19:29 2013 *nat :PREROUTING ACCEPT [2:104] :INPUT ACCEPT [2:104] :OUTPUT ACCEPT [6:681] :POSTROUTING ACCEPT [7:745] -A PREROUTING -i eth0 -p tcp -m tcp --dport 1300 -j DNAT --to-destination 10.10.10.10:1300 -A POSTROUTING -p tcp -m tcp --dport 1300 -j MASQUERADE COMMIT 

所以当我从家里尝试这个。 它只是超时。 没有连接拒绝消息或任何东西。 我似乎无法find关于丢弃的数据包的任何日志消息。

我的安全组和ACL设置允许在这两个子网和NAT上的这两个端口上进行通信。 我不知所措 我究竟做错了什么?

为了后代,这是一个5步骤的过程。 堡垒主机是指面向公众的服务器,您需要加强对抗潜在的攻击,并通过它将您的连接传送到私有子网内的服务器。

步骤1:启用IP转发(Bastion主机)

SSH到堡垒主机,并在提示符下执行以下命令:

 echo 1 > /proc/sys/net/ipv4/ip_forward 

步骤2:修改IP表(Bastion主机)

SSH到堡垒主机,并在提示符下执行以下命令:

 sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport {PUBLIC_SSH_PORT} -j DNAT --to-destination {PRIVATE_IP_ADDRESS}:22 sudo iptables -t nat -A POSTROUTING -p tcp -m tcp --dport {PUBLIC_SSH_PORT} -j MASQUERADE 

哪里:

  1. {PUBLIC_SSH_PORT}是您打算连接的堡垒主机上的端口
  2. {PRIVATE_IP_ADDRESS}是您计划连接到的私有子网中服务器的地址

有关这些configuration的含义的更多详细信息,可以在命令提示符处运行以下命令以查看手册页:

 man iptables man iptables-extensions 

步骤3:configuration安全组(Amazon AWS控制台)

login到您的Amazon AWS控制台并导航到安全组仪表板。 编辑分配给堡垒主机的安全组,并添加:

  1. 自定义TCP规则 ,允许从{PUBLIC_SSH_PORT}连接的任何IP地址的入站和出站连接
  2. 自定义TCP规则 ,允许进出私人服务器的安全组的所有stream量的入站和出站连接(在自定义IP字段中键入安全组ID) – 您可以限制这只是SSHstream量,但如果您有其他服务和运行你需要访问的服务器,这是最简单的configuration

编辑分配给您的私人服务器的安全组,并添加:

  1. 自定义TCP规则允许进出堡垒主机的安全组的所有stream量的入站和出站连接(在自定义IP字段中input安全组ID) – 您可以将此限制为只是SSHstream量,但如果您有其他服务和运行你需要访问的服务器,这是最简单的configuration

步骤4:禁用源/目标检查(Amazon AWS控制台)

login到您的Amazon AWS控制台并导航到Instances仪表板。 点击您刚才configuration的堡垒主机转发连接。 从操作菜单中禁用源/目标检查。 这是唯一需要禁用源/目标检查的设备。

第5步:使configuration保持不变(跨服务器重新启动)

修改/etc/sysctl.conf文件,并更新以下行(将0更改为1):

 # Controls IP packet forwarding net.ipv4.ip_forward = 1 

保存iptablesconfiguration(到/etc/sysconfig/iptables ),以便在启动时重新加载:

 sudo service iptables save 

最后,确保iptables本身在启动时启动:

 sudo chkconfig iptables on 

注意 :您不需要设置和configuration单独的Amazon NAT实例即可获得对私有服务器的SSH访问权限。 如果您计划pipe理您的私有子网中可能具有的各种设备的Internet访问,则NAT实例是理想的。

你有禁止源/目的地检查?

默认情况下,AWS会检查networkingstream量的源和目标,因此实例必须是它发送或接收的任何stream量的最终目标。 要将stream量从一个实例路由到另一个实例,您需要禁用此检查:

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck

另一个潜在的问题是路由在内核级没有被启用,像这样运行:

 echo 1 > /proc/sys/net/ipv4/ip_forward