iptables 暂时删除最近连接失败的 IP

iptables 暂时删除最近连接失败的 IP

我想降低 ssh 攻击 Linux 系统的成功率。唯一开放的端口是 22(我对其他所有端口都使用端口转发),当然我确保 ssh 只接受基于密钥对的登录(无密码)。

失败的 ssh 登录尝试次数(输出last -f /var/log/btmp)相当大(任何开放 22 端口的人都应该预料到),因此在过去的 2 年多时间里,我一直依赖于经常提到的基于 iptables 的解决方案的变体来阻止 ssh 攻击,例如数百次 ssh 登录失败

这种方案的一个令人讨厌的缺点是,它限制了每个时间段内来自某个 IP 地址的新连接数,无论来自该 IP 的先前连接是否成功,也无论这些连接是否试图以同一用户身份登录。想象一下,一个脚本包含rsync来自国外的六个命令,用于更新该服务器上的各个区域:它通常会达到“新连接限制”并在中间某个地方失败。如果路由器后面的几个用户(显示为同一 IP 地址)确实几乎同时连接到我的服务器,情况也是如此。

所以,我想知道,无需解析/var/log文件,可以实施以下策略iptables

  1. 接受已建立的连接
  2. 允许来自先前成功的连接的新连接
  3. 将连接失败的 IP 关进监狱一段时间

奖励积分:

  1. 与上面相同,但是允许/监禁特定user@ip人而不是所有人@ip

为了遏制僵尸网络攻击,请执行以下操作:

  1. ssh 尝试失败后,暂时将用户关进监狱(无论他从哪个 IP 连接)。

答案1

如果不解析日志文件,您就无法知道 ssh 登录尝试是否成功。幸运的是,您不必自己解析这些日志文件。失败2ban可以帮你做到这一点。我通常会在 3 次登录尝试失败后将 IP 禁闭一周。

答案2

2020 年更新

现在我只使用sshguard(在容器上)或(虚拟机/裸机) - 所有这些都使用在非标准端口上监听的公钥。我仍然使用我的静态 IP 限制对此端口的访问fail2ban。我的配置使用 阻止攻击者 2 天。我仍然使用 ,但正在切换到。ipsetsshiptablesfail2banbantime = 48hvpnwireguard

也可以看看:

我也使用 Onlykey 来保护KeepassXC作为HMAC-SHA1第二个因素。它还可以与 Linux PAM 一起使用以登录到您的系统并且是必需的sudo

有了这个设置我就不用担心ssh被利用了。


首先不要监听sshport 22减少您的端口被自动扫描仪发现的机会。

还可psad用于自动阻止扫描您机器的主机可配置的时间量(默认为 1 小时)。

一个非常简单的解决方案就是租一个64 or 128 meg openvz集装箱&配置openvpn因此您有一个fixed ip address&然后将您的iptables规则限制--source vpn.ip.address在您希望保护的主机上。

更好的解决方案是ssh使用以下方法完全隐藏您的端口fwknop。然后无需运行fail2ban,因为您的ssh端口已关闭,直到您gpg从 发送签名和加密的数据包fwknop-client,这将打开您的防火墙一段可配置的时间(默认为 30 秒)。您还可以配置fwknop仅接受某些 IP 地址(例如您的vpn)。

我有一些这里有详尽的注释为了fwknop

如果你非常重视ssh安全,你也应该使用ed25519密钥。更多使用说明请点击此处安全密码openssh另一个不错的选择是tinyssh其中有对 & 的依赖openssl默认安全

这里提到的所有软件都存在于Alpine Linux这也受益于地址空间布局随机化通过PaX它的Grsecurity核心。

相关内容