如何在 fail2ban 中为 jail 指定多个日志文件?

如何在 fail2ban 中为 jail 指定多个日志文件?

嘿哟,

我正在使用 Ubuntu 15.10 和 fail2ban 0.9.3。Apache 设置了一组 Apache 虚拟主机。

我的 Apache2 日志文件位于子目录中,每个本地主机一个,例如和'/var/log/apache2/vwww_example_vhost_com/该子目录中的日志文件error.logaccess.log(或ssl_error.logssl_access.log)。

主要的 apache2 日志文件(用于本地主机和默认)位于/var/log/apache2

理想情况下,我希望能够对子目录进行通配符处理,并让 fail2ban 读取该子目录下的任何日志文件。

jail.local 手册页指出,要指定多个日志文件,必须在每个日志文件之间添加换行符和空格。这似乎不适用于通配符目录。

以下是其中一个监狱的默认配置:

[apache-auth]
port     = http,https
logpath  = %(apache_error_log)s
enabled  = true

目前我已经尝试过:

[apache-auth]
port     = http,https
logpath  = %(apache_error_log)s
           /var/log/apache2/*/*error.log
enabled  = true

将辅助日志文件路径放在换行符上,并以空格开头。此操作会出错并service fail2ban restart失败,并显示一条神秘(且无用)的错误消息。

失败了:

[apache-auth]
port     = http,https
logpath  = /var/log/apache2/*/*error.log
enabled  = true

尝试覆盖%(apache_error_log)s变量/etc/fail2ban/paths-overrides.local也失败:

[DEFAULT]
apache_error_log = /var/log/apache2/*error.log
               /var/log/apache2/*/*error.log

apache_access_log = /var/log/apache2/*access.log
               /var/log/apache2/*/*access.log

用空格指定日志文件掩码会导致出现“head or tail”错误,/var/log/fail2ban.log但服务仍会启动。但是,它根本不会使用日志文件。用分号分隔日志文件掩码可阻止 fail2ban 重新启动。

我的结论是,我将必须手动定义虚拟主机的目录名称,jail.local但我没有发现任何明确说明不能使用通配符子目录的内容。

有人对此有见解或有解决方法吗?

编辑:我刚刚尝试指定多个日志文件目录(目录名拼写出来)并使用相同的通配符文件名掩码paths-overrides.local,这也导致 fail2ban 无法启动。

答案1

到目前为止,目录 glob 似乎没有任何效果。

我发现的唯一解决方案是为每个子目录创建一个单独的条目。

我的每个虚拟主机在 /var/log/httpd 的子目录中都有各自的错误/访问日志。

为了获取错误日志列表(例如),我使用:

(ls -F /var/log/httpd/ | awk '/\// {print "/var/log/httpd/"$1"*error.log"}') | \
while read line; do \
    sed -i "/apache_error_log/a \\\t$line" /etc/fail2ban/paths-overrides.local ;
done

并且,当然,重复相同的命令,将“错误”改为“访问”。

(ls -F /var/log/httpd/ | awk '/\// {print "/var/log/httpd/"$1"*access.log"}') | \
while read line; do \
    sed -i "/apache_access_log/a \\\t$line" /etc/fail2ban/paths-overrides.local ;
done

检查 fail2ban,文件列表按预期显示

# fail2ban-client status apache-auth
Status for the jail: apache-auth
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list:    /var/log/httpd/error_log /var/log/httpd/myvhost/error_log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:   

可能不是您正在寻找的,但我希望这会有所帮助。

~ 克雷洛·阿达兰

答案2

对我来说我只是在我的自定义监狱配置文件中保持简单:

[apache-auth] 
enabled = true 
logpath = %(apache_error_log)s
          /var/log/apache2/*/*error.log

访问方式相同

[php-url-fopen]
enabled = true
logpath = %(apache_access_log)s
          /var/log/apache2/*/*access.log

然后我重新加载fail2ban-client后进行测试:

sudo fail2ban-client status apache-auth
sudo fail2ban-client status php-url-fopen

相关内容