Мне нужно реализовать fail2ban, чтобы защитить сервер. Я хотел бы просканировать логи и заблокировать хосты, которые генерируют много сообщений 404.
У меня проблема в том, что за определенным IP-адресом NAT может находиться несколько клиентов, и мне нужно различать их. Каждый клиент запрашивает разные 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
Используя эту конфигурацию, ваш сервер потребляет больше ресурсов ЦП, ища в журналах ответы 404, указывающие на преимущества безопасности или преимущества ЦП из-за отсутствия ответа 404 для X IP.
Если вам не нравится увидев эти ответы, не создавайте для них записи в журнале.