限制每日 ssh 连接数

限制每日 ssh 连接数

通过 PAM 来完成这个是否最好?

答案1

您可以通过多种方式实现这一点。您可以使用 pam_tally(最好是 pam_tally2)模块来限制用户通过 SSH 连接的次数,例如

auth     required       pam_tally.so deny=10 unlock_time=60 per_user

限制每个用户每分钟登录 10 次。

这当然不会以任何方式阻止与 SSH 守护进程的连接。为此,您应该使用 netfilter 和最近的模块

iptables -A INPUT -tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -tcp --dport 22 -m state --state NEW -m recent --update --hitcount 10 --seconds 20 -j DROP

限制每个主机(无论登录成功或失败)每 20 秒最多连接 10 次。

您可以通过编写脚本(由 pam_exec.so 执行)让 PAM 重置 iptables 计数器,该脚本执行 echo "-IPaddress" > /proc/net/xt_recent/nameoftherecentlist 或添加执行相同操作但使用 echo "+IPaddress" > ... 的不受信任的主机

更多信息请访问: http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_tally.htmlhttp://www.debian-administration.org/articles/187当然还有 man 命令。

答案2

我认为 PAM 就是这里的答案,这通常是您放置任何类型的系统范围的身份验证挂钩的地方。

我不知道有任何现有的 PAM 模块可以满足您的要求,但有一个名为pam_exec它允许您使用外部脚本。您可以编写一个脚本,根据任何标准接受/拒绝用户。这绝对比尝试用 C 实现自己的模块容易得多。

对于这种特殊情况,您的脚本可以解析输出last并计算用户今天登录的次数。

答案3

回答你提出的问题:

通过 PAM 来完成这个是否最好?

不。

答案4

您可以通过功能足够强大的外部负载均衡器来实现这一点,例如 Zeus ZXTM、Cisco ACE 或 Brocade/Foundry ServerIron。

相关内容