如何在fail2ban监狱中指定多个日志文件模式?

Akh*_*gam 1 fail2ban

我的服务器上有如下日志文件

vpn_20191007.log
vpn_20191008.log
vpn_20191009.log
vpn_20191010.log
vpn_20191011.log
vpn_20191012.log
vpn_20191013.log
vpn_20191014.log
vpn_20191015.log
vpn_20191016.log
Run Code Online (Sandbox Code Playgroud)

是否可以在fail2ban监狱配置中添加日志文件模式?

    [application]
    enabled  = false
    filter   = example
    action   = iptables
    logpath  = /var/log/vpn_%D.log
    maxretry = 1
Run Code Online (Sandbox Code Playgroud)

seb*_*res 5

嗯,有条件的话是可以的……

虽然目前基本上允许使用通配符,所以:

logpath  = /var/log/vpn_*.log
Run Code Online (Sandbox Code Playgroud)

会完成这项工作,但在你的情况下有点难看:

  • fail2ban 仅在服务启动时累积文件列表,因此该列表仍然在fail2ban 中获得(除非重新加载) - 这意味着您应该通知fail2ban 日志文件名已更改(请参阅https://github.com/fail2ban /fail2ban/issues/1379,工作正在进行中)。
  • 由于只有一个文件会收到新消息,因此不需要监视其他文件,特别是在使用轮询后端的情况下。

logrotate因此最好为此制定一些规则:

  • 为了重命名/压缩所有以前的日志文件(以避免匹配过时的文件);
  • 为具有固定名称的最后/活动文件创建硬链接或符号链接(因此fail2ban始终能够找到具有相同名称的文件,并且根本不需要通配符);
  • 或者如果日志文件名发生更改,则通知fail2ban重新加载监狱
    fail2ban-client reload vpn)。

以下是 logrotate 修改的示例:

    postrotate
        nfn="/var/log/vpn_$(date +%Y%m%d).log"
        touch "$nfn"
        ln -fs "$nfn" /var/log/vpn.log
Run Code Online (Sandbox Code Playgroud)