Назад | Перейти на главную страницу

Fail2ban не распознает IP

У меня проблема, когда Fail2ban не смог распознать IP, поэтому я пытаюсь заблокировать неудачный доступ к MySQL, вот системный журнал быть под контролем

Sep  6 01:45:18 vps6XXXXX mysqld: 2019-09-06  1:45:18 140581192722176 [Warning] IP address '120.160.120.60' has been resolved to the host name '67.subnet120-160-120.speedy.telkom.net.id', which resembles IPv4-address itself.
Sep  6 01:45:18 vps6XXXXX mysqld: 2019-09-06  1:45:18 140581192722176 [Warning] Access denied for user 'global'@'120.160.120.60' (using password:YES)

Но fail2ban не смог прочитать IP-адрес из 120.160.120.60 обнаружен как 0.0.0.7 . Файлы журнала из fail2ban.log являются следующими

2019-09-06 01:45:18,742 fail2ban.filter [3793]: WARNING Determined IP using DNS Lookup: 7 = ['0.0.0.7'] 
2019-09-06 01:45:18,742 fail2ban.filter [3793]: INFO [mysql] Found 0.0.0.7

Вот мой обычай filter.d mysql.conf регулярное выражение

[Definition]
failregex = ^.*\[Warning\] Access denied for user.*<HOST>.*\(using password: YES\)$
ignoreregex =

Я не уверен, что этот fail2ban не может определить IP или мое регулярное выражение не сработает.

Буду признателен за любые предложения или решения по этой проблеме. Спасибо.

Хотя известны похожие раздражающие проблемы с двойной меткой времени (некоторые службы или системный журнал записывают двойные даты и время, одно впереди, а другое в теле сообщения), я не знаю, почему формат сообщения журнала меняется от системы к системе.

В любом случае это нужно исправить сейчас (см. https://github.com/fail2ban/fail2ban/commit/50595b70fd4e2563ba816acf4877775eda36e248).

Кстати. Ваше регулярное выражение немного "уязвимо", потому что не привязано (^.* не имеет смысла) и содержит обобщающие (.*) до и после <HOST>.

Регулярное выражение в исходном вопросе разрешает <HOST> только на запчасти:

  • IP_V4_RE: 0.160.120.60
  • DNS: 0

(видеть https://github.com/fail2ban/fail2ban/search?q=IP_4_RE&unscoped_q=IP_4_RE для получения подробной информации о внутренних выражениях fail2ban для <HOST>)

При настройке на следующее принимающая часть будет считаться правильно:

failregex = ^.*\[Warning\] Access denied for user '[^']+'@'<HOST>' \(using password: YES\)$

Пользовательское регулярное выражение, похоже, не учитывает другие возможности, например, определено в https://github.com/fail2ban/fail2ban/blob/0.11/config/filter.d/mysqld-auth.conf#L20

failregex = ^%(__prefix_line)s(?:\d+ |\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[\w+\] (?:\[[^\]]+\] )*Access denied for user '[^']+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$