VPC SSH 端口转发到私有子网

VPC SSH 端口转发到私有子网

好吧,我已经为这个难题绞尽脑汁好几天了。我有一个 VPC 设置,带有一个公共子网和一个私有子网。当然,NAT 已经到位。我可以从 SSH 连接到公共子网中的实例,以及 NAT。我甚至可以从公共实例通过 SSH 连接到私有实例。我更改了私有实例上的 SSHD 配置,以接受端口 22 和任意端口号 1300。这很好用。

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

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

而 1.2.3.4 应该将其路由到内部服务器 10.10.10.10。

现在我听说 iptables 可以完成这项工作,所以我继续研究并尝试使用它进行一些路由。这些是我在公共实例(不是 NAT)上设置的规则。我不想为此使用 NAT,因为 AWS 显然会在您设置 NAT 实例时预先配置它们,而且我听说使用 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

因此,当我在家尝试此操作时,它只是超时。没有连接被拒绝的消息或任何其他消息。而且我似乎找不到有关丢包的任何日志消息。

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

答案1

供后人参考,这是一个 5 步过程。堡垒主机是指面向公众的服务器,您需要加强它以抵御潜在攻击,并且您的连接将通过它传输到您的私有子网内的服务器。

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

通过 SSH 连接到堡垒主机并在提示符下执行以下命令:

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

第 2 步:修改 IP 表(堡垒主机)

通过 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. {公共 SSH 端口}你计划通过堡垒主机上的哪个端口进行连接
  2. {私有 IP 地址}是您计划连接的私有子网中的服务器地址

有关这些配置含义的详细信息,您可以在命令提示符下运行以下命令来查看手册页:

man iptables
man iptables-extensions

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

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

  1. 自定义 TCP 规则允许入站和出站连接{公共 SSH 端口}无论你从哪个 IP 地址进行连接
  2. 自定义 TCP 规则允许入站和出站连接所有交通往返于私有服务器的安全组(在自定义 IP 字段中输入安全组 ID) - 您可以将其限制为仅限 SSH 流量,但如果您需要访问其他正在运行的服务和服务器,这是最简单的配置

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

  1. 自定义 TCP 规则允许入站和出站连接所有交通往返于堡垒主机的安全组(在自定义 IP 字段中输入安全组 ID) - 您可以将其限制为仅限 SSH 流量,但如果您需要访问其他正在运行的服务和服务器,这是最简单的配置

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

登录您的 Amazon AWS 控制台并导航到实例仪表板。单击您刚刚配置为转发连接的堡垒主机。从操作菜单中禁用源/目标检查。这是唯一需要禁用源/目标检查的设备。

步骤 5:使配置持久化(跨服务器重启)

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

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

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

sudo service iptables save

最后,确保它iptables在启动时启动:

sudo chkconfig iptables on

笔记:您无需设置和配置单独的 Amazon NAT 实例即可获得对私有服务器的 SSH 访问权限。如果您计划管理私有子网内各种设备的 Internet 访问,NAT 实例是理想的选择。

答案2

您是否已禁用源/目标检查?

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

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

另一个潜在的问题是,没有在内核级别启用路由,具体方法如下:

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

相关内容