SSH / SSHD - 如何设置最大登录尝试次数?

Joh*_*man 23 security ssh

在 LAMP 环境(通过 yum 安装 sshd)中设置最大登录尝试次数的最简单方法是什么?是否有软件包或简单的防火墙规则?

小智 56

我不喜欢使用任何第三方工具。因此,我结合使用了 ssh 配置和防火墙设置。使用以下解决方案,允许攻击者在 2 分钟内产生恰好 3 次错误登录,否则他将被阻止 120 秒。

1) 将以下行添加到 /etc/ssh/sshd_config

MaxAuthTries 1
Run Code Online (Sandbox Code Playgroud)

这将允许每个连接仅进行 1 次登录尝试。重新启动 ssh 服务器。

2)添加以下防火墙规则

创建一个新链

iptables -N SSHATTACK
iptables -A SSHATTACK -j LOG --log-prefix "Possible SSH attack! " --log-level 7
iptables -A SSHATTACK -j DROP
Run Code Online (Sandbox Code Playgroud)

阻止每个 IP 地址 120 秒,这会在 120 秒内建立三个以上的连接。在第四次连接尝试的情况下,请求被委托给SSHATTACK链,它负责记录可能的 ssh 攻击并最终丢弃请求。

iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --set
iptables -A INPUT -i eth0 -p tcp -m state --dport 22 --state NEW -m recent --update --seconds 120 --hitcount 4 -j SSHATTACK
Run Code Online (Sandbox Code Playgroud)

3) 查看可能的 ssh 攻击的日志条目 /var/log/syslog

Dec 27 18:01:58 ubuntu kernel: [  510.007570] Possible SSH attack! IN=eth0 OUT= MAC=01:2c:18:47:43:2d:10:c0:31:4d:11:ac:f8:01 SRC=192.168.203.129 DST=192.168.203.128 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30948 DF PROTO=TCP SPT=53272 DPT=1785 WINDOW=14600 RES=0x00 SYN URGP=0
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样经验不足的人:iptables 行是在 bash 提示符下输入的,而不是输入到某个文件中。 (3认同)
  • 惊人的!但我有一个问题,法国的某个家伙/机器人没有正确配置他的黑客工具,所以他一直登录,即使他的流量下降了。结果,我的日志每秒都充满了这个家伙的数据。有什么办法解决这个问题吗? (2认同)

Kro*_*mey 12

我使用Fail2ban;我过去使用过Denyhosts,它也运行得很好。我现在更喜欢 Fail2ban,因为它更具可配置性,并且更能够处理多个不同服务的监控——例如,您的 sshd 和 Web 应用程序的登录页面同时(如果您记录失败)。

您可能会考虑的另一种方法是在iptables; 中实现 LIMIT 规则。不幸的是,我无法帮助您解决这个问题,除非您想安装Shorewall,然后我只是将您指向该站点上的优秀文档,了解如何配置 LIMIT 规则以限制某人的暴力行为- 强制您的服务器。


小智 6

没有与 SSH 关联的特定包来进行此设置。但是,您可以安装 CSF,即 ConfigServer 和 Firewall。

脑脊液

我建议在文件中进行两个配置更改:/etc/ssh/sshd_config

限制 ssh 服务器同时处理的未经身份验证的连接的最大数量。这个值越小,脚本小子就越难通过多个连接进行并行、协调的破解尝试。编辑 sshd_config 并将 MaxStartups 从默认值“10”更改为“3:50:10”。冒号分隔的值告诉 ssh 服务器“允许 3 个用户同时尝试登录,并随机且逐渐地丢弃 3 到最多 10 次之间的连接尝试”。注意:在有大量有效 ssh 用户登录的服务器上应该增加此值。

  • 默认值:MaxStartups 10
  • 最大初创公司 3:50:10

减少断开连接之前允许成功登录的最长时间。默认值 2 分钟对于保持未经身份验证的连接尝试的时间太长(见上文);30 秒对于登录来说已经足够了:

  • 默认值:LoginGraceTime 2m
  • 登录宽限时间 30


bel*_*zar 5

我为此使用这些 IPTables 规则:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 4 --rttl  --name SSH -j DROP
Run Code Online (Sandbox Code Playgroud)

这将只允许 4 个 TCP/SYN 数据包在 5 分钟内从一个 IP 地址发送到端口 22。如果它进行更多尝试,则门将关闭,直到 5 分钟结束。