Fail2Ban 或 DenyHosts 阻止无效用户名 SSH 登录尝试

sla*_*213 7 iptables security networking fail2ban

当用户尝试以任何无效用户名登录时,有没有办法自动阻止 IP 地址?我已经有了:

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 31536000
Run Code Online (Sandbox Code Playgroud)

/etc/fail2ban/jail.conf

cwe*_*ske 9

首先,在 中定义无效用户的过滤器filter.d/sshd-invaliduser.conf

[INCLUDES]
before = common.conf

[Definition]
_daemon = sshd

failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .*? from <HOST>(?: port \d+)?\s*$
ignoreregex = 

[Init]
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
Run Code Online (Sandbox Code Playgroud)

然后在jail.local

[sshd-invaliduser]
enabled = true
maxretry = 1
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Run Code Online (Sandbox Code Playgroud)

这适用于 Debian 9 上的 fail2ban 0.9.6-2。


sup*_*cuo 6

这是故意不支持的fail2ban

换句话说,无效用户可以尝试 2 次,而有效用户的无效密码可以尝试 5 次。如何在fail2ban 中做到这一点?

反对这样做的一个令人信服的论据是,它让攻击者知道用户名是否有效,从而大大减少了暴力攻击的搜索空间。

我在尝试做同样的事情时发现了你的问题,但现在我改变了主意。除了保密好处之外,为什么要提前切断攻击者的攻击来节省时间呢?


oer*_*dnj 5

我无法帮助你处理fail2ban,但我正在非常成功地使用denyhosts来完成这件事。您可以调整很多参数,它还有一个分布式数据库,您可以在其中发送和接收其他 badhost。

这里有更详细的操作方法:

安装denyhosts包( sudo apt-get install denyhosts)

查看 中的默认配置,您可能会对和选项/etc/denyhosts.conf感兴趣。DENY_TRESHOLD_INVALIDDENY_TRESHOLD_VALIDDENY_TRESHOLD_ROOT

至于同步服务器,默认情况下它是禁用的,您需要通过取消注释SYNC_SERVER选项来启用它。

将选项设置为 1w 或类似的值也不错,PURGE_DENY以防万一您自己被封锁,因此该条目将在一周后被清除,您将能够再次登录。