/etc/fail2ban/filter.d/tomcat.conf:

/etc/fail2ban/filter.d/tomcat.conf:

这是我在 serverfault 上提出的第一个问题;)

我的配置:Debian 9.6、tomcat 8.5.14.0、fail2ban 0.9.6-2

我已经创建了一个 tomcat8 过滤器来检测多个 404 错误

/etc/fail2ban/filter.d/tomcat.conf:

[INCLUDES]
[Definition]
failregex =  ^<HOST>.*\/.*\/.*404
ignoreregex =

/etc/fail2ban/jail.d/defaults-debian.conf:

[tomcat]
enabled  = true
port     = http,https,8080,8443
ignoreip = 127.0.0.1/8 MyIP/8 MyIP/16
bantime = 1728000
findtime = 5
filter   = tomcat
logpath  = /var/log/tomcat8/localhost_access_log.*.txt
maxretry = 3

过滤器有效,但问题是,一天内可能没有对我的 tomcat web 应用程序的访问请求,因此我可能没有 tomcat 创建的当天的任何日志访问权限(我注意到该文件是在第一个请求时创建的)...因此,有关 fail2ban 工作的文件不存在...例如,我收到此错误:

2018-11-20 04:56:11,771 fail2ban.filterpoll     [18667]: ERROR   Unable to get stat on /var/log/tomcat8/localhost_access_log.2018-11-19.txt because of: [Errno 2] 
No such file or directory: '/var/log/tomcat8/localhost_access_log.2018-11-19.txt'

并且 fail2ban 停止了我的 tomcat jail......

最好的方法是什么?

  • 在 cron 中,检测日志访问文件是否存在,如果不存在则为当天创建它(使用 dateTime 参数的触摸方法)?

  • 编写一个 curl 请求脚本来强制 tomcat 创建日志访问文件,并强制 fail2ban 重新启动?

  • 其他 ?

答案1

基于ASCII 格式设置,只需创建一个 cron。他遇到了同样的问题:

  1. 使用 cron 设置日志轮换

    我在 Tomcat 轮换日志文件的方式上遇到了各种错误,因此我禁用了 Tomcat 的日志轮换并使用 cron...

如你看到的:

00 00 * * * /bin/cp /var/log/tomcat8/localhost_access_log.txt /var/log/tomcat8/localhost_access_log.$(/bin/date +\%Y-\%m-\%d -d "yesterday").txt && /usr/bin/truncate -s 0 /var/log/tomcat8/localhost_access_log.txt

这会将日志文件的内容复制到新文件,然后删除原始文件的内容。fail2ban 会将此事件检测为日志轮换

相关内容