Мне нужно реализовать fail2ban для защиты сервера. Я хотел бы сканировать логи и банить хосты, которые генерируют много сообщений 404.
Проблема, с которой я столкнулся, заключается в том, что за определенным NAT'd IP может находиться несколько клиентов, и мне нужно различать их. Каждый клиент запрашивает другой URL в следующем формате:
https://server.example.com/path/<uniqueid>/<mac_address>
Я хотел бы запустить fail2ban так, чтобы он учитывал уникальный идентификатор в регулярном выражении, а не просто смотрел на количество ошибок 404 на IP-адрес.
Я разработал следующее регулярное выражение, которое, по-видимому, перехватывает необходимые события:
(?P<host>(\d{1,3}.){4})\ -\ -\ \[\d{1,2}\/\w+\/\d{4}[\:\d{2}]+\ \+\d{4}\] "GET \/path\/(?P<unique_id>.+)\/.+HTTP\/\d.\d" ".+" ".+" 404.+
Это должно соответствовать:
1.1.1.11 - - [29/Aug/2018:01:27:45 +0100] "GET /path/3B44444444483/ddddee37D4.cfg HTTP/1.1" "somestring" "otherstring" 404 - 2005 5 0.117
И это должно совпадать, но считаться другим примером, нежели приведенный выше:
1.1.1.11 - - [29/Aug/2018:01:27:45 +0100] "GET /path/3B46666444483/ddddee37D4.cfg HTTP/1.1" "somestring" "otherstring" 404 - 2005 5 0.117
решение1
При использовании этой конфигурации ваш сервер потребляет больше ресурсов ЦП, просматривая ответы 404 в журналах, чем обеспечивает какую-либо выгоду для безопасности или ЦП от необработки ответа 404 для X IP.
Если вам не нравятся эти ответы, не создавайте для них записи в журнале.