Установка и настройка iRedMail на Rocky / CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: iRedMailCentOSPostfixDovecotRoundcubePOP3IMAPPTRSPFDKIM

Данная инструкция протестирована на CentOS версий 7 и 8, а также Rocky Linux.

Подготовка системы

1. Задаем имя сервера:

hostnamectl set-hostname relay.dmosk.ru

* обязательно задать полное (FQDN) имя, в противном случае, когда мы будем запускать установку почтового сервера мы получим ошибку << ERROR >> Please configure a fully qualified domain name (FQDN) in /etc/hosts before we go further.

2. Устанавливаем wget и tar (нужны для скачивания и распаковки архива iRedMail):

yum install wget tar

3. В CentOS 8 необходимо включить репозиторий PowerTools:

dnf config-manager --set-enabled PowerTools

В системах Rocky вводим:

dnf config-manager --set-enabled powertools

* в маленьком регистре.

4. На официальном сайте изучаем информацию о рекомендуемой версии PHP.

На момент обновления инструкции это была версия 8.0. В зависимости от версии CentOS наши действия по настройке репозитория PHP будут различаться.

а) Для Rocky или CentOS версии 8 и старше:

dnf module reset php

dnf module enable php:8.0

dnf module switch-to php:8.0

б) Для CentOS версии 7 включаем репозиторий для установки PHP 8.

Подробнее процесс описан в отдельной инструкции Установка PHP 7 и 8 на Linux CentOS 7.

5. В последних версиях iRedMail необходимо использовать веб-сервер NGINX, поэтому останавливаем apache и отключаем его автозапуск:

systemctl stop httpd

systemctl disable httpd

* если в системе не установлен Apache (httpd), мы увидим ошибку или предупреждение.

Установка iRedMail

На странице загрузки iRedMail копируем ссылку на последнюю версию сборки:

Копируем ссылку на iRedMail

Скачиваем сборку:

wget -O iredmail.tar.gz https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.6.tar.gz

* где https://github.com/iredmail/iRedMail/archive/1.6.6.tar.gz — ссылка на скачивание версии, актуальной на момент обновления инструкции.

Распаковываем скачанный архив:

tar zxvf iredmail.tar.gz

Переходим в распакованную папку:

cd iRedMail-*

Запускаем скрипт установки:

bash iRedMail.sh

В открывшемся приветствии отвечаем Yes:

Приветствие iRedMail

Вводим путь для хранения почты или оставляем предложенный по умолчанию:

Задаем путь хранения почты

Выбираем веб-сервер, на котором будет работать консоли управления и доступа к почте:

Выбираем веб-сервер

* с версии 0.9.8 только nginx.

Выбираем средство хранения данных:

Выбираем базу данных

Задаем пароль администратора базы данных:

Придумываем пароль для базы данных

Вводим наш почтовый домен:

Вводим почтовый домен

Задаем пароль для администратора почтовыми ящиками:

Задаем пароль для администратора почты

Выбираем все дополнения для удобства работы с iRedMail:

Отмечаем все дополнения для установки

Подтверждаем введенные настройки (y) и нажимаем Enter. На все последующие вопросы тоже отвечаем y.

Ждем окончания процесса.

После его окончания мы должны увидеть:

...
********************* WARNING **************************************
*
* Please reboot your system to enable all mail services.
*
********************************************************************

Перезагружаемся:

shutdown -r now

Отключение Graylisting

Graylisting является мощным инструментом в борьбе со СПАМом, но при начальном тестировании сервера он создаст много неудобств. На время проверки почтовика Graylisting лучше отключить. Для этого добавляем права на редактирование следующему файлу:

chmod u+w /opt/iredapd/settings.py

Открываем для редактирования следующий файл:

vi /opt/iredapd/settings.py

Находим строчку:

plugins = ["reject_null_sender", "reject_sender_login_mismatch", "greylisting", "throttle", "amavisd_wblist", "sql_alias_access_policy"]

И убираем "greylisting".

Возвращаем права:

chmod u-w /opt/iredapd/settings.py

Перезагружаем iredapd:

systemctl restart iredapd

Создание пользователя

Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/iredadmin/

Откроется страница входа в панель управления. Вводим логин postmaster@dmosk.ru и пароль (пароль и домен dmosk.ru — данные, которые мы вводили при установке iRedMail).

Создадим первого пользователя. Для этого переходим по Add - User:

Создаем пользователя в iRedMail

Заполняем поля и создаем пользователя:

Заполняем поля для создания пользователя

Проверяем работу сервера

Получение

Чтобы проверить получение почты, для домена должна быть настроена MX-запись. Открываем панель администрирования записей для домена и создаем запись типа MX (приоритет может быть любой, он важен, если используется несколько почтовых серверов). Запись должна вести на имя сервера, например:

dmosk.ru   MX   10 mail.dmosk.ru

* в данном примере добавлена MX-запись для домена dmosk.ru. Ее приоритет 10 и она говорит, что отправлять почту для домена нужно на сервер mail.dmosk.ru.

Чтобы другой сервер понимал, какой адрес у mail.dmosk.ru, создаем запись типа А. Пример:

mail.dmosk.ru   A   90.156.242.197

* где mail.dmosk.ru — имя нашего сервера.

На применение настроек DNS может уйти несколько часов. Ждем и пробуем отправить письма на наш домен.

Отправка почты

Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/mail/

Откроется панель для работы с почтой — вводим логин и пароль от созданного пользователя (логин должен быть с доменом, в нашем примере, test1@dmosk.ru)

Нажимаем Написать сообщение и отправляем тестовое сообщение на один из своих адресов:

Написать сообщение в roundcube

Если письма не отправляются, выполняем рекомендации ниже по предотвращению попадания в СПАМ.

Защищаем сообщения от попадания в СПАМ

Чтобы другие почтовые системы не принимали наши письма за СПАМ, выполняем следующие рекомендации:

А-запись в DNS

Для почтового сервера должна быть создана А-запись в DNS. Пример записи:

mail.dmosk.ru   A   90.156.242.197

* где mail.dmosk.ru — имя нашего сервера. По идее, данную запись мы создавали выше при проверке входящих сообщений.

Создаем PTR-запись для внешнего IP-адреса

Она должна вести на имя сервера (в данном примере, mail.dmosk.ru). Чтобы создать такую запись, нужно написать обращение Интернет-провайдеру или хостеру виртуальной машины. Пример записи:

171.23.222.83.in-addr.arpa      name = mail.dmosk.ru

Добавляем SPF-запись для домена

Эта запись создается в DNS для домена, от которого идет отправка сообщений. Пример:

dmosk.ru     text = "v=spf1 +a +mx -all"

Прописываем DKIM в DNS

Для начала, смотрим ключ, который был сформирован во время установки iRedMail:

amavisd -c /etc/amavisd/amavisd.conf showkeys

Пример ответа:

dkim._domainkey.dmosk.ru.     3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+Ief"
  "zcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia"
  "+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHK"
  "d2mdqfW+emSW/paUwQIDAQAB")

Копируем DKIM и создаем в DNS запись TXT. Пример:

dkim._domainkey.dmosk.ru     text = "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+IefzcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHKd2mdqfW+emSW/paUwQIDAQAB"

Создать другую подпись DKIM

Генерируем новый ключ:

amavisd genrsa /var/lib/dkim/dmosk2.ru.pem 1024

* где dmosk2.ru — новый домен, для которого мы сгенерируем подпись dkim.
* некоторые системы не работают с ключами более чем 1024 бит.

Задаем права на созданный файл:

chown amavis:amavis /var/lib/dkim/dmosk2.ru.pem

chmod 0400 /var/lib/dkim/dmosk2.ru.pem

Открываем конфигурационный файл amavisd:

vi /etc/amavisd/amavisd.conf

* если файла нет или он окажется пустым, vi /etc/amavisd.conf.

Находим строчку:

dkim_key('dmosk.ru', "dkim", "/var/lib/dkim/dmosk.ru.pem");

* напомню, что dmosk.ru — домен, который мы вводили при установке iRedMail. В каждом случае он будет другим.

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

dkim_key('dmosk.ru', "dkim", "/var/lib/dkim/dmosk.ru.pem");
dkim_key('dmosk2.ru', "dkim", "/var/lib/dkim/dmosk2.ru.pem");

Теперь находим строчку:

@dkim_signature_options_bysender_maps = ( {
   ...
   "dmosk.ru" => { d => "dmosk.ru", a => 'rsa-sha256', ttl => 10*24*3600 },

И также после нее добавляем новую. Должно получиться:

@dkim_signature_options_bysender_maps = ( {
   ...
   "dmosk.ru" => { d => "dmosk.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
   "dmosk2.ru" => { d => "dmosk2.ru", a => 'rsa-sha256', ttl => 10*24*3600 },

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

systemctl restart amavisd

Посмотреть DKIM последовательность для нового домена можно командой:

amavisd -c /etc/amavisd/amavisd.conf showkeys

Ящик abuse

По аналогии с тем, как мы создавали тестовую учетную запись, необходимо создать ящик abuse@... На данный ящик могут приходить жалобы на СПАМ. Стоит время от времени просматривать его (или настроить переадресацию), и реагировать на жалобы.

Управление белыми и черными списками

Переходим в каталог с утилитами iredmail:

cd /opt/iredapd/tools/

Просмотреть содержимое белого и черного списков:

python wblist_admin.py --list --whitelist

python wblist_admin.py --list --blacklist

Добавить в списки:

python wblist_admin.py --add --whitelist 111.112.113.114 info@domain.ru @dmosk.ru @.dmosk.ru

python wblist_admin.py --add --blacklist 111.112.113.115 @baddomain.com

* Первая команда добавит в белый список адрес 111.112.113.114, email info@domain.ru и домен dmosk.ru со всеми поддоменами. Вторая команда добавит в черный список адрес 111.112.113.115 и домен baddomain.com.

Удалить из списка:

python wblist_admin.py --delete --whitelist 111.112.113.114 info@domain.ru @dmosk.ru @.dmosk.ru

python wblist_admin.py --delete --blacklist 111.112.113.115 @baddomain.com

* как видим, процесс удаления аналогичен — просто меняем --add на --delete.

Установка своего сертификата

При установке устанавливается самоподписанный сертификат. Это приведет к лишним сообщениям нарушения безопасности в браузере.

Для начала, получаем сертификат, заверенный доверенным центром сертификации. Его можно купить или получить бесплатно от Let's Encrypt. Мы рассмотрим последнее подробнее.

Открываем файл:

vi /etc/nginx/sites-enabled/00-default-ssl.conf

... и добавим в секцию server:

server {
    ...
    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }
    ...
}

Перечитаем конфиг nginx:

systemctl restart nginx

Устанавливаем утилиту для получения сертификата:

yum install certbot

И получаем сертификат командой:

certbot certonly --webroot --agree-tos --email postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d mail.dmosk.ru

* обратите внимание, что в данном примере мы получим сертификат для узла mail.dmosk.ru.

Продолжаем выполнение операции:

(Y)es/(N)o: Y

Мы должны увидеть подтверждение об успешном получении сертификата:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live...

Удаляем старые сертификаты:

\rm /etc/pki/tls/private/iRedMail.key

\rm /etc/pki/tls/certs/iRedMail.crt

Создаем переменную с нашим именем узла, на который мы получили сертификат (для удобства):

DOMAIN=mail.dmosk.ru

И создаем симлинки на полученные:

ln -s /etc/letsencrypt/live/$DOMAIN/cert.pem /etc/pki/tls/certs/iRedMail.crt

ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /etc/pki/tls/private/iRedMail.key

cert.pem и iRedMail.crt — открытые ключи (public); privkey.pem и iRedMail.key — закрытые (private); mail.dmosk.ru — узел, для которого был получен сертификат (его мы задали в переменной DOMAIN). Обратите внимание, что в нашем примере прописаны пути до сертификатов от Let's Encrypt — если у вас свои сертификаты, пути должны быть соответствующими.

Перезапускаем следующие службы:

systemctl restart iredapd

systemctl restart nginx

Для автоматического продления сертификата создаем в cron задачу:

crontab -e

Добавим: 

0 0 * * 1,4 /usr/bin/certbot renew && systemctl restart nginx && systemctl restart iredapd

Настройка Clamav

Если наш сервер находится за российскими IP-адресами, то clam не будет обновляться, так как настроенные по умолчанию заркала заблокированы. А в логах amavis мы можем наблюдать ошибку;

(!)connect to /var/run/clamd.amavisd/clamd.socket failed,

Выполняем следующие настройки.

Открываем файл:

vi /etc/freshclam.conf

Комментируем строки, которые начинаются на ##DatabaseMirror

##DatabaseMirror ...

Добавляем строку:

PrivateMirror https://packages.microsoft.com/clamav/

Останавливаем службу clamav-freshclam:

systemctl stop clamav-freshclam

Удаляем старую информацию об обновлениях:

rm -f /var/lib/clamav/freshclam.dat

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

freshclam

Ждем обновления, после запускаем службу clamav-freshclam и перезапускаем clamav-daemon, amavis:

systemctl start clamav-freshclam

systemctl restart clamd@amavisd amavis

Отключение антивируса и антиспама

Отключить защиту для почты может понадобиться при различных обстоятельствах, например:

  1. Для диагностики проблем отправки сообщений.
  2. Экономии ресурсов (антивирус может слишком много потреблять ресурсов).
  3. При отсутствии необходимости.

И так, для отключения amavis (clam + spamassassin) открываем файл:

vi /etc/amavisd/amavisd.conf

Приводим к следующему виду настройку:

@bypass_virus_checks_maps = (1);
@bypass_spam_checks_maps  = (1);

* в данном примере мы сняли комментарий с данных строк (если они были закомментированы) и задаем для них значение 1. Опция bypass_virus_checks_maps отвечает за включение проверки писем на вирусы; bypass_spam_checks_maps — на СПАМ.

Перезапускаем службу amavisd:

systemctl restart amavisd

После данной настройки письма будут отправляться без проверок. Однако, сервис антивируса будет, по-прежнему, работать.

Останавливаем и отключаем сервис clamd:

systemctl disable clamd@amavisd --now

Настройка почтового клиента

Помимо веб-интерфейса, мы можем работать с нашим сервером iredmail, используя почтовые клиенты, такие как MS Outlook, Mozilla Thunderbird и так далее.

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

Настройка IMAP POP3 SMTP
Адрес сервера IP-адрес сервера или его имя
Порт 143 110 587
SSL STARTTLS
Имя пользователя Почтовый адрес, к которому выполняем подключение
Пароль Пароль для почтового ящика

Пример настройки в Mozilla Thunderbird:

Пример настройки подключения к iredmail в Mozilla Thunderbird

Группы рассылки

В профессиональной платной версии iRedMail можно управлять группами рассылки из веб-интерфейса. Данный процесс не вызовет сложностей. Мы же рассмотрим, как создать группу для рассылки через запросы SQL. Данный метод является единственным для бесплатной версии.

Подключаемся к базе данных (в нашем примере, это mariadb):

mysql -uroot -p

Используем нашу базу для почты:

> use vmail

Создадим группу рассылки:

> INSERT INTO alias (address, domain, active) VALUES ('managers@dmosk.ru', 'dmosk.ru', 1);

* в данном примере мы создали группу с почтовым адресом managers@dmosk.ru для домена dmosk.ru.

Теперь добавим в нее три адреса:

> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'postmaster@dmosk.ru', 'dmosk.ru', 'dmosk.ru', 1, 1);

> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'test1@dmosk.ru', 'dmosk.ru', 'dmosk.ru', 1, 1);

> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'example@gmail.com', 'dmosk.ru', 'gmail.com', 1, 1);

* в данном примере мы добавили в созданный адрес рассылки managers@dmosk.ru три адреса — postmaster@dmosk.rutest1@dmosk.ruexample@gmail.com. Обратите внимание, что последний адрес на бесплатном сервисе от Google.

Сбросить пароль

В бесплатной версии iredmail сброс паролей выполняется напрямую в СУБД или каталоге LDAP. Подробнее процедура описана на официальном сайте. Мы же рассмотрим пример работы с базой MySQL.

Создаем хэш для пароля:

doveadm pw -s 'ssha512'

Система попросит нас ввести дважды пароль — вводим тот, что хотим использовать. В итоге, мы получим хэш, например:

{SSHA512}53iNTXnhUNMXmhKOEARf38tD1I/xbafuQ3HIrQxCnI0Pxj0Ikp87rxnFE2bTEEEQHquU7+w9nwGlmTNqjqIHEqKgJhw=

Подключаемся к базе:

mysql -p

Выбираем базу:

> USE vmail

Смотрим пользователей:

> select username, isadmin, isglobaladmin from mailbox;

Сбрасываем пароль для пользователя с правами администратора, например:

> UPDATE mailbox SET password='{SSHA512}53iNTXnhUNMXmhKOEARf38tD1I/xbafuQ3HIrQxCnI0Pxj0Ikp87rxnFE2bTEEEQHquU7+w9nwGlmTNqjqIHEqKgJhw=' WHERE username='postmaster@dmosk.ru';

* в нашем примере, для postmaster@dmosk.ru.

Настройка аутентификации

В данном разделе рассмотрим некоторые настройки аутентификации на сервисах почтовой системы iRedMail.

Разрешить соединение без STARTTLS

После установки iRedMail, система будет требовать от клиента безопасного соединения по TLS. При необоходимости, можно отключить данную возможность.

Отключение для SMTP

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

vi /etc/postfix/main.cf

Задаем следующие настройки:

...
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
#smtpd_tls_auth_only = yes
...

* где:

  • smtpd_sasl_auth_enable разрешает или запрещает аутентификацию;
  • smtpd_sasl_security_options — дополнительные опции для аутентификации;
  • smtpd_tls_auth_only — разрешает соединение SMTP только по TLS.

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

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

systemctl restart postfix

Отключение для IMAP/POP3

Открываем конфигурационный файл dovecot:

vi /etc/dovecot/dovecot.conf

Задаем следующие настройки:

ssl = yes
disable_plaintext_auth = no

* где disable_plaintext_auth запрещает аутентификацию без защиты; ssl задает опцию защиты (в данном примере, разрешить, но не требовать).

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

systemctl restart dovecot

Настройка политики паролей

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

vi /opt/www/iredadmin/settings.py

Для длины пароля меняем:

min_passwd_length = 8
max_passwd_length = 0

А также дописываем те опции, которые хотим переопределить:

PASSWORD_HAS_LETTER = False
PASSWORD_HAS_UPPERCASE = False
PASSWORD_HAS_NUMBER = False
PASSWORD_HAS_SPECIAL_CHAR = False

* не рекомендуется отключать все требования. Стоит оставить только те, которые мешают работе.
** где:

  • PASSWORD_HAS_LETTER — должен ли пароль содержать буквы алфавита.
  • PASSWORD_HAS_UPPERCASE — должен ли содержать буквы в верхнем регистре.
  • PASSWORD_HAS_NUMBER — должны ли быть цифры.
  • PASSWORD_HAS_SPECIAL_CHAR — требуется ли использовать специальные символы.

Чтобы настройки применились, перезагружаем uwsgi:

systemctl restart uwsgi

Однако, в моем случае настройка не применилась. По ощущениям, из-за кэша. В итоге, помогла полная перезагрузка сервера.

Отключить аутентификацию при отправке почты

Нам может потребоваться отключить необходимость проходить проверку подлинности при отправке почты. Для это открываем файл:

vi /etc/postfix/main.cf

Находим опцию mynetworks и добавляем в нее через пробел сети или адреса компьютеров, с которых мы хотим разрешить отправку почты без проверки подлинности:

mynetworks = 127.0.0.1 [::1] 172.16.10.0/24

* в данном примере мы разрешаем локальному хосту и всех подсети 172.16.10.0/24.

Также нам нужно найти директиву smtpd_recipient_restrictions и сделать так, чтобы правило permit_mynetworks было выше правила check_policy_service inet:127.0.0.1:7777, например:

smtpd_recipient_restrictions =
    reject_non_fqdn_recipient
    reject_unlisted_recipient
    permit_mynetworks
    check_policy_service inet:127.0.0.1:7777
    permit_sasl_authenticated
    reject_unauth_destination
    check_policy_service inet:127.0.0.1:12340

Можно перезагружать postfix:

systemctl restart postfix

Дополнительная настройка

Лимит на объем отправляемого сообщения

Задается командой:

postconf -e "message_size_limit = 31457280"

* в данном примере выставлен лимит в 30 мб.

После перезапускаем сервис Postfix:

systemctl restart postfix

Настройка администратора для домена

В бесплатной версии программы из веб-панели можно назначить только глобального администратора. Но если нам нужно задать привилегированного пользователя только для одного домена, необходимо вносить настройки напрямую в базу данных.

Создаем пользователя в iredadmin и подключаемся к SQL-оболочке, в зависимости от того, какая СУБД была установлена. В нашем примере, это mariadb:

mysql -uroot -p

Используем базу vmail:

> use vmail

Изменим настройки для созданного пользователя:

> UPDATE mailbox SET isadmin=1, isglobaladmin=0 WHERE username='postmaster@test.local';

* в данном примере мы указываем, что пользователь postmaster@test.local должен быть админом (isadmin=1), но не глобальным админом (isglobaladmin=0).

Теперь укажем, для какого домена пользователь должен быть администратором:

> INSERT INTO domain_admins (username, domain) VALUES ('postmaster@test.local', 'test.local');

* в данном примере мы добавили запись, в которой указали, что пользователь postmaster@test.local является администратором для домена test.local. При необходимости разрешить одному пользователю управлять несколькими доменами, мы должны выполнить несколько аналогичных запросов.

Перенаправление СПАМа на специальный ящик

По умолчанию, письма с отметкой [SPAM] в теме письма приходят на ящики пользователей. Если мы хотим, чтобы наш сервер пересылал все сообщения с подозрением на СПАМ в специальный ящик, выполняем следующее.

Открываем на редактирование файл:

vi /etc/postfix/header_checks

... и добавляем строку:

/^SUBJECT:\s+\[SPAM\]/ REDIRECT spam@dmosk.ru

* в даной инструкции мы говорим проверять заголовок, и если находим в теме [SPAM], перенаправляем письмо на ящик spam@dmosk.ru.

Проверяем настройку командой:

postmap -q "Subject: [SPAM] test" pcre:/etc/postfix/header_checks

Мы должны увидеть что-то на подобие:

REDIRECT spam@dmosk.ru

Теперь открываем файл:

vi /etc/postfix/master.cf

Находим в нем все опции no_header_body_checks и удаляем их. Данные опции запрещают проверку заголовков, что помешает нам использовать опцию header_checks в Postfix.

Перезапускаем службу mta:

systemctl restart postfix

Перенаправление почты для почтового ящика

Настройка пересылки писем через веб-интерфейс доступна только в Pro версии. В бесплатной это можно сделать с помощью прямых запросов в базу. Рассмотрим одну SQL-команду.

Подключаемся к базе данных:

mysql -uroot -p

Используем нашу базу для почты:

> use vmail

Создадим настройку для пересылки:

> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_forwarding, active) VALUES ('iredmail_user@dmosk.ru', 'other_user@example.com', 'dmosk.ru', 'example.com', 1, 1);

* в данном примере мы перенаправим всю почту, которая придет на адрес iredmail_user@dmosk.ru на почтовый ящик other_user@example.com.

Чтобы удалить перенаправление, сначала находим нужную нам строку:

> SELECT * FROM forwardings WHERE address!=forwarding;

Затем просто ее либо удаляем по идентификатору:

> DELETE FROM forwardings WHERE id='10';

* в моем примере нужная нам строка была под идентификатором 10.

... или можно просто отключить перенаправления, не трогая троку:

> UPDATE forwardings SET active='0' WHERE id='10';

Перенаправление почты, которая пришла на несуществующий адрес

Допустим, что нам нужно всю почту, которая пришла на несуществующие адреса не отправлять обратно с ошибкой, а пересылать на специальный ящик. Это можно сделать с помощью, так называемого, catch-all ящика.

Если посмотреть в конфигурационный файл postfix, то мы увидим такие строки:

virtual_alias_maps =
    proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf
    proxy:mysql:/etc/postfix/mysql/domain_alias_maps.cf
    proxy:mysql:/etc/postfix/mysql/catchall_maps.cf
    proxy:mysql:/etc/postfix/mysql/domain_alias_catchall_maps.cf

В отмеченной строке видно, что postfix сначала будет искать адреса в карте virtual_alias_maps, затем domain_alias_maps, и после — catchall_maps. Если посмотреть содержимое файла:

cat /etc/postfix/mysql/catchall_maps.cf

... мы увидим, что MTA будет вытаскивать адреса из таблицы forwardings. Выше мы уже рассмотрели возможность перенаправления почты с помощью запроса к forwardings. Принцип настройки для нашего случая очень похож и имеет частный характер.

Подключаемся к СУБД и базе данных vmail:

mysql -uroot -p

> use vmail

Создаем настройку для пересылки на ящик catchall:

> INSERT INTO forwardings (address, forwarding, domain, dest_domain) VALUES ('dmosk.ru', 'catch-all@dmosk.ru', 'dmosk.ru', 'dmosk.ru');

* в данном примере мы перенаправим всю почту, которая придет на домен dmosk.ru на почтовый ящик catch-all@dmosk.ru.

Не забываем создать сам ящик (в нашем примере, catch-all@dmosk.ru). Готово. Теперь, если письмо придет на существующий адрес, оно и будет в него доставлено, а если яшика не существует на сервере, письмо будет направлено на catch-all.

Решение проблем

Рассмотрим некоторые проблемы, с которыми столкнулся я.

internal server error

При попытке зайти на веб-интерфейс, мы можем увидеть ошибку internal server error.

Причина: данное сообщение означает о наличии какой-то ошибки в работе сервера, как правило, при попытке интерпретировать страницу. Более точную причину можно узнать только в логе.

Решение: так как сообщение является общим и может означать любую ошибку, необходимо открыть лог сервера:

tail -f /var/log/messages

Еще раз загрузить страницу и получить ошибку. После посмотреть в лог и уже ориентироваться по его тексту. 

Например, я увидел сообщение:

ModuleNotFoundError: No module named 'web'

Оно означает, что для интерпретатора python нет нужного модуля. По какой-то причине, он не был установлен. Тогда просто установим его вручную:

pip3 install web.py==0.62

* актуальную версию можно посмотреть на странице pypi.org/project/web.py.

После нужно будет перезагрузить uwsgi:

systemctl restart uwsgi

Отсутствует криптографическая функция

Ошибка появляется при попытке изменить пароль пользователя в Roundcube.

Причина: отсутствует модуль php-mcrypt.

Решение: для установки php-mcrypt на CentOS 7 используем команду:

yum install php-mcrypt

Пакет php-mcrypt был удален из репозиториев начиная с CentOS/Rocky Linux 8, поэтому установка производится немного иначе, чем на более старых версиях.

Устанавливаем EPEL-репозиторий:

dnf install epel-release

Устанавливаем пакеты, необходимые для сборки расширения mcrypt:

dnf install libmcrypt-devel gcc make php-devel

Скачиваем исходники расширения mcrypt:

wget https://pecl.php.net/get/mcrypt-1.0.5.tgz

Распакуем их:

tar -zxf mcrypt-*.tgz

Переходим в директорию исходников и компилируем расширение:

cd mcrypt-*/

phpize

./configure

make

Установите расширение:

make install

Добавим строку extension=mcrypt.so в файл конфигурации PHP (/etc/php.ini):

echo "extension=mcrypt.so" > /etc/php.d/20-mcrypt.ini

Перезапустите php-интерпретатор (в нашем случае это php-fpm) и проверьте, что расширение установлено:

systemctl restart php-fpm

php -m | grep mcrypt

Если выводится строка mcrypt, то расширение успешно установлено.

Аналоги iRedMail

Если есть причины, по которым iRedMail не подходит, можно рассмотреть другие варианты:

1. iRedMail Pro. Платная версия настроенного в данной инструкции программного обеспечения. Обладает расширенными настройками и возможностями.

2. Ручная сборка компонентов для почтового сервера. Пример данной настройки описан в статье Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим.

3. Microsoft Exchange Server (на Windows). Платный сервер, работает в среде Active Directory.

4. Zimbra (на Linux). Готовая сборка. Есть платная и бесплатная версии. Пример установки и настройки в инструкции Установка и настройка Zimbra на Linux.

# CentOS # Linux # Rocky Linux # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет