IP 防火墙是保护 SSH 的最佳方法吗?

IP 防火墙是保护 SSH 的最佳方法吗?

我希望澄清一下我所看到的 EC2 安全组的潜在问题。

我正在设置一个用于连接 Linux 实例的安全组。我已为 HTTP 和 HTTPS 访问创建了“任何地方”规则。

对于我的 SSH 规则,亚马逊教程说我应该限制对我的公共 IP 地址的入站访问

  1. 我不明白的是,如果您的公共 IP 地址是动态的,那么这如何安全或可行?

  2. 我的 IP 地址是动态的,那么当我的 ISP 更改我的公共 IP 并且我无法再通过 ssh 进入我的实例时会发生什么?

我正在使用的设置指南链接:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/get-set-up-for-amazon-ec2.html(‘创建安全组’的第 7 步对我来说似乎是有问题的)

答案1

我不明白的是,如果您的公共 IP 地址是动态的,那么这如何安全或可行?

如果您发现您的 IP 不经常更改,或者您只需要短时间访问,则此解决方案可能有效。它增加了一层额外的安全性,因为 SSH 不会暴露于您提供的 CIDR 之外的流量。

如果特定的 CIDR 不起作用,您可以尝试您的 ISP 可能使用的一个或多个板载 CIDR 范围,这仍然会限制来自很大一部分 Internet 的访问,这对于安全性来说是一种胜利。

当我的 ISP 更改我的公共 IP 并且我无法再通过 ssh 进入我的实例时会发生什么?

您可以登录 AWS 控制台,或使用 CLI 动态更新安全组规则。

您可以编写一个直接与 CLI 交互的脚本。它可以很简单,只需检查Port 22 rule当前 IP 是否与当前 IP 相符,如果不同则更新。当然,运行这样的脚本本身可能会引发更多安全问题 :)

IP 防火墙是保护 SSH 的最佳方法吗?

虽然在切实可行的情况下将 ssh 流量限制为仅受信任的 IP 源是件好事,但真正让 ssh 安全起来的是使用私钥和合理的配置。

需要考虑的关键事项:

  • 为您的 SSH 私钥添加密码
  • 禁用 SSH 密码验证
  • 禁用 root 登录 SSH
  • 审计所有用户账户的 SSH 公钥

您还可以做一些事情来消除与暴力攻击相关的“噪音”:

  • 在更高的端口上运行 ssh
  • 使用 fail2ban 之类的软件,它将动态记录多次失败的尝试,并在指定的时间段内阻止 IP 范围

答案2

通过 IP 地址限制对 SSH 服务器的访问是可以的,但 SSH 的安全性并不依赖于此。如果您禁用密码登录 ( PasswordAUthentication no) 并仅使用私钥身份验证,则没有人可以在没有您的私钥的情况下进入。这是安全的。

换句话说,如果您不想担心防火墙规则,您不必担心。

答案3

对于这个老问题,有几个较新的解决方案:

从 AWS 内部来看:如何使用 AWS Lambda 自动更新 Amazon CloudFront 和 AWS WAF 的安全组

从动态源远程更新(node.js脚本):aws-ec2-ssh-secgroup-update 节点脚本

从动态源进行远程更新(Python 脚本):自动将当前公共 IP 添加到安全组以允许特定端口上的流量

答案4

您可以使用aws_ipadd命令可轻松更新和管理 AWS 安全组规则,并在公共 IP 和端口发生变化时将其列入白名单。

$ aws_ipadd my_project_ssh
 Your IP 10.10.1.14/32 and Port 22 is whitelisted successfully.

$ aws_ipadd my_project_ssh
 Modifying existing rule...
 Removing old whitelisted IP '10.10.1.14/32'.
 Whitelisting new IP '10.4.10.16/32'.
 Rule successfully updated!

相关内容