我是服务器管理的新手,并为防火墙编写了一个 IPTables 脚本。我非常关心我的服务器的安全性,因此我想知道我经常从使用防火墙的人那里读到的东西,这限制了服务器的 SSH 连接的来源。
问题是我的服务器是我租用的远程服务器,作为一个从我家和工作连接到服务器的人,我没有理由相信我的家庭和工作 IP 将永远保持不变. 那么,如果我将 SSH 的来源限制在我的服务器上,那么如果我家里的 IP 发生了变化怎么办?如果我去其他国家旅行并想访问我的服务器怎么办?我经常旅行。
听起来我错过了什么……你们能解释一下解决这个问题的有效方法吗?
问题是:如何在不限制自己访问服务器的情况下限制 SSH 连接的来源?
感谢您的任何努力。
iptables 不是解决此问题的正确工具,因为它仅限于通过简单参数(如源或目标地址、端口、协议等)进行过滤。
您应该按照此Ubuntu 文档 HowTo中的说明设置 SSH 公钥身份验证,然后使用此Linux.org HowTo强制进行 PK 身份验证。
您可以通过阻止来自您知道不打算前往的国家/地区的源 IP 地址的 SSH 来增强此功能。然而,一个坚定的攻击者可能会拥有来自几乎任何国家的攻击点,所以这收益有限。
正如@Jonathan Ben-Avraham 的回答一样,首先要做的是禁用密码访问并切换到 public key only。当然,这要求您不要丢失私钥:将备份副本保存在安全的地方。
您应该采取的第二种方法是限制传入 SSH 连接的数量。沿线添加 iptables 规则
这个想法是你可以(尝试)登录五次,但你会被冻结一分钟。这不会给授权用户带来不便,但是会非常有效地阻止尝试在网络上浮动的每个密码(或私钥)的破解脚本,试图找到匹配项。
您可能还想添加两因素身份验证。此链接https://www.digitalocean.com/community/articles/how-to-protect-ssh-with-two-factor-authentication很好地描述了该过程;基本上你安装 libpam-google-authenticator 包,添加
auth required pam_google_authenticator.so
,/etc/pam.d/sshd
在手机上安装 Google Authenticator 或 androidtoken 应用程序,google-authenticator
在服务器上运行以进行设置,然后重新启动 ssh 服务。(这实际上是通用的 TOTP (RFC 6238),与 Google 无关,也不与他们交流 AFAIK。)如果您无法限制需要连接到您的 ssh 服务器的源地址的范围,请查看以下链接。诗人敲门基本上允许您根据客户端发送的数据包序列动态打开端口(维基百科会告诉您更多信息)
因此,除非您使用正确的代码敲击防火墙的门,否则端口将保持关闭状态。
http://www.portknocking.org
恕我直言,这不是我所说的优雅解决方案,需要客户,但这似乎符合您的需求。