我正在设置一个安全的服务器,仅用于存储encryption的文件,但需要从互联网上访问。 服务器本身处于安全的位置,没有任何物理访问,这很好,但我更担心互联网端。 除了打开ssh之外,我正在考虑使用Ubuntu和其他软件。
如何设置iptables来阻止除ssh之外的所有连接? 如何设置打开的SSHlocking超过2次失败的尝试?
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -m recent --name sshattack --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshattack --rcheck --seconds 60 --hitcount 4 -j LOG --log-prefix 'SSH REJECT: ' iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name sshattack --rcheck --seconds 60 --hitcount 4 -j REJECT --reject-with tcp-reset
看到,例如, 我的写在这个问题上的更多细节(包括在哪里放置防火墙的规则,这很重要)。
其他受访者的build议是只允许基于密钥的ssh我完全赞同,因为它使得暴力猜测密码无用; 但你可以走得更远,只允许双重身份validation,请参阅我在yubikey上的更多详细信息。
对于超安全只允许SSHKEY条目,而不是允许密码login。
对于SSH,我build议切换到仅密钥validation。 closures对守护程序和密码authentication期的根访问权限。 一旦基于密钥的身份validation是唯一的方法,就没有必要像你所build议的那样“locking”了。 这实际上只是减缓powershell密码攻击的有效方法。
iptables网站已经被@MadHatter回答了。
如果您希望在这些答案中提出的其他更好的措施上多加一些安全性,您可能需要考虑端口碰撞。 端口敲击可以很好地防止攻击者扫描服务器IP地址范围的攻击,这在我的经验中是迄今为止在现实生活中最常见的攻击。
以下是保护Linux ssh的基本指南。 这包括设置(并且仅使用)公共密钥authentication,禁用根login(和sudo)和使用非标准端口。
这是一个iptables指南 。
我使用Shorewall来configuration我的iptables规则,默认的策略是DROP everything,一个规则是接受SSH连接(当然,还有规则/策略,以允许传出stream量)。 这个效果和@MatHatter发布的效果差不多,但是我发现Shorewall比直接的iptables规则更容易configuration和使用。 (Shorewall是iptables的一个configuration层,使用一系列更易于理解的configuration文件来使用复杂的防火墙设置;它本身不是防火墙。)
接下来,build立你的SSH服务器,只允许基于密钥的身份validation,就像目前为止所有人所build议的那样 – 那就应该告诉你这是一个好主意!
为了满足你阻止暴力破解的要求,我强烈build议你设置Fail2ban,它可以设置多less次失败的阻止尝试,多长时间禁止违规的IP,甚至可以监控自己以实施更长时间的禁止持久的攻击者不会被第一级响应所阻止(请参阅Fail2ban站点上的HOWTO“Fail2ban monitoring Fail2ban”)。 你甚至可以设置有关Fail2ban响应的电子邮件通知:昨天晚上我设置了这一块,到今天早上它已经禁止了一个可能的中国黑客(基于IP的whois)。