Заметки сисадмина
Назад

Обновление почтового сервера iRedMail с 0.9.2 до 0.9.5-1

Опубликовано: 18.10.2016
Время на чтение: 56 мин
3
1641

В данном руководстве собраны шаги по обновлению почтового сервера iRedMail с версии 0.9.2 до актуальной на момент выхода статьи 0.9.5-1. Как оказалось соблюдать строгий порядок обновления не обязательно, и можно обновлять компоненты системы сразу перепрыгивая несколько промежуточных версий. В данной заметке, будем рассматривать версию сервера, где в качестве backend'а базы данных используется MySQL, а в качестве операционной системы Debian. Как показывает практика и уже более 4-х летний опыт использования данного сервера, данная связка (debian + mysql) требует наименьшего количества обновлений и соответственно отнимает гораздо меньше времени затрачиваемого админом на поддержание системы в актуальном состоянии. Поэтому, если вы собираетесь разворачивать сервер впервые, рекомендую использовать именно этот вариант.

На данный момент проект iRedMail продолжает активно развиваться, исправлены разные баги, в том числе и связанные с безопасностью, включена поддержка HSTS, вебсервера Nginx, баз данных MariaDB, опционально SOGo как cервера групповой работы (аналога Microsoft Exchange) с красивым веб-интерфейсом и др. плюшками. Одним словом, если вы ищите надежный и самое главное бесплатный вариант по организации почтовой системы и при этом не боитесь Linux, то данный вариант несомненно вам подойдет :)

Инструкции по обновлению предыдущей версии на новую обычно выкладываются по следующему адресу и довольно хорошо описаны, но на практике как это нередко случается, возникают нюансы. Вот об этом подробнее:

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

nano /etc/iredmail-release

1) Обновление iRedAPD:

Выполняем последовательно шаги по обновлению iRedAPD:

cd /root
wget http://www.iredmail.org/yum/misc/iRedAPD-1.9.1.tar.bz2
tar xjf iRedAPD*.bz2
cd iRedAPD*/tools/
bash upgrade_iredapd.sh

Начиная с версии 0.9.3 функции по борьбе со спамом на основе серых списков (greylisting), которые ранее были возложены на PolicyD v2 (кодовое имя "cluebringer") теперь выполняет iRedAPD. Поэтому нам необходимо выполнить ряд шагов по переносу конфигурации с cluebringer на iRedAPD. Подробнее о новом функционале грейлистинга читаем здесь. Авторизуемся в MySQL и добавим в таблицу greylisting, базы iredapd несколько новых значений.

mysql -uroot -p
USE iredapd;
INSERT INTO greylisting (priority, sender, sender_priority, active) VALUES (0, '@.', 0, 1);
\q

Затем выполняем непосредственно шаги по миграции. Открываем последовательно следующие файлы скриптов (/opt/iredapd/tools/migrate_cluebringer_greylisting.py и /opt/iredapd/tools/migrate_cluebringer_throttle.py) на редактирование и задаем параметры подключения к mysql базе clubringer.

Параметры берем в /etc/cluebringer/cluebringer.conf

DB_Type=mysql
DB_Host=127.0.0.1
DB_Port=3306
DB_Name=cluebringer
Username=cluebringer
Password=1V6e9PuiZoQJxXEаuG4BiExhqpOXnM

Затем переходим в /opt/iredapd/tools/ и последовательно запускаем скрипты на выполнение:

cd /opt/iredapd/tools/
python migrate_cluebringer_greylisting.py
python migrate_cluebringer_throttle.py

Если видим, такую картинку:

root@mx:/opt/iredapd/tools# python migrate_cluebringer_greylisting.py
* Backend: mysql
* Migrate global greylisting setting.
- Query enabled global greylisting setting.
- Cluebringer has greylisting enabled globally.
- iRedAPD already has global greylisting setting, not migrate Cluebringer global setting.
* Migrate per-domain and per-user no-greylisting settings.
- Query no-greylisting settings
root@mx:/opt/iredapd/tools# python migrate_cluebringer_throttle.py
* Backend: mysql
No throttle settings found. Exit.

То все ОК, миграция прошла успешно.

Удаляем лишние и добавляем новые плагины внутри файла настроек /opt/iredapd/settings.py. Должно получится что то типа этого:

plugins = ['sql_alias_access_policy', 'reject_sender_login_mismatch', 'throttle' "greylisting"]

Отключаем Cluebringer в Postfix:

Открываем на редактирование фаил конфигурации postfix.

nano /etc/postfix/main.cf

и меняем значения триггеров: smtpd_recipient_restrictions и smtpd_end_of_data_restrictions на
check_policy_service inet:127.0.0.1:7777 т.е. по сути порт с 10031 на 7777 с добавлением permit_mynetworks. В результате приводим к следующему виду:

smtpd_recipient_restrictions =
...
check_policy_service inet:127.0.0.1:7777,
permit_mynetworks,
...
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:7777

Перезапускаем postfix:

service postfix restart

Останавливаем и удаляем пакеты Cluebringer:

service postfix-cluebringer stop && apt-get remove --purge postfix-cluebringer

Удаляем лишние каталоги:

rm -rf /usr/share/postfix-cluebringer-webui

Удаляем базу clubringer и пользователя cluebringer из mysql:

mysql -uroot -p
DROP DATABASE cluebringer;
DROP USER 'cluebringer'@'localhost';
\q

2) Обновление iRedAdmin:

cd /root/
wget http://www.iredmail.org/yum/misc/iRedAdmin-0.6.3.tar.bz2
tar xjf iRedAdmin*.tar.bz2
cd iRedAdmin*/tools/
bash upgrade_iredadmin.sh

3) Обновление Roundcube.

Обновляем существующую сборку с версии 1.1.1 до 1.2.2.

cd /root
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.2/roundcubemail-1.2.2-complete.tar.gz
tar xf roundcubemail*.tar.gz
cd roundcubemail*
bin/installto.sh /usr/share/apache2/roundcubemail-1.1.1

Нажимаем Yes. Если видим что:

This instance of Roundcube is up-to-date.
Have fun!
All done.

То процесс обновления прошел успешно.

Поправим имя директории roundcubemail на актуальную с правкой ярлыка (smlinks):

cd /usr/share/apache2
rm -i /usr/share/apache2/roundcubemail
mv /usr/share/apache2/roundcubemail-1.1.1 roundcubemail-1.2.2
ln -s roundcubemail-1.2.2 roundcubemail

Добавляем в cron скрипт очистки sql базы roundcubemail:

crontab -e -u root

# Cleanup Roundcube SQL database.
2   2   *   *   *   php /usr/share/apache2/roundcubemail/bin/cleandb.sh >/dev/null

4) Включаем поддержку HSTS - HTTP Strict Transport Security в Apache.

Данный механизм включает форсированное защищённое соединение через протокол HTTPS.

Для начала активируем модуль "header" командой:

a2enmod headers

Затем, открываем на редактирование файл /etc/apache2/sites-enabled/default-ssl
Добавляем следующий код:

# Use HTTP Strict Transport Security to force client to use secure connections only.
# Reference:
# https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security
# Module mod_headers is required. 15768000 seconds = 6 months.
Header always set Strict-Transport-Security "max-age=15768000"

Перезапускаем Apache:

service apache2 restart

5) Вносим изменения в Dovecot:

Исправляем известные проблемы с неправильным оповещением локальных пользователей о превышением квоты. Открываем на редактирование файл /etc/dovecot/dovecot.conf и находим следующие строки:

quota_warning = storage=85%% quota-warning 85 %u
quota_warning2 = storage=90%% quota-warning 90 %u
quota_warning3 = storage=95%% quota-warning 95 %u

меняем их на:

quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=90%% quota-warning 90 %u
quota_warning3 = storage=85%% quota-warning 85 %u

Перезапускаем dovecot.

service dovecot restart

6) Изменения в Posfix:

Невозможность доставить письмо до системной учетной записи. Если речь идет о postmaster то на текущей сборке лично я не сталкивался с таким, но поверим разработчикам и внесем следующие изменения. Открываем на редактирование  /etc/postfix/main.cf. Находим и удаляем следующие строки:

home_mailbox = Maildir/
mailbox_command = /usr/lib/dovecot/deliver

Исправления в механизме образования имени почтовых ящиков. (Not preserve the case of ${extension} while delivering message to mailbox).

Открываем на редактирование /etc/postfix/master.cf Находим строки:

# Use dovecot deliver program as LDA.
dovecot unix - n n - - pipe
flags=DRhu ...

и убираем флаг "u". Получаем:

# Use dovecot deliver program as LDA.
dovecot unix - n n - - pipe
flags=DRh ...

7) Изменения в Amavis:

Исправляем неправильную настройку, которая рассматривает внешних отправителей как внутренних пользователей.

Открываем на редактирование файл /etc/amavis/conf.d/50-user

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

$inet_socket_port = [10024, 10026, 9998];
$interface_policy{'10026'} = 'ORIGINATING';

Оставим значение как есть (У меня в файле это 278 строка):

$originating = 1;

Затем закоментим или полностью удалим блоки:

#$policy_blank{'MYUSERS'} = {
# ...
#}

и

#$policy_bank{'ORIGINATING'} = {
#
#
Перезапускаем Amavis:

service amavis restart

Теперь открываем конфиг Postfix /etc/postfix/master.cf Раскомментируем строку:

# -o content_filter=smtp-amavis:[127.0.0.1]:10026

Перезапустим сервис:

service postfix restart

8) Изменения в Fail2ban:

Обновление регулярных выражений для захвата postscreen лога. Помогает эффективнее бороться со спамом.

Приводим конфиг /etc/fail2ban/filter.d/postfix.iredmail.conf к следующему виду:

[Definition]
failregex = \[<HOST>\]: SASL (PLAIN|LOGIN) authentication failed
reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
reject: RCPT from (.*)\[<HOST>\]:([0-9]{4,5}:)? 550
ignoreregex =

Добавление ssh портов в конфиг Fail2ban.

Я просто скопировал кусок кода из последней сборки iRedMail на своем тестовом сервере и получилось что нужно привести начальную часть конфига /etc/fail2ban/jail.conf к следующему виду:

# Refer to /etc/fail2ban/jail.conf for more examples.
[DEFAULT]
# time is in seconds. 3600 = 1 hour, 86400 = 24 hours (1 day)
findtime    = 3600
bantime     = 86400
maxretry    = 5
ignoreip    = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

[sshd]
enabled     = true
filter      = sshd
action      = iptables-multiport[name=sshd, port="22", protocol=tcp]
logpath     = /var/log/auth.log

[sshd-ddos]
enabled     = true
filter      = sshd-ddos
action      = iptables-multiport[name=sshd-ddos, port="22", protocol=tcp]
logpath     = /var/log/auth.log

[roundcube-iredmail]
....

Перезапускаем демон командой:

/etc/init.d/fail2ban restart

9) MySQL:

Добавление новой колонки delete_date в SQL таблице vmail.deleted_mailboxes базы vmail;

mysql -uroot -p
USE vmail;
ALTER TABLE deleted_mailboxes ADD COLUMN delete_date DATE DEFAULT NULL;
CREATE INDEX idx_delete_date ON deleted_mailboxes (delete_date);
\q

10) Обновление phpmyadmin. (опционально):

Обновляем phpmyadmin, хотя делать это совсем не обязательно, к тому же последняя сборка 4.6.4 требует версии php 5.5. Если у вас до сих пор стоит Debian 7 Wheezy то придется отдельно обновлять и php до версии 5.5, иначе при входе через браузер получим следующую месагу:

PHP 5.5+ is required.
Currently installed version is: 5.4.45-0+deb7u5

Итак, для обновления последовательно выполняем следующие шаги. На всякий случай копируем старую сборку в /tmp, а так же отдельно файл конфигурации config.inc.php. Качаем последний релиз phpmyadmin. Извлекаем архив в /usr/share. Меняем имя на phpmyadmin. Подкладываем обратно файл конфигурации в новую сборку. Перезапускам apache.  Если все хорошо, то при старте получим окошко авторизации "Добро пожаловать в phpMyAdmin"

cd /tmp
cp -a /usr/share/phpmyadmin /tmp
cp /usr/share/phpmyadmin/config.inc.php /tmp
rm -rf /usr/share/phpmyadmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.4/phpMyAdmin-4.6.4-all-languages.tar.bz2
tar xjf /tmp/phpMyAdmin-4.6.4-all-languages.tar.bz2 -C /usr/share
mv /usr/share/phpMyAdmin-4.6.4-all-languages /usr/share/phpmyadmin
cp /tmp/config.inc.php /usr/share/phpmyadmin
service apache2 restar

Обновление php до версии 5.5 (Debian 7 Wheezy);

Открываем на редактирование /etc/apt/sources.list и добавляем туда следующие строки:

deb http://packages.dotdeb.org wheezy-php55 all

Запускаем команду на обновление пакета php5:

apt-get update
apt-get install php5

Либо обновляем всю систему целиком:

apt-get update && upgrade

Проверить версию php после установки:

php -v

После обновления, в php.ini желательно указать значение временной зоны для вашего региона, иначе, как это было у меня в Roundcube перестанет отображаться поле "дата". Открываем на редактирование /etc/php5/apache2/php.ini и в разделе [Date] параметру date.timezone пропишем значение часового пояса. В моем случае это: date.timezone = "Europe/Moscow"

Сохраняем, перезапускаем вебсервер:

service apache2 restart

11) Обновление антивируса clamav:

aptitude install clamav

Если возникает ошибка во время запуска freshclam, "ERROR: /var/log/clamav/freshclam.log is locked by another process" то делаем слудующее:

/etc/init.d/clamav-freshclam stop
freshclam -v
etc/init.d/clamav-freshclam start
, , , , , , , , , ,
Поделиться
Похожие записи