
В своих журналах я регулярно вижу кучу ошибок 404, когда боты явно систематически сканируют сервер на предмет установки определенного ПО. Поскольку это также вызывает кучу трафика, я хочу их забанить.
Поэтому, основываясь на некоторых руководствах, я попытался найти RegEx для fail2ban, который отфильтровывает эти 404-запросы из журналов Apache и на основе этого блокирует соответствующие IP-адреса.
К сожалению, ни один из найденных и опробованных мной шаблонов RegEx не работает. Вот пример:
fail2ban-regex /var/log/apache2/other*access.log '^<HOST> - .* "(GET|POST|HEAD).*HTTP.*" 404 .*$'
(что мне кажется хорошим) ничего не находит:
Date template hits:
|- [# of hits] date format
| [1210] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 1210 lines, 0 ignored, 0 matched, 1210 missed
В этом файле журнала определенно есть несколько ошибок 404. Так что я делаю не так? Как должен выглядеть правильный RegEx, чтобы получить все ошибки 404?
Спасибо!
решение1
other_vhosts_access.log
по умолчанию имеет другой LogFormat vhost_combined
, который имеет префикс a vhost:port
по сравнению со стандартным common
LogFormat
. Вам необходимо изменить регулярное выражение соответствующим образом.
решение2
Вы пробовали это?
failregex = ^<HOST> - .* "(GET|POST|HEAD).*HTTP.*" 404 .*$
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)