我对系统管理员/IT 方面还不熟悉,所以如果这看起来太简单,我深表歉意。我尝试搜索,但由于 SSH 领域非常广泛,我不知道具体要使用哪些关键字或术语。
我很快就要出去旅行了,我需要通过 SSH 进入我的 EC2 Ubuntu 服务器。目前我在家里有一个静态 IP,并设置了 UFW 来限制端口 22 的 IP 访问。就 SSH 本身而言,我使用密钥对登录。
有什么方法可以让我获得静态 IP,或者使用某种 VPN,然后通过 SSH 进入我的服务器,同时保证端口 22 的安全?显然,我不是第一个在旅行时必须通过 SSH 进入服务器的人,所以一定有解决方案。
正如我所说,我目前只允许我的 IP 访问端口 22。向所有流量开放端口 22 是否太危险?我对 SSH 使用密钥对,而不是用户名/密码。
答案1
只要您使用公钥身份验证或安全用户密码,保持端口 22 开放的安全性并不比在您的 Web 服务器上保持端口 80 开放的安全性低。许多安全实践都是毫无根据的神话。sshd 中不太可能存在严重的漏洞。
为什么 VPN 服务器的端口突然比 SSH 端口更安全?每次连接时只需验证您的 SSH 公钥即可防止 MITM 攻击。
答案2
要求 SSH 使用 VPN 当然更安全;通常的做法是建立一个管理网络(您的服务器与其有辅助连接)并提供 VPN 访问。让所有基础设施只在该网络上监听管理流量。然后,根据需要,使用 VPN 进行管理。
如果您只有一台服务器,这可能有点过头了。使用强公钥并确保只有实际拥有 shell 帐户的用户才允许进行身份验证就足够了。在这种情况下,禁用 SSH 的密码身份验证并不是一个坏主意。为此,请编辑/etc/ssh/sshd_config
并设置PasswordAuthentication no
。如果您只使用公钥身份验证,还请确保使用 禁用 PAM UsePAM no
,因为即使您在 sshd 中禁用了密码身份验证,PAM 也可以使用密码对用户进行身份验证。
答案3
首先是一些常规安全提示:
- 使用 Key 登录 - 你在这方面做得很好
- 使用大密钥 - 例如生成一个 4k rsa 密钥(可能当前的是 1k 或 2k
- 使用强密码作为密钥 - 你应该这样做。如果我能得到你未受保护的无密码密钥……一切都没有意义
- 将 ssh 移至更高的端口 - 例如 12322 - 这将有助于探测服务。并且不要忘记在安全组中打开端口
- 监控服务器的运行情况 - fail2ban 是一款非常棒的工具
- 禁用密码登录(其他回复中有说明)
- 实现 AllowUsers/AllowGroups 以仅允许特定用户(并且 root 不是其中之一) - 再加上积极的 fail2ban 配置,这几乎是一个杀手。
具体来说,对于您的问题,有一种称为 PortKnock-ers 的工具
基本上,你做了某件事(比如尝试在短时间内连接到几个不同的端口),然后一个端口就会在 iptables 中神奇地打开。
关于该主题的一些阅读材料:
注意:我没有使用端口敲击的经验,也不推荐使用,因为它会干扰正常操作。大型安全密钥和非标准端口上的 ssh 就足够了。
答案4
我会在你的笔记本电脑上设置一个动态 dns 帐户,如 no-ip 或 dynds,然后你可以将该 dyn 主机名添加到 /etc/hosts.allow 并阻止 /etc/hosts/deny 上的所有其他内容。
这样,您的 Linux 就只允许该动态主机,同时您可能还需要将本地子网段添加到 /etc/hosts.allow 文件中。
干杯...