如何使用denyhosts和/或fail2ban阻止所有rootlogin尝试?

我目前使用root阻止所有sshlogin。 但我想多走一步,阻止试图以root身份login的客户端的IP地址。 我目前有denyhosts和fail2ban设置和工作,我可以使用denyhosts和或fail2ban来阻止那些试图以root身份login的IP地址?

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

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

根据需要更改参数。 它不会专门阻止根,但每一次失败的尝试。 小心, maxretry利用bantime 。 如果你用自己的密码失败,而maxtretry设置为低,你阻止自己的bantime 。 重新启动fail2ban。

我不会试图永远封锁IP,因为很多尝试都来自于dynamicIP,这些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才能准确识别失败的根login尝试 – 使用:

 fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd-root.conf 

testing它是否确定了正确的日志条目。

然后你需要编辑你的jail.local来使用新的filter – 添加如下内容:

 [ssh] enabled = true port = 1:65535 filter = sshd-root logpath = /var/log/auth.log bantime = 604800 maxretry = 3 

显然你应该根据你的需要调整这些值。 上面的设置将三次尝试以root用户身份login后,将所有传入的数据包从有问题的IP地址中删除,并在一周后再次释放IP。

由于默认的/etc/fail2ban/filter.d/sshd.conf已经有AllowUsers和DenyUsers的正则expression式了…

 ... ^%(__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*$ ... 

以下将会:

  • 允许来自外部IP的exampleusername连接
  • 和本地networking上的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 

你是如何阻止sshlogin? / bin / false或sshd_config DenyUsers选项?

我想不出一个答案,但我的头,但IIRC denyhosts分析日志文件,所以只要看看你是否有一个失败的日志文件中的条目后,一些人尝试login到根与它禁用