И снова fail2ban — на этот раз охраняем ProFTP и Dovecot

Собственно, это уже совсем … скучно. И тем не менее…

Просмотр логов показывает, что и в ftp-сервер мой постоянно кто-то пытается попасть «мимо кассы»:

Янв 19 07:54:36 dmitrykhn.homedns.org proftpd[27832] dmitrykhn.homedns.org (82.213.28.12[82.213.28.12]): USER service: no such user found from 82.213.28.12 [82.213.28.12] to 192.168.1.115:21
Янв 19 07:54:37 dmitrykhn.homedns.org proftpd[27832] dmitrykhn.homedns.org (82.213.28.12[82.213.28.12]): USER service: no such user found from 82.213.28.12 [82.213.28.12] to 192.168.1.115:21

…и в почтовый сервер тоже:

Feb  1 00:10:12 dmitrykhn dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=, method=PLAIN, rip=59.124.32.168, lip=192.168.1.115
Feb  1 00:10:19 dmitrykhn dovecot: pop3-login: Disconnected (auth failed, 1 attempts): user=, method=PLAIN, rip=210.202.39.205, lip=192.168.1.115

Что же тогда, сидеть и ждать? Решил я воспользоваться все тем же fail2ban — он и так уже трудится, вот пусть теперь и тут еще постарается…

С ProFTP, как мне казалось, все будет просто — соответствующий фильтр в наборе fail2ban имелся. Взял я программу fail2ban-regex и скормил ей файл протокола /var/log/proftpd/proftpd.log в паре с данным фильтром (как пользоваться fail2ban-regex я уже писал тут). Совпадения нашлись, и почти все было бы хорошо, если бы не одно «но». Программа fail2ban-regex сказала, что моя дата не подходит ни под один из известных ей шаблонов. Как я понял, единственное, что могло смутить fail2ban-regex в моей дате, так это тот язык, на котором она была выведена. То есть, «пришла беда, откуда не ждали». То ли авторы дистрибутива Mandriva, используемого мной, то ли авторы ProFTP, решили сделать мне «хорошо» — раз уж выбрал я русский язык, то пусть и протокол будет на русском. В принципе, оно конечно хорошо — понятнее. Даже не смотря на то, что русского того там в протоколе  — аж целых три буквы в имени месяца!..

В принципе, программа ProFTP (как я понял) использует тот язык, который в момент ее запуска указан в системе в качестве системного. Что ж, подумал я, если в момент запуска ProFTP указать, что системный язык английский, то есть шанс, что и сообщения в лог пойдут тоже на нем. Сказано — сделано. Пошел я в папку /etc/init.d и нашел в ней скрипт запуска сервера ProFTP (файл proftpd). Открыл его в редакторе и нашел в нем следующую строку:

         daemon "proftpd >/dev/null 2>&1"

и НАД ней добавил (чтоб долго не угадывать) следующие три:

        export LC_MESSAGES="en_US.UTF-8"
        export LC_ALL="en_US.UTF-8"
        export LANG="en_US.UTF-8"

Должен заметить, что строка daemon «proftpd >/dev/null 2>&1» присутствует в скрипте два раза. Как следствие и свои строки с назначением переменным LC_MESSAGES, LC_ALL и LANG значения en_US.UTF-8 я тоже добавил два раза (в обоих местах). Перезапустил ProFTP, заглянул в лог — красота, сообщения в нем снова на «родном английском»! Что ж, пол дела сделано.

Вторая половина — включить в fail2ban соответствующий фильтр (proftpd). Для этого я открыл в редакторе файл /etc/fail2ban/jail.conf и сделал в нем следующее — нашел в нем секцию про указанный фильтр и изменил ее, после чего она стала выглядеть следующим образом:

[proftpd-iptables]

enabled  = true
filter   = proftpd
action   = iptables[name=ProFTPD, port=ftp, protocol=tcp]
#           sendmail-whois[name=ProFTPD, dest=you@mail.com]
logpath  = /var/log/proftpd/proftpd.log
maxretry = 4

Собственно, изменений было аж три (выделены красным цветом). Смена в поле enabled значения с false на true включила использование фильтра. Диез (#) превратил строку с командой отправки почтового сообщения в комментарий (ну не надо мне эти письма!). Ну и в поле maxretry я поставил 4 — именно после стольких неудачных попыток нарушитель будет забанен.

А с  dovecot вопрос решился с помощью Google. Нашел я в нем ссылку на вот такую чудную страницу:

http://wiki.dovecot.org/HowTo/Fail2Ban

Просто «тупо» повторил описанное на ней, и все.  Для тех, кому английский так и не стал родным, очень кратко:

Создаем файл /etc/fail2ban/filter.d/dovecot-pop3imap.conf вот такого содержания:

[Definition]
failregex = (?: pop3-login|imap-login): (?:Authentication failure|Aborted login \(auth failed|Disconnected \(auth failed).*rip=(?P\S*),.*
ignoreregex =

После чего в файл /etc/fail2ban/jail.conf добавляем новую секцию вот такого вида:

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,imap", protocol=tcp]
logpath = /var/log/maillog
maxretry = 20
findtime = 1200
bantime = 1200

Пару замечаний про «мой случай» (выделено синим):

  • Лог для анализа в моем случае задействован иной — /var/log/mail/info.log (именно в нем я нашел сообщения об ошибочных авторизациях).
  • Строки про findtime и bantime я в секцию dovecot-pop3imap не писал совсем — меня вполне устраивают и значения «глобальных» настроек».
  • Параметр maxretry я у себя поставил поменьше — нечего тут…

После всех этих описанных выше действий, перезапустил я fail2ban и сижу вот теперь, жду…