На моих серверах обычно трудится FTP демон Pure-FTPd, в то же время всегда установлен fail2ban для защиты сервера по SSH. Заметил что в фильтрах fail2ban лежит файл pure-ftpd.conf, что как бы намекает: “Реализуй же ты защиту…”. Но в jail.conf о pure-ftpd упоминания небыло, заниматься было лень, а тут на днях пробило.
Все действия проводились на Russian Fedora 16 (RFRemix 16).
Считаем что у нас уже установлены Pure-FTPd и fail2ban.

Для начала смотрим в лог pure-ftpd, есть ли в нём не удачные попытки авторизации. Если таковых нет, то попросите друга, или сами сделайте несколько ошибочных вводов пароля. Задача в том чтоб в логе появились сообщения об ошибках авторизации в нужном кол-ве, т.е. в том кол-ве, после которого клиента должно забанить.

1
cat /var/log/messages

Видим попытки безуспешной авторизации? Здорово! Теперь пробуем, увидит ли их fail2ban с нынешними фильтрами

1
fail2ban-regex '/var/log/messages' '/etc/fail2ban/filter.d/pure-ftpd.conf'

Скорее всего фильтр ничего не найдёт, скажет что адреса не найдены, или как-то так… Изменим фильтр, чтоб тот корректно обрабатывал современные логи pure-ftpd. # vim /etc/fail2ban/filter.d/pure-ftpd.conf

Вот содержимое файла без закоментированных участков:

1
2
3
4
[Definition]
__errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur)
failregex = .*pure-ftpd: \(.*@<HOST>\) \[WARNING\] %(__errmsg)s \[.+\]$
ignoreregex =

Сохраним файл /etc/fail2ban/filter.d/pure-ftpd.conf и попробуем снова увидит ли ошибочные авторизации fail2ban # fail2ban-regex '/var/log/messages' '/etc/fail2ban/filter.d/pure-ftpd.conf'

В этот раз должны быть похожие строки:

1
2
3
4
5
Addresses found:
[1]
 91.211.192.38 (Mon Oct 08 00:55:19 2012)
 91.211.192.38 (Mon Oct 08 00:55:19 2012)
 91.211.192.38 (Mon Oct 08 00:55:19 2012)

что говорит о том, что фильтра правильно обрабатываются и находят попытки ошибочных авторизаций. Следующим шагом открываем для редактирования jail.conf # vim /etc/fail2ban/jail.conf

В самом конце добавляем строки

1
2
3
4
5
6
7
8
9
[pure-ftpd]

enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = pure-ftpd
action = iptables[name=Pure-FTPd, port=ftp, protocol=tcp]
 sendmail-whois[name=Pure-FTPd, dest=root, sender=fail2ban@example.com]
logpath = /var/log/messages
maxretry = 3

example.com замените на свой домен, не забудьте! Перезапустим fail2ban # service fail2ban restart

Если ошибок нет, то на email root должно прийти письмо об удачной активации фильтра Pure-FTPd. Надеюсь и в этот раз стал вам полезен! Тестируйте…