嘿哟,
我正在使用 Ubuntu 15.10 和 fail2ban 0.9.3。Apache 设置了一组 Apache 虚拟主机。
我的 Apache2 日志文件位于子目录中,每个本地主机一个,例如和'/var/log/apache2/vwww_example_vhost_com/
该子目录中的日志文件error.log
或access.log
(或ssl_error.log
和ssl_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