如何使用 denyhosts 和或 fail2ban 阻止所有 root 登录尝试?

sam*_*ell 10 security denyhosts fail2ban ubuntu-10.04

我目前使用 root 阻止所有 ssh 登录。但是我想加倍努力并阻止尝试以 root 身份登录的客户端的 IP 地址。我目前有 denyhosts 和 fail2ban 设置和工作,我可以使用 denyhosts 和或 fail2ban 来阻止那些尝试以 root 登录的人的 IP 地址吗?

小智 20

将此代码复制到新文件 /etc/fail2ban/filter.d/sshd-root.conf 中:

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = sshd

failregex = ^%(__prefix_line)sFailed (?:password|publickey) for root from <HOST>(?: port \d*)?(?: ssh\d*)?$

ignoreregex = 
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要编辑 failregex 以准确识别失败的 root 登录尝试 - 使用:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd-root.conf
Run Code Online (Sandbox Code Playgroud)

以测试它是否识别了正确的日志条目。

然后你需要编辑你的 jail.local 以使用新的过滤器 - 添加如下内容:

[ssh]

enabled  = true
port     = 1:65535
filter   = sshd-root
logpath  = /var/log/auth.log
bantime  = 604800
maxretry = 3
Run Code Online (Sandbox Code Playgroud)

显然,您应该根据需要调整这些值。上述设置将在三次尝试以 root 身份登录后丢弃来自违规 IP 地址的所有传入数据包,并在一周后再次释放 IP。

  • 这确实值得被接受的答案,因为它实际上回答了这个问题。 (3认同)

Chr*_*ris 2

根据您的发行版,编辑/etc/fail2ban/jail.conf 更新[ssh]部分以显示类似的内容

[ssh]

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

根据需要更改参数。它不会专门阻止root,但会阻止每一次失败的尝试。小心maxretrybantime。如果您使用自己的密码失败,当maxtretry设置为低时,您会阻止自己访问bantime. 重新启动fail2ban。

我不会尝试永远阻止 IP,因为很多尝试来自动态 IP,这可能会在以后阻止一些合法用户。

(某些发行版提供了一个ijil.options文件供您进行修改。这是放置更改的首选位置,因为它不应该受到覆盖conf的更新的影响。)

  • 很好的信息,但我认为他想知道如何阻止使用 root 用户的所有登录...在您的答案中看不到这一点。也许你忘了这一点。 (4认同)