Основываясь на этом хранилище Я хочу использовать фильтры fail2ban для анализа журналов nginx и блокировки подозрительных запросов и IP-адресов.
На своем сервере я использую собственный формат журнала для nginx. Поскольку я размещаю несколько сайтов, файлы журналов имеют следующую структуру.
log_format custom_format '$server_name $remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'
Что создаст такую запись в журнале:
www.example.com 62.210.129.246 - - [24/Aug/2018:11:07:46 +0200] "POST /wp-login.php HTTP/1.1" 301 185 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
Из-за того, что я добавляю server_name перед remote_addr, <HOST>
regex-group (fail2ban разрешает это в (?:::f{4,6}:)?(?P<host>\S+))
не совпадает. Не уверен, как мне изменить регулярное выражение, чтобы оно соответствовало моему формату журнала.
Любые идеи?
Честно говоря, не тратьте на это свой процессор, «WebExploits» на самом деле просто фоновый шум. Использование fail2ban для уменьшения количества веб-журналов на самом деле не дает преимущества в плане безопасности.
Если действительно необходимо, поставьте $server_name
после $remote_addr -
в формате журнала nginx, который соответствует (не) понятию регулярных выражений WebExploits.
Поочередно заменить ^<HOST>
в вашем регулярном выражении с ^[^ ]* <HOST>
. Это означает соответствие непробельным символам, за которыми следует пробел, за которым следует <HOST>