Безопасность · 4 min read · Dec 29, 2025

Настройка fail2ban с SquirrelMail на Debian Lenny 5.0/ISPConfig 3

Настройка fail2ban с SquirrelMail на Debian Lenny 5.0/ISPConfig 3

В этой статье я покажу, как предотвратить атаки грубой силы с помощью Fail2ban против вашего веб-входа SquirrelMail, используя плагин Squirrel Logger.

1. Требования

Убедитесь, что fail2ban и SquirrelMail установлены на машине Debian Lenny/ISPConfig 3.
Чтобы установить ISPConfig 3 + SquirrelMail, пожалуйста, следуйте этому руководству.
Чтобы установить fail2ban, пожалуйста, следуйте этому руководству.

2. Squirrel Logger

Скачайте и установите Squirrel Logger:

cd /usr/share/squirrelmail/plugins  
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fsquirrel_logger-2.3-1.2.7.tar.gz  
tar zxvf squirrel_logger-2.3-1.2.7.tar.gz  
cd squirrel_logger  
cp config_example.php config.php

Настройте Squirrel Logger:

vi config.php

Если ваш сервер не использует местное время GMT, пожалуйста, измените $sl_use_GMT = 1 на $sl_use_GMT = 0:

...  
// Логировать даты в GMT? Если вы этого не сделаете, даты будут  
// записываться в том часовом поясе, в котором находится каждый пользователь (или  
// установлен в их личных предпочтениях)  
//  
//    1 = да  
//    0 = нет  
//  
$sl_use_GMT = 0;  
...

Измените местоположение вашего файла журнала с $sl_logfile = $data_dir . ‘squirrelmail_access_log’; на $sl_logfile = ‘/var/log/squirrelmail.log’;:

...  
// Местоположение вашего файла журнала при записи в файл.  
// Убедитесь, что пользователь, от имени которого работает ваш веб-сервер, может записывать  
// в этот файл. Используйте переменную $data_dir, если вы  
// хотите разместить файл журнала в каталоге данных SquirrelMail.  
//  
// Применимо только, если $sl_logs включает "file".  
//  
// $sl_logfile = $data_dir . 'squirrelmail_access_log';  
$sl_logfile = '/var/log/squirrelmail.log';  
...

Измените формат даты, чтобы он соответствовал регулярному выражению fail2ban с $sl_dateformat = ‘m/d/Y H:i:s’; на $sl_dateformat = ‘M j H:i:s’;:

...  
// Укажите, какой формат даты вы хотите  
//  
// См. руководство PHP по функции даты для помощи  
// на http://www.php.net/manual/function.date.php  
//  
// примеры:  
//  
//    'm/d/y H:i:s'     ==  03/10/2001 05:16:08  
//    'F j, Y, g:i a'   ==  March 10, 2001, 5:16 am  
//    'D M j Y H:i:s T' ==  Sat Mar 10 2001 15:16:08 CDT  
//  
// $sl_dateformat = 'm/d/Y H:i:s';  
$sl_dateformat = 'M j H:i:s';  
... 

Создайте новый файл squirrelmail.log в /var/log/:

touch /var/log/squirrelmail.log  
chown www-data:www-data /var/log/squirrelmail.log  
chmod 640 /var/log/squirrelmail.log

Очистите установку:

cd ..  
rm squirrel_logger-2.3-1.2.7.tar.gz

Настройте SquirrelMail для использования плагина Squirrel Logger:

squirrelmail-configure
...  
7. Сообщение дня (MOTD)  
8. Плагины  
9. База данных  
...

Выберите “Плагины”, в моем случае, номер 8.

...  
18. spamcop  
19. squirrel_logger  
20. squirrelspell  
21. test  
...

Выберите squirrel_logger, в моем случае, номер 19.

...  
Установленные плагины  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. squirrel_logger  
...

Теперь squirrel_logger является частью установленных плагинов.
Сохраните данные “S” и выйдите “Q”.

3. Конфигурация Fail2ban

Настройте fail2ban для использования журнала SquirrelMail:

cd /etc/fail2ban

Откройте и добавьте следующие строки в файл jail.local. Если у вас нет этого файла, используйте файл jail.conf по умолчанию.

vi jail.local
[squirrelmail]  
  
enabled = true  
port = http,https  
filter = squirrelmail  
logpath = /var/log/squirrelmail.log  
bantime = 300  
maxretry = 4 

Пожалуйста, убедитесь, что bantime (в секундах) и maxretry установлены в соответствии с вашими требованиями.

В каталоге filter.d создайте файл squirrelmail.conf со следующим содержимым:

cd filter.d  
vi squirrelmail.conf
# Конфигурационный файл Fail2Ban  
#  
# Автор: Bill Landry ((email_protected))  
#  
# $Revision: 510 $  
  
[Definition]  
  
# Опция: failregex  
# Примечания.: регулярное выражение для сопоставления сообщений об ошибках пароля в файле журнала. Хост  
# должен быть сопоставлен группой с именем "host". Тег "" может  
# использоваться для стандартного сопоставления IP/имени хоста и является только псевдонимом для  
# (?:::f{4,6}:)?(?P+)  
# Значения: ТЕКСТ  
  
failregex = \[LOGIN_ERROR\].*from : Unknown user or password incorrect  
  
# Опция: игнорировать регулярное выражение  
# Примечания.: регулярное выражение для игнорирования. Если это регулярное выражение совпадает, строка игнорируется.  
# Значения: ТЕКСТ  
  
ignoreregex = 

ВАЖНО: если вы используете другой язык, кроме английского, пожалуйста, измените строку “failregex” на текст, который показывает squirrelmail.log в пункте 5.

Пример: с испанским языком я получаю это в файле журнала.

Aug 20 15:26:06 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto. 

Итак, я вношу это изменение:

failregex = \[LOGIN_ERROR\].*from : Usuario o contraseña incorrecto

…и перезапускаю fail2ban.

/etc/init.d/fail2ban restart

5. Тестирование установки

cd /var/log  
tail -f squirrelmail.log

Войдите “3” раза в веб-интерфейс SquirrelMail, используя “неправильные пароли”.
Эта процедура покажет вам неудачные попытки входа в терминальных окнах:

Aug 19 13:57:20 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.  
Aug 19 13:57:34 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.  
Aug 19 13:57:46 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.

Закройте файл squirrelmail.log:

Ctrl-c

Убедитесь, что fail2ban-regex может поймать эти ошибки:

fail2ban-regex /var/log/squirrelmail.log /etc/fail2ban/filter.d/squirrelmail.conf
Запуск тестов  
=============  
  
Используйте файл регулярного выражения : /etc/fail2ban/filter.d/squirrelmail.conf  
Используйте файл журнала   : /var/log/squirrelmail.log  
  
  
Результаты  
=======  
  
Failregex  
|- Регулярные выражения:  
|  [1] \[LOGIN_ERROR\].*from : Unknown user or password incorrect  
|  
`- Количество совпадений:  
   [1] 3 совпадения(ий)  
  
Ignoreregex  
|- Регулярные выражения:  
|  
`- Количество совпадений:  
  
Резюме  
=======  
  
Найденные адреса:  
[1]  
    200.113.105.235 (Wed Aug 19 13:57:20 2009)  
    200.113.105.235 (Wed Aug 19 13:57:34 2009)  
    200.113.105.235 (Wed Aug 19 13:57:46 2009)  
  
Попадания шаблона даты:  
3 попадания(ий): Месяц День Час:Минуты:Секунды  
0 попадания(ий): День недели Месяц День Час:Минуты:Секунды Год  
0 попадания(ий): День недели Месяц День Час:Минуты:Секунды  
0 попадания(ий): Год/Месяц/День Час:Минуты:Секунды  
0 попадания(ий): День/Месяц/Год Час:Минуты:Секунды  
0 попадания(ий): День/Месяц/Год:Час:Минуты:Секунды  
0 попадания(ий): Год-Месяц-День Час:Минуты:Секунды  
0 попадания(ий): День-Месяц-Год Час:Минуты:Секунды[.Миллисекунда]  
0 попадания(ий): TAI64N  
0 попадания(ий): Эпоха  
0 попадания(ий): ISO 8601  
  
Успех, общее количество совпадений равно 3  
  
Тем не менее, посмотрите на раздел "Запуск тестов", который может содержать важную  
информацию.

Если вы видите эту строку, все в порядке: Успех, общее количество совпадений равно 3

6. Давайте протестируем наш Fail2ban

Войдите “4” раза (или больше, в зависимости от вашей настройки maxretry) в веб-интерфейс SquirrelMail, используя “неправильные пароли”.

Когда вы будете заблокированы, это означает, что вы не можете увидеть страницу входа, пожалуйста, выполните:

iptables -L

Теперь вы можете увидеть ваш заблокированный IP xxx-xxx-xxx-xxx в выводе iptables.

Chain fail2ban-squirrelmail (1 references)  
target     prot opt source               destination  
DROP       all  --  xxx-xxx-xxx-xxx.your.isp.info  anywhere  
RETURN     all  --  anywhere             anywhere 

Удачи ;)

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.