我目前阻止所有使用 root 的 ssh 登录。但我想再进一步,阻止尝试以 root 身份登录的客户端的 IP 地址。我目前已设置并运行了 Denyhosts 和 fail2ban,我可以使用 Denyhosts 和 fail2ban 阻止那些尝试以 root 身份登录的人的 IP 地址吗?
答案1
根据您的发行版,编辑/etc/fail2ban/jail.conf
更新[ssh]
部分以显示类似这样的内容
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = 3600
maxretry = 3
根据需要更改参数。它不会专门阻止 root,但会阻止每次失败的尝试。小心使用 和maxretry
。bantime
如果您使用自己的密码失败,而maxtretry
设置为低,则会阻止自己使用bantime
。重新启动 fail2ban。
我不会尝试永远阻止 IP,因为很多尝试来自动态 IP,这可能会在以后阻止一些合法用户。
(某些发行版提供了 jail.options 文件供您进行修改。这是放置更改的首选位置,因为它不会受到覆盖配置文件的更新的影响。)
答案2
将此代码复制到新文件 /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 =
请注意,您可能必须编辑 failregex 才能准确识别失败的 root 登录尝试 - 使用:
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd-root.conf
测试它是否识别正确的日志条目。
然后您需要编辑您的 jail.local 以使用新的过滤器 - 添加类似以下内容:
[ssh]
enabled = true
port = 1:65535
filter = sshd-root
logpath = /var/log/auth.log
bantime = 604800
maxretry = 3
显然,您应该根据需要调整这些值。上述设置将在三次尝试以 root 身份登录后丢弃来自有问题的 IP 地址的所有传入数据包,并在一周后再次释放该 IP。
答案3
由于默认值/etc/fail2ban/filter.d/sshd.conf
已经有 AllowUsers 和 DenyUsers 的正则表达式...
...
^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$
^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$
...
以下将:
- 允许来自
exampleusername
外部 IP 的连接 - 以及
root
本地网络上的任何连接(192.168.0.*)
行“/etc/ssh/sshd_config”:
AllowUsers exampleusername *@192.168.0.* *@localhost *@127.0.0.1
并且/etc/fail2ban/jail.conf
:
ignoreip = 127.0.0.1/8 192.168.0.2/255
...
...
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 1
findtime = 99999999
bantime = 99999999
答案4
您是如何阻止 ssh 登录的?/bin/false 还是 sshd_config DenyUsers 选项?
我无法想出一个答案,但 IIRC 拒绝主机会解析日志文件,因此,在有人尝试在禁用它的情况下登录 root 后,只需查看日志文件中是否出现失败条目