在“n”次 SSH 登录失败后,如何暂时禁止某个 IP 地址?

在“n”次 SSH 登录失败后,如何暂时禁止某个 IP 地址?

如何限制每个 IP 每分钟的 SSH 登录尝试次数?

我想在失败后 5 秒内禁用登录尝试。这可能吗 ?我不是在谈论像 Fail2ban 这样解析日志后禁止用户。

答案1

问题1

这可以通过模块来完成hashlimit

iptables -A INPUT -p tcp --dport 22 -m hashlimit \
  --hashlimit-mode srcip --hashlimit-above 3/minute -j DROP

问题2

Netfilter 只看不到登录失败的连接。您需要一个在两个级别上都有效的工具(例如 Fail2ban)。您可以创建一个包含被阻止的 IP 的链,并在每次登录失败后运行一个脚本,这会执行类似的操作

iptables -A blocked_ips -s $evil_ip -j DROP
sleep 5
iptables -D blocked_ips -s $evil_ip -j DROP

答案2

查看iptables

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 5 --hitcount 2 -j DROP

它将每 5 秒只允许每个 IP 建立 1 个新连接。

答案3

GNU/Linux 系统上负责身份验证的组件是 PAM(可插入身份验证系统)。

您可以通过添加模块来配置它。您的案例中一个有趣的模块可能是pam_tally.它用于限制登录尝试次数并禁止用户。

如果您在其中一个/etc/pam.d/配置文件中添加这一行:

auth     required       pam_tally.so deny=1 unlock_time=5 per_user

您可以阻止登录失败的用户在接下来的五秒内再次尝试。因此,您将每分钟的连接尝试次数限制为 12 次。

参考:

答案4

在 /etc/ssh/sshd_config 文件内有一个指令,我相信会对您有所帮助。

MaxAuthTries 6

以下是手册页中的 MaxAuthTries 定义:

MaxAuthTries - 指定每个连接允许的最大身份验证尝试次数。一旦失败次数达到该值的一半,就会记录更多失败。默认值为 6。

相关内容