
Основываясь на этомрепозиторийЯ хочу использовать фильтры 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+))
не будет соответствовать. Не уверен, как мне изменить regex, чтобы он соответствовал моему формату журнала.
Есть идеи?
решение1
Честно говоря, не тратьте на это свой процессор, "WebExploits" на самом деле просто фоновый шум. Использование fail2ban для уменьшения количества веблогов на самом деле не обеспечивает преимущества безопасности.
Если вам действительно необходимо, поставьте $server_name
после $remote_addr -
формата журнала nginx, который соответствует (не) понятию регулярных выражений WebExploits.
Поочередно замените ^<HOST>
в вашем регулярном выражении на ^[^ ]* <HOST>
. Это означает соответствие непробельным символам, за которыми следует пробел, за которым следует<HOST>