好的,所以我一直在为这个困境而绞尽脑汁。 我有一个公共子网和私人子网的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步骤的过程。 堡垒主机是指面向公众的服务器,您需要加强对抗潜在的攻击,并通过它将您的连接传送到私有子网内的服务器。
SSH到堡垒主机,并在提示符下执行以下命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
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
哪里:
有关这些configuration的含义的更多详细信息,可以在命令提示符处运行以下命令以查看手册页:
man iptables man iptables-extensions
login到您的Amazon AWS控制台并导航到安全组仪表板。 编辑分配给堡垒主机的安全组,并添加:
编辑分配给您的私人服务器的安全组,并添加:
login到您的Amazon AWS控制台并导航到Instances仪表板。 点击您刚才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