Answers:
根据您的分布,编辑/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文件供您进行修改。这是放置更改的首选位置,因为更改不会受到覆盖conf的更新的影响。)
将此代码复制到新文件/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。
由于默认值/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
您如何阻止ssh登录?/ bin / false还是sshd_config DenyUsers选项?
我想不出一个答案,但是IIRC denyhosts解析了日志文件,所以只要看看有人尝试禁用它登录到root后,您是否在日志文件中输入了失败的条目
/etc/ssh/sshd_config
然后PermitRootLogin
从yes 更改为no。我不知道这是否相关,但是我确实安装了rssh,仅允许某些用户使用sftp登录,但不允许ssh。