限制防火墙中的连接源

我是服务器pipe理新手,为防火墙写了一个IPTables脚本。 我非常关心服务器的安全性,因此我想知道一些我经常从使用防火墙的人那里读到的东西,这些东西限制了连接到服务器的SSH连接的来源。

问题在于我的服务器是我租用的远程服务器,作为从家里和工作中连接到服务器的人,我没有理由相信我的家庭和工作IP将永远保持不变。 所以,如果我将SSH的来源限制在我的服务器上,那么如果我的IP在家里发生变化呢? 如果我去其他国家旅行,想要访问我的服务器呢? 我旅行很多。

这听起来像是我想念的东西…所以你们可以解释一下解决这个问题的有效方法吗?

问题是:我怎样才能限制SSH连接的来源,而不限制我自己的访问我的服务器?

感谢您的努力。

Iptables并不是解决这个问题的正确工具,因为它仅限于通过诸如源地址,目的地址,端口,协议等类似的简单参数进行过滤。

您应该按照此Ubuntu文档HowtTo中所述设置SSH公钥身份validation,然后使用此Linux.org HowTo强制进行PK身份validation。

您可以通过阻止来自您不知道您计划旅行的国家/地区的源IP地址的SSH来增强此function。 然而,一个坚定的攻击者可能会有来自几乎任何国家的攻击点,所以这是有限的利益。

正如在@Jonathan Ben-Avraham的回答中,首先要做的是禁用密码访问并切换到公钥。 当然,这要求您不要丢失私钥:将备份副本保存在一个安全的地方。

您应该采取的第二种方法是限制传入SSH连接的数量。 添加一个iptables规则

iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \ -m hashlimit --hashlimit-above 1/min --hashlimit-mode srcip \ --hashlimit-name ssh --hashlimit-burst 5 -j REJECT 

这个想法是,你可以(尝试)login五次,但是你被冻结了一分钟。 这将不会给授权用户带来不便,但是尝试每个在网上浮动的密码(或私钥)的黑客脚本,试图find一个匹配,将被相当有效地阻止。

您可能还想添加双因素身份validation。 这个链接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服务器的源地址范围,请看下面的链接。 诗人敲门基本上可以让你dynamic地打开端口基于客户端发送的数据包序列(维基百科会告诉你更多)

所以,除非你用正确的代码敲你的防火墙的门,否则这个端口将保持closures状态。

http://www.portknocking.org

恕我直言,它不是我所说的优雅的解决scheme,需要一个客户端,但似乎符合您的需求。