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

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

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

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 31536000

/etc/fail2ban/jail.conf

答案1

首先,定义无效用户的过滤器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

然后启用它jail.local

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

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

答案2

这是故意不支持fail2ban

换句话说,无效用户可能有 2 次尝试机会,而有效用户的无效密码有 5 次尝试机会。如何在 fail2ban 中实现这一点?

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

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

答案3

我无法帮助您使用 fail2ban,但我使用denyhosts 非常成功。您可以调整很多参数,它还有一个分布式数据库,您可以在其中发送和接收其他 badhosts。

以下是更详细的操作方法:

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

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

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

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

答案4

您可以通过启用 roundcube 部分来增强您的安全性。Roundcube 确实有可用的验证码插件可以缓解这种情况,但如果用户必须输入验证码才能登录邮件,他们会抱怨。

Fail2ban 为此提供了一个简单的解决方案。

首先,我们需要将 roundcube 添加到/etc/fail2ban/jail.conf

[roundcube]

enabled  = false

port     = http,https

filter   = roundcube

action   = iptables-multiport[name=roundcube, port="http,https"]

logpath  = [YOUR PATH TO ROUNDCUBE HERE]/logs/errors

maxretry = 5

findtime = 600

bantime = 3600

[YOUR PATH TO ROUNDCUBE HERE]将上面的内容更改为您的实际 roundcube 文件夹

例如/home/roundcube/public_html/logs/errors

接下来,我们需要创建一个过滤器。

添加/etc/fail2ban/filter.d/roundcube.conf

[Definition]

failregex = IMAP Error: Login failed for . from <HOST>(\. . in .?/rcube_imap\.php on line \d+ \(\S+ \S+\))?$

ignoreregex =

现在我们已经掌握了基础知识,我们需要测试我们的过滤器。为此,我们使用fail2ban-regex

享受

相关内容