我正准备设置一个 Amazon EC2 实例。它将是一台测试和开发机器,让我可以将 PHP、Python 等脚本放在服务器上,而不必局限于本地机器。目前我使用 NitrousIO,但出于多种原因,EC2 盒更有吸引力。
但是有一件事让我很烦恼。大多数文档都明确指出,SSH 访问只能限制在一个人的 IP 地址上。对于大多数企业来说,这可能没有问题(而且我的雇主确实设定了 IP 范围),但我的家庭 IP 地址是动态的。在这种情况下,有没有办法通过 IP 地址限制对 EC2 实例的 SSH 访问?我担心会在不合适的时间被锁定。
答案1
如果您有权访问,这将不是问题安全组Amazon Web Services 控制台上 EC2 面板的设置。
无论何时登录,您都可以转到绑定到 EC2 实例的安全组,进行配置入站访问并添加或更改 SSH 规则。还有一个方便的下拉菜单,上面写着“我的 IP”,因此它会自动用您的信息填充空间并将您锁定在该实例之外。
答案2
您应该创建一个脚本来添加/删除安全组规则,授予对您当前 IP 的访问权限。
使用 Web API 获取当前 IP 地址。例如http://api.ipify.org/?format=json
使用结果调用 AWS CLI:http://docs.aws.amazon.com/cli/latest/userguide/cli-ec2-sg.html
类似这样的事情应该可以工作:
aws ec2 authorize-security-group-ingress --group-name <SSH_ACCESS_GROUP_NAME> --protocol tcp --port 22 --cidr <MY_IP>
不要忘记也删除规则。
答案3
我想到了一些选择。
1) 向您的本地 ISP 索取该 IP 的静态 IP 白名单并在本地机器上使用它。
2) 仅允许从路由器的指定 IP 范围进行连接,因为您可能只会使用该路由器连接中的几个 IP。例如,将 123.456.78.90/21 列入 ssh 白名单。
3) 如果选项 1 或 2 不可行,您可以在从本地机器使用 ssh 之前使用控制台 GUI 手动更改该连接的“已知”当前 IP。
4) 也可以从家庭路由器将其设置为仅为该机器使用静态,因此虽然 ISP 可能不会为您提供静态 IP,但您可以使用仍然可以通过家庭连接路由的 LAN 静态 IP。
答案4
即使使用动态 IP,也应该可以选择一个范围,方法是通过一段时间内检查您获得的 IP,或向您的 ISP 询问特定的 IP 池。完成后,您可以设置默认拒绝,并以这种方式允许您的 IP 范围:
iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT
...当然,用符合您发现的任何值替换 IP 值。这意味着 IP 的最后 16 位可以是任何值,只要与IP 的部分/16
相符即可。.0.0
警告:在应用默认拒绝规则之前,请务必确保已设置该规则,否则您将被锁定。如果可以,我建议您获取一个具有静态 IP 的 shell,并将其也添加进去,这样您就有了备用路由,以防万一。