iptables 暂时丢弃最近连接失败的 IP

Pie*_*e D 6 iptables linux-networking

我想降低在 linux 系统上成功进行 ssh 攻击的可能性。唯一打开的端口是 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 连接)入狱。

Den*_*ker 6

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