CentOS 6.5上的Fail2Ban从不禁止

环境:* CentOS 6.5 * Fail2Ban 0.8.14-1 *date输出正确的date

行为:Fail2ban成功启动,但在SSHlogin尝试失败后不会创buildiptables块。 我现在只关心SSH。 我试图重新安装使用本指南: https : //www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-6

Fail2Ban曾经工作 – 但通过系统更新,似乎已停止工作。 如果我跑

sudo service fail2ban restart 

我收到一封电子邮件,说监狱已经停了,另一封电子邮件说监狱已经开始了,所以看起来fail2ban正在运行并且function正常。

我的/etc/fail2ban/jail.local文件包含条目:

 [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"] logpath = /var/log/secure maxretry = 5 

我的IP地址没有在ignoreip delcaration中列出。 我使用的是600的标准禁用时间,600的发现时间,以及3的最大时间。

当我看着/ var / log / secure时,我看到很多失败的尝试:

 Sep 30 00:17:02 nebo unix_chkpwd[3796]: password check failed for user (root) Sep 30 00:17:02 nebo sshd[3794]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.173.26.189 user=root 

iptables -L似乎报告fail2ban确实有一个链:

 Chain fail2ban-SSH (2 references) target prot opt source destination RETURN all -- anywhere anywhere 

我目前最好的做法是在actions.d / sshd.conf中的sshd动作使用正则expression式来查看日志文件,但它与CentOS日志的当前语法不匹配,以禁止尝试。

时间是同步的: 为什么不是fail2ban阻塞失败?

Ran fail2ban-regex来testing我的理论,看起来我可能会走在正确的轨道上:

 [isdept@nebo action.d]$ sudo fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf Running tests ============= Use failregex file : /etc/fail2ban/filter.d/sshd.conf Use log file : /var/log/secure Results ======= Failregex: 0 total Ignoreregex: 0 total Date template hits: |- [# of hits] date format | [22655] MONTH Day Hour:Minute:Second `- Lines: 22655 lines, 0 ignored, 0 matched, 22655 missed Missed line(s): too many to print. Use --print-all-missed to print all 22655 lines 

我不完全确定如何修改正则expression式来解决这个问题(如果这是个问题),但是我很惊讶地发现自从CentOS很常见以后,我还没有find一个简单的解决方法。 我很乐意提供任何额外的信息。 感谢您的任何提示或指示,你可以给!

为了安全起见 – 我目前禁止公开访问这个主机。

那么,我不是正则expression式大师(甚至是新手),但我确实设法通过添加:

 ^.*authentication failure;.*rhost=<HOST> 

到filters.d / sshd.conf。 这样做了,我已经成功地禁止了我的第一个主机。 如果任何正则expression式的专家想要参加,我会非常感激。 我敢肯定,在这个简短的expression中,我错过了某种情况下会失败的情况。

谢谢!

我今天也在处理同样的问题,也在6.5上。

在我的情况下,发行文件名为filters.d / sshd.conf,而不是像你所写的那样被filters.d / sshd-iptables.conf。 不知道为什么你和我的会不一样。 但无论如何我相信问题是一致的。

我的secure.log中的一个例子是这样的:

 Oct 11 11:11:11 myhostname sshd[12345]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=1.2.3.4 

在distro filters.d / sshd.conf中最接近匹配的failregex是这样的:

 ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via \S+)?\s*$ 

这显然不符合上面的例子,因为“from”和“via”string,没有“rhost =”string。 我在下面列出了解决这个问题的尝试。

  • 第一个mod,不匹配:

     ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error); .* rhost=<HOST> .*$ 
  • 第二个mod,不匹配:

     ^%(__prefix_line)[aA]uthentication (?:failure|error); .* rhost=<HOST> .*$ 
  • 第三个mod,匹配:

     [aA]uthentication (?:failure|error); .* rhost=<HOST> .*$ 

__prefix_line正则expression式子expression式来自filters.d / common.conf,是一个很好的尝试来匹配已知的Linux日志条目前缀格式的每一个可能的排列,但不幸的是它需要对我们特定的centos 6.5情况进行一些调整。 我可能会采取一些措施,但是先看一下common.conf中的正则expression式会让我头疼。 没有__prefix_line的复杂正则expression式可能就足够了。

@SteadH在你的第一篇文章中你有这样的:

 [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"] logpath = /var/log/secure maxretry = 5 

[ssh-iptables] :是filter的名称/参考和

filter = sshd :是/filter.d中的正则expression式filter(sshd.conf)

那么你最后的post是你正在编辑的sshd-iptables.conf? 你做了你的fail2ban-regex检查sshd.conf? 你使用哪个文件? 以及哪一个存在或两者存在。 我可以帮你一个正则expression式模式,但我需要确保我看着正确的模式匹配。

@SteadH根据你的解决scheme,我发现了问题的根源。 sshdfilter都以'$'(dollar)结尾,在一些正则expression式中(我注意到你的修复没有)。 那么,我删除了美元,中提琴! 它开始工作! 我认为这可能会导致“$”无法正常工作。 无论如何,请尝试修复。