Установка и настройка iRedMail на CentOS
Что такое iRedMail и как ей пользоваться. Это набор скриптов для автоматической установки и базовой настройки всех компонентов, необходимых для полноценной работы почтового сервера. Вот список основных программ, которые будут установлены вместе с iRedMail:
- Postfix - сердце почтовой системы, вокруг которого настраивается все остальное.
- Dovecot - imap сервер для доступа к почтовым ящикам пользователей.
- Web сервер - apache+ php + mysql для вспомогательных функций.
- Roundcube и SOGo - веб интерфейсы для доступа к почте. Пользоваться можно любым, что больше понравится.
- Awstats - статистика работы почтового сервера.
- Amavisd - модуль связи почтовой системы и дополнительных обработчиков почты (антиспам, антивирус и т.д.)
- SpamAssassin - бесплатный антиспам для почты.
- ClamAV - бесплатный антивирус.
- Greylist - эффективная система борьбы со спамом.
Приступаем к установки и начальной настройки.
Подготовка системы
Задаем имя сервера:
hostnamectl set-hostname mail.subbnet.ru
* обязательно задать полное (FQDN) имя, в противном случае, когда мы будем запускать установку почтового сервера мы получим ошибку << ERROR >> Please configure a fully qualified domain name (FQDN) in /etc/hosts before we go further.
Устанавливаем wget и tar (нужны для скачивания и распаковки архива iRedMail):
yum install wget tar
В CentOS 8 необходимо включить репозиторий PowerTools:
dnf config-manager --set-enabled PowerTools
В последних версиях iRedMail необходимо использовать веб-сервер NGINX
, поэтому останавливаем apache
и отключаем его автозапуск:
systemctl stop httpd
systemctl disable httpd
* если в системе не установлен Apache (httpd), мы увидим ошибку или предупреждение.
Установка iRedMail
На странице загрузки iRedMail копируем ссылку на последнюю версию сборки:
Скачиваем сборку:
wget -O iredmail.tar.gz https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz
* где https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz — ссылка на скачивание версии, актуальной на момент обновления инструкции.
Распаковываем скачанный архив:
tar zxvf iredmail.tar.gz
Переходим в распакованную папку:
cd iRedMail-*
Запускаем скрипт установки:
bash iRedMail.sh
В открывшемся приветствии отвечаем Yes:
Вводим путь для хранения почты или оставляем предложенный по умолчанию:
Выбираем веб-сервер, на котором будет работать консоли управления и доступа к почте:
* с версии 0.9.8 только nginx.
Выбираем средство хранения данных:
Задаем пароль администратора базы данных:
Вводим наш почтовый домен:
Задаем пароль для администратора почтовыми ящиками:
Выбираем все дополнения для удобства работы с iRedMail:
Подтверждаем введенные настройки (y) и нажимаем Enter. На все последующие вопросы тоже отвечаем y.
Ждем окончания процесса.
Отключение 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/ получил ошибку Internal Server Error ImportError
Запускаем проверку
/opt/www/iredadmin/python2 iredadmin.py
У меня python2
не был установлен, ставим
yum install python2
И ставим модуль web
pip3 install web.py
Перезагружаемся и проверяем web интерфейс администратора
Создание пользователя
Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/iredadmin/
Откроется страница входа в панель управления. Вводим логин postmaster@subbnet.ru и пароль (пароль и домен subbnet.ru — данные, которые мы вводили при установке iRedMail).
Создадим первого пользователя. Для этого переходим по Add - User:
Заполняем поля и создаем пользователя:
Проверяем работу сервера
Получение
Чтобы проверить получение почты, для домена должна быть настроена MX-запись. Открываем панель администрирования записей для домена и создаем запись типа MX (приоритет может быть любой, он важен, если используется несколько почтовых серверов). Запись должна вести на имя сервера, например:
subbnet.ru MX 10 mail.subbnet.ru
* в данном примере добавлена MX-запись для домена subbnet.ru. Ее приоритет 10 и она говорит, что отправлять почту для домена нужно на сервер mail.subbnet.ru.
Чтобы другой сервер понимал, какой адрес у mail.subbnet.ru, создаем запись типа А. Пример:
mail.subbnet.ru A 88.140.200.98
* где mail.subbnet.ru — имя нашего сервера.
На применение настроек DNS может уйти несколько часов. Ждем и пробуем отправить письма на наш домен.
Отправка почты
Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/mail/
https://10.10.11.60/mail/
Откроется панель для работы с почтой — вводим логин и пароль от созданного пользователя (логин должен быть с доменом, в нашем примере, m@subbnet.ru)
Нажимаем Написать сообщение и отправляем тестовое сообщение на один из своих адресов:
Если письма не отправляются, выполняем рекомендации ниже по предотвращению попадания в СПАМ.
Защищаем сообщения от попадания в СПАМ
Чтобы другие почтовые системы не принимали наши письма за СПАМ, выполняем следующие рекомендации:
А-запись в DNS
Для почтового сервера должна быть создана А-запись в DNS. Пример записи:
mail.subbnet.ru A 88.140.200.98
* где mail.subbnet.ru — имя нашего сервера. По идее, данную запись мы создавали выше при проверке входящих сообщений.
Создаем PTR-запись для внешнего IP-адреса
Она должна вести на имя сервера (в данном примере, mail.subbnet.ru). Чтобы создать такую запись, нужно написать обращение Интернет-провайдеру или хостеру виртуальной машины. Пример записи:
98.200.140.88.in-addr.arpa name = mail.subbnet.ru
Добавляем SPF-запись для домена
Эта запись создается в DNS для домена, от которого идет отправка сообщений. Пример:
subbnet.ru text = "v=spf1 +a +mx -all"
Прописываем DKIM в DNS
Для начала, смотрим ключ, который был сформирован во время установки iRedMail:
amavisd -c /etc/amavisd/amavisd.conf showkeys
Пример ответа:
dkim._domainkey.subbnet.ru. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+Ief"
"zcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia"
"+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHK"
"d2mdqfW+emSW/paUwQIDAQAB")
Копируем DKIM и создаем в DNS запись TXT. Пример:
dkim._domainkey.subbnet.ru text = "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+IefzcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHKd2mdqfW+emSW/paUwQIDAQAB"
Создать другую подпись DKIM
Генерируем новый ключ:
amavisd genrsa /var/lib/dkim/subbnet0.ru.pem 1024
* где subbnet0.ru — новый домен, для которого мы сгенерируем подпись dkim.
* некоторые системы не работают с ключами более чем 1024 бит.
Задаем права на созданный файл:
chown amavis:amavis /var/lib/dkim/subbnet0.ru.pem
chmod 0400 /var/lib/dkim/subbnet0.ru.pem
Открываем конфигурационный файл amavisd:
vi /etc/amavisd/amavisd.conf
* если файла нет или он окажется пустым, vi /etc/amavisd.conf.
Находим строчку:
dkim_key('subbnet.ru', "dkim", "/var/lib/dkim/subbnet.ru.pem");
* напомню, что subbnet.ru — домен, который мы вводили при установке iRedMail. В каждом случае он будет другим.
И добавляем радом с ней новую. Получится так:
dkim_key('subbnet.ru', "dkim", "/var/lib/dkim/subbnet.ru.pem");
dkim_key('subbnet0.ru', "dkim", "/var/lib/dkim/subbnet0.ru.pem");
Теперь находим строчку:
@dkim_signature_options_bysender_maps = ( {
...
"subbnet.ru" => { d => "subbnet.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
И также после нее добавляем новую. Должно получиться:
@dkim_signature_options_bysender_maps = ( {
...
"subbnet.ru" => { d => "subbnet.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
"subbnet0.ru" => { d => "subbnet0.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 @subbnet.ru @.subbnet.ru
python wblist_admin.py --add --blacklist 111.112.113.115 @baddomain.com
* Первая команда добавит в белый список адрес 111.112.113.114, email info@domain.ru и домен subbnet.ru со всеми поддоменами. Вторая команда добавит в черный список адрес 111.112.113.115 и домен baddomain.com.
Удалить из списка:
python wblist_admin.py --delete --whitelist 111.112.113.114 info@domain.ru @subbnet.ru @.subbnet.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@subbnet.ru --webroot-path /usr/share/nginx/html/ -d mail.subbnet.ru
* обратите внимание, что в данном примере мы получим сертификат для узла mail.subbnet.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.subbnet.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.subbnet.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
Отключение антивируса и антиспама
Отключить защиту для почты может понадобиться при различных обстоятельствах, например:
- Для диагностики проблем отправки сообщений.
- Экономии ресурсов (антивирус может слишком много потреблять ресурсов).
- При отсутствии необходимости.
И так, для отключения 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 | ||
Имя пользователя | Почтовый адрес, к которому выполняем подключение | ||
Пароль | Пароль для почтового ящика |
Группы рассылки
В профессиональной платной версии iRedMail можно управлять группами рассылки из веб-интерфейса. Данный процесс не вызовет сложностей. Мы же рассмотрим, как создать группу для рассылки через запросы SQL. Данный метод является единственным для бесплатной версии.
Подключаемся к базе данных (в нашем примере, это mariadb):
mysql -uroot -p
Используем нашу базу для почты:
> use vmail
Создадим группу рассылки:
> INSERT INTO alias (address, domain, active) VALUES ('managers@subbnet.ru', 'subbnet.ru', 1);
* в данном примере мы создали группу с почтовым адресом managers@subbnet.ru для домена subbnet.ru.
Теперь добавим в нее три адреса:
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@subbnet.ru', 'postmaster@subbnet.ru', 'subbnet.ru', 'subbnet.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@subbnet.ru', 'test1@subbnet.ru', 'subbnet.ru', 'subbnet.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@subbnet.ru', 'example@gmail.com', 'subbnet.ru', 'gmail.com', 1, 1);
* в данном примере мы добавили в созданный адрес рассылки managers@subbnet.ru три адреса — postmaster@subbnet.ru, test1@subbnet.ru, example@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@subbnet.ru';
* в нашем примере, для postmaster@subbnet.ru.
Дополнительная настройка
Лимит на объем отправляемого сообщения
Задается командой:
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@subbnet.ru
* в даной инструкции мы говорим проверять заголовок, и если находим в теме [SPAM], перенаправляем письмо на ящик spam@subbnet.ru.
Проверяем настройку командой:
postmap -q "Subject: [SPAM] test" pcre:/etc/postfix/header_checks
Мы должны увидеть что-то на подобие:
REDIRECT spam@subbnet.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@subbnet.ru', 'other_user@example.com', 'subbnet.ru', 'example.com', 1, 1);
* в данном примере мы перенаправим всю почту, которая придет на адрес iredmail_user@subbnet.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';
Настройка политики паролей
По умолчанию, система требует сложные пароли. Если это нам мешает, мы можем поменять настройку в файле:
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
Однако, в моем случае настройка не применилась. По ощущениям, из-за кэша. В итоге, помогла полная перезагрузка сервера.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.