Полноценный почтовый сервер с iRedMail на Ubuntu 22.04

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

Я лично столкнулся с этим и мне пришлось поднимать несколько почтовых серверов для рассылки писем клиентам и отдельную почту для корпоративного использования. Учитывая, что в инете была разная информация

В место того, чтобы поднимать каждый компонент почтового сервиса по отдельности, было решено воспользоваться скриптом iRedMail. Который включает в себя:

  • Хранение данных в СУБД.
  • Защита от спама
  • Подключение к ящикам по POP3 и IMAP (Dovecot)
  • Возможность работать с почтой удаленно в браузере
  • Управление почтовыми ящиками с помощью веб-интерфейса
  • Шифрование при передаче сообщений (STARTTLS, TLS, SSL)

Подготовка сервера

Настройка описана для сервера Ubuntu 22.04, все команды выполняются от рута

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

/etc/hostname

mail.domain.ru

… или командой

# hostnamectl set-hostname mail.domain.ru

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

Настроим файл /etc/hosts

127.0.0.1 mail.domain.ru mail localhost
127.0.1.1 mail.domain.ru mail localhost localhost.localdomain 

# The following lines are desirable for IPv6 capable hosts
::1     mail.domain.ru mail localhost localhost.localdomain 
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

mail.domain.ru - понятное дело, подменяем на свой домен

В инете я находил старую информацию о том, что домен должен стоять после IP локального хоста… Но при конечной проверки почты, получал ошибку RDNS_NONE

Но после приведения файла хостов, к подобному виду как выше. Ошибка уходила.

Еще один пример файла /etc/hosts, если вы все же получаете ошибку RDNS_NONE

127.0.0.1 localhost localhost.localdomain mail.domain.ru
127.0.1.1 localhost localhost.localdomain mail.domain.ru mail 

# The following lines are desirable for IPv6 capable hosts
::1     localhost localhost.localdomain mail.domain.ru 
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Порты

Если в нашей системе настроен брандмауэр, мы должны открыть следующие порты:

iptables -I INPUT -p tcp \
    --match multiport --dports 25,80,110,143,443,465,587,993,995 \
    -j ACCEPT
  • 25 — стандартный SMTP (без шифрования или через STARTTLS);
  • 80 — HTTP для порталов iRedAdmin и Roundcube;
  • 110 — стандартный POP3 (без шифрования или через STARTTLS);
  • 143 — стандартный IMAP (без шифрования или через STARTTLS);
  • 443 — защищенный HTTPS для порталов iRedAdmin и Roundcube;
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 995 — защищенный POP3 через SSL/TLS.

Для сохранения правил установим утилиту iptables-persistent:

apt-get install iptables-persistent && netfilter-persistent save

Или воспользоваться UFW

ufw allow 22,25,80,110,143,443,465,587,993,995 \
    && ufw enable \
    && systemctl enable ufw

Так же рекомендую отключить IPv6 на сервере, если у вас есть IPv6 адрес. После установки и настройки, можете получить ситуацию. Когда выходной IP адрес в сети будет v6, при отправке письма. Другие почтовые сервера увидя IPv6 адрес, будут искать доменные записи IPv6, которые мы не будем делать в этом руководстве

IPv6 не рассматриваю, по причине того, что мои домены находятся на Cloudflare, и мне доступны тока IPv4 записи

Добавим в конец файла /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6 = 1

Применим изменения # sysctl -p

Проверяем # cat /proc/sys/net/ipv6/conf/all/disable_ipv6

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

dpkg-reconfigure tzdata

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

Для того, чтобы ваша почта заработала, необходимо для начала настроить домен.

PTR запись

PTR запись - если объяснять простыми словами, это запись, которая связывает IP адрес с доменом вашего сайта.

У вашего домена на DNS серверах прописана А запись, которая связывает ваш домен с IP адресом сервера, где расположен ваш сайт. А PTR запись делает наоборот - связывает IP адрес с доменом.

Данную запись в большинстве случаев вы не сможете сделать самостоятельно. Если вы арендуете сервер, в каком либо ДЦ, или у вас стоит ваш сервер в ДЦ, то придется писать в саппорт. С просьбой связать (прописать) PTR запись вашего домена mail.domail.ru с внешним IP вашего сервера

Обычно такую запись создают с TTL 3600 - что равно одному часу. Бывает и сутки нужно ждать, чтобы по всему инету DNS сервера узнали о вашей записи, но это уже при большом значении TTL

Если вы арендуете мощности в облаках по типу AWS и т.п., то PTR запись можно будет прописать в админке, или через API

Пример как должна выглядеть ваша PTR запись

3.6.42.53.in-addr.arpa name = mail.domain.ru

Эта запись соответствует IP 53.42.6.3

Если вы хотите завести на сервере 2 и более доменов, то отвечу на ваш вопрос. Что да, можно завести более одной PTR записи, вот пример двух почтовиков на одном сервере.

3.6.42.53.in-addr.arpa     name = mail.domain.ru
3.6.42.53.in-addr.arpa     name = mail.site.ru

Проверить PTR запись можно на сайте https://dnschecker.org/ Вставляем IP адрес вашего сервера и получаем список PTR записей, подобные сайты хороши тем, что можно отследить, как во всем мире резолвятся ваши DNS записи

Но есть нюанс с PTR записью. Не все почтовые сервера (типо yahoo, icloud и т.д.) резолвят вторую строчку PTR записи. Скорее всего другие сервера узнают о самой первой строке записи и будут использовать ее. Связано это с тем, что зеролв данной записи происходит по протоколу UDP имеющий ограничения на количество передоваемой информации.

В некоторых ситуациях, можно оставить одну PTR запись, вашего первого домена, как в нашем примере 3.6.42.53.in-addr.arpa name = mail.domain.ru, для mail.site.ru PTR не создавать. Но может случиться так, что при отправке письма, другой почтовый сервер (не наш) будет опираться на проверку PTR и не обнаружит PTR для mail.site.ru, тогда письмо с некоторой вероятностью полетит в спам

По-хорошему, потребуется на ваш почтовый сервак завести еще один внешни IP и задать уже на второй IP адрес запись для mail.site.ru. Но это не всегда нужно, учитывайте это и решайте, как лучше сделать.

В любом случае вы можете добавить еще один IP и новую PTR запись несколько позже, чтобы проверить, нужно ли оно вам. Потому как при той настройке, что мы сделаем с вами, мне не потребовалось добавлять IP адреса на сервак

MX запись

Для возможности получать письма. Необходимо создать MX запись

Пример такой записи:

MX @ mail.domain.ru 10

MX — тип записи

@ - корневой домен

10 — приоритет (таких записей может быть несколько)

mail.domain.ru — значение, имя нашего почтового сервера (на данное имя необходима также запись типа А)

Для подобной записи укажите TTL со значением 120, для начала, чтобы долго не пришлось ждать

Не рекомендуется вписывать в значение IP адрес вашего сервера. Многие почтовые сервисы пытаются зарезолвить именно mail.domain.ru, на примере нашего, а не IP адрес

A запись

Необходимо создать A запись для вашего mail домена

mail.domain.ru A 53.42.6.3

mail.domain.ru - субдомен

A - тип записи

53.42.6.3 - IP сервера

SPF запись

SPF запись, разрешает определённым адресам отправлять сообщение с указанного домена, и говорит, что делать если сообщение пришло с другого адреса. Без данной записи, вы будете попадать в спам, или могут возникнуть другие проблемы

Таких записей для одного домена domain.ru нам потребуется прописать 3 штуки

mail.domain.ru  TXT   v=spf1 a -all
www.domain.ru   TXT   v=spf1 a -all
domain.ru       TXT   v=spf1 a:mail.domain.ru +mx -all

DKIM запись

Отложите создание данной записи. Как только установите iRedMail на сервере. Вернитесь к ней

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

Во время установки iRedMail генерирует на вашем сервере DKIM запись для домена, который вы указали

Чтобы, увидеть данную запись нужно ввести команду

amavisd-new showkeys

И мы получим вывод

; key#1 2048 bits, s=dkim, d=domain.ru, /var/lib/dkim/domain.ru.pem

dkim._domainkey.domain.ru. 3600 TXT (
  "v=DKIM1; p="
  "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq05WAVtdFAgPXpUnCq/8"
  "nAP/GP8PDdjonGJ45j1Wi08RcLKd1rBmDQ0xaQBVI1NsVitOpaZmByysXnciw90F"
  "aa5aOvrN158Zvu5CbOoHm+3TeBSD1DE3lZxdatnKGFdRXKXOfRFJVK2R01+1h4Hj"
  "c5OsK01Z3M8v8pftge5ypLYFO5PYD4meV85VUX3Ht94gYrRsjnhFN2h1XY9LE8HX"
  "iElp1LEJlYlwTq3y4U4BHqoWPrn0qww2fSm603RK3vsYWOeu00pOy+raiymCnyOz"
  "QapiAE0r7Td4lpKg1JzKiUd7apXojklHPHIBwI5Vfx75Osxo2P0mhXOrNlSXm5nx"
  "LQIDAQAB")

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

Оказалось все просто, запись должна выглядеть так

dkim._domainkey.domain.ru  TXT  v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq05WAVtdFAgPXpUnCq/8nAP/GP8PDdjonGJ45j1Wi08RcLKd1rBmDQ0xaQBVI1NsVitOpaZmByysXnciw90F...LQIDAQAB

Не буду полностью выводить данную запись. То есть, для тех кто не понял (и для меня в прошлом), значение TXT записи указывается в одну строку, без кавычек, начиная от v=DKIM1; p=MIIBIjANBgkqhkiG, заканчивая LQIDAQAB

dkim._domainkey TXT dkim._domainkey.domain.ru TXT v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq05WAVtdFAgPXpUnCq/8nAP/GP8PDdjonGJ45j1Wi08RcLKd1rBmDQ0xaQBVI1NsVitOpaZmByysXnciw90F...LQIDAQAB

DMARC запись

DMARC запись, позволяет выставить политики в зависимости от проверок SPF и DKIM. Эти политики, нужны получателю, чтобы знать, как поступать с вашими письмами

_dmarc.domain.ru TXT v=DMARC1; p=quarantine; sp=none; pct=100; fo=0; rua=mailto:[email protected]

С записями мы закончили. Когда я поднимал свои почтовые сервера, то ссылался на эту статью https://habr.com/ru/post/496018/

Установка iRedMail

Пора приступать к установке. Все команды ниже выполняются так же, от рута

Качаем стабильную версию https://www.iredmail.org/download.html

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

wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz

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

tar zxvf 1.6.2.tar.gz

Переходим в каталог с распакованным установщиком:

cd iRedMail-1.6.2/

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

bash iRedMail.sh

Запустится мастер настроек. В первом окне с приветствием ответьте Yes:

В окне Default mail storage path оставляем /var/vmail и задаем свой путь для хранения сообщений:

В следующем окне Preferred web server выбираем Nginx:

В окне Choose preferred backend used to store mail accounts выбираем

И задаем пароль для пользователя СУБД:

На следующем шаге вводим наш первый почтовый домен:

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

В окне Optional components выбираем все доступные компоненты:

В самом конце вводим Y, чтобы подтвердить введенные настройки.

Начнется установка почтового сервера.В конце система предложит активировать фаервол — соглашаемся вводом Y

На вопрос, перезапуска фаерволла пока ответим отрицательно N

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

reboot

Автоматизация установки

Являясь DevOps-инженером, мне необходимо автоматизировать развертывание сервера. Да и любому уже состоявшемуся Linux-админу рекомендую переходить на Ansible и прочие системы оркестрации

Для примера повторим предварительную настройку iRedMail перед установкой

wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz

tar zxvf 1.6.2.tar.gz

cd iRedMail-1.6.2/

Создадим файл config

export STORAGE_BASE_DIR='/var/vmail'
export WEB_SERVER='NGINX'
export BACKEND_ORIG='PGSQL'
export BACKEND='PGSQL'
export VMAIL_DB_BIND_PASSWD='HCZ4hxlXoNWu1c2LHzYrouyaI3k9OlPl'
export VMAIL_DB_ADMIN_PASSWD='8FXQJxOZq1KJfgEAEhd7FgmVeVmbtMp3'
export MLMMJADMIN_API_AUTH_TOKEN='D2lLT9UC1gKs7y1rlGYHWDD4grbSccS6'
export NETDATA_DB_PASSWD='uIyPwmcEMcGMHrFgsJhYnHfWNrvRn0je'
export PGSQL_ROOT_PASSWD='wmcEgI2BiFMk3nl7f2AWYRq1sJhM'
export FIRST_DOMAIN='domain.ru'
export DOMAIN_ADMIN_PASSWD_PLAIN='wmcEgI2BiFMk3nl7f2AWYRq1sJhM'
export USE_IREDADMIN='YES'
export USE_ROUNDCUBE='YES'
export USE_NETDATA='YES'
export USE_FAIL2BAN='YES'
export AMAVISD_DB_PASSWD='VY3wbxcWrLaoFgKvPQZptlcvHWhVZgnb'
export IREDADMIN_DB_PASSWD='7DdWkEdt1YQsQzxR5YYnPsm8W0bVekvC'
export RCM_DB_PASSWD='f4Umv1WeSewDjVhybq5eTipEH8DojUOB'
export SOGO_DB_PASSWD='OPuvEombJCacYAWYRjKuUgzbHGUI7wdX'
export SOGO_SIEVE_MASTER_PASSWD='EIxqhSu8i3zSFQWAFidXTf8uOrNozmRB'
export IREDAPD_DB_PASSWD='g257Brti8I2BiFM22HvXAQOQT1eE0td6'
export FAIL2BAN_DB_PASSWD='ToZK4Yqk3nl7fjkKwrELzTV2nzNIlPwF'
#EOF

Если присмотреться внимательно, то можно понять. Что конфиг файл создается, когда вы отвечаете на вопросы, при первом запуске установщика, как мы это делали выше

Если собираетесь установку почтовых серверов на поток, потребуется каждый раз генерировать новые пароли в конфиг файле

Теперь запустим установку, не в интерактивном режиме

IREDMAIL_DEBUG='NO' AUTO_USE_EXISTING_CONFIG_FILE=y \
    AUTO_INSTALL_WITHOUT_CONFIRM=y \
    AUTO_CLEANUP_REMOVE_SENDMAIL=y \
    AUTO_CLEANUP_REMOVE_MOD_PYTHON=y \
    AUTO_CLEANUP_REPLACE_FIREWALL_RULES=y \
    AUTO_CLEANUP_RESTART_IPTABLES=y \
    AUTO_CLEANUP_REPLACE_MYSQL_CONFIG=y \
    AUTO_CLEANUP_RESTART_POSTFIX=n bash iRedMail.sh

Настройка iRedMail

Подключение сертификата Certbot

Первое, что я считаю необходимо - это получить валидный сертификат от Certbot. iRedMail во время установки генерирует самоподписанный сертификат, на 10 лет.

Можно оставить и так. но вам придется добавлять каждому пользователю на ПК корневой сертификат в почтовый клиент, или в браузер. Это лишняя работа, с которой не хочется возиться.

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

Установим certbot

snap install core && snap refresh core && snap install --classic certbot && ln -s /snap/bin/certbot /usr/bin/certbot

Теперь настроим nginx для получения сертификата

/etc/nginx/sites-available/00-default-ssl.conf

Данный файл приведем к подобному виду

#  
# Note: This file must be loaded before other virtual host config files,  
#  
# HTTPS  
server {  
    listen 443 ssl http2;  
    listen [::]:443 ssl http2;  
    server_name _;  
  
    root /var/www/html;  
    index index.php index.html;  
  
    location ~ /.well-known {  
        root /usr/share/nginx/html;  
        allow all;  
    }  
  
    include /etc/nginx/templates/misc.tmpl;  
    include /etc/nginx/templates/ssl.tmpl;  
    include /etc/nginx/templates/iredadmin.tmpl;  
    include /etc/nginx/templates/roundcube.tmpl;  
    include /etc/nginx/templates/sogo.tmpl;  
    include /etc/nginx/templates/netdata.tmpl;  
    include /etc/nginx/templates/php-catchall.tmpl;  
    include /etc/nginx/templates/stub_status.tmpl;  
}

Проверим валидность конфигурации

nginx -t

И перезапустим nginx

service nginx restart

Получим сертификат

certbot certonly --webroot --non-interactive \
    --agree-tos --email [email protected] \
    --webroot-path /usr/share/nginx/html/ \
    -d mail.domain.ru

mail.domain.ru - подставляем свой домен

Если вы планируете, добавлять еще какие-либо домены на свой сервер, то потребуется перечислить их через ключ -d

Ниже пример получение сертификата для двух доменов

certbot certonly -a nginx --agree-tos \
    -d mail.domain.ru,mail.site.ru \
    --cert-name mail.domain.ru \
    --email [email protected]

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

Если непонятно о чем идет речь, после получения домена походите по директориям /etc/letsencrypt/

Перезапустим Nginx

service nginx reload

Let’s Encrypt в Postfix

В файле /etc/postfix/main.cf найдем строки

smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt

Закомментируйте их и добавьте строки ниже

smtpd_tls_key_file = /etc/letsencrypt/live/mail.domain.ru/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.domain.ru/fullchain.pem

Перезапустим Postfix

service postfix restart

Let’s Encrypt в Dovecot

В файле /etc/dovecot/dovecot.conf найдем строки

ssl_cert = </etc/ssl/certs/iRedMail.crt
ssl_key = </etc/ssl/private/iRedMail.key

Закомментируйте их и добавьте строки ниже

ssl_cert = </etc/letsencrypt/live/mail.domain.ru/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.domain.ru/privkey.pem

Перезапустим Dovecot

service dovecot restart

Проверка сертификата на почтовом сервере

Вызываем команду

openssl s_client -starttls smtp \
    -connect mail.domain.ru:25 \ 
    | openssl x509 -noout -dates 2>/dev/null \
    | grep notAfter | cut -d'=' -f2

Чтобы не забыть, про обновление сертификата. Добавим в cron задание на обновление, каждую неделю

Вызываем crontab -e

В писываем в самый конец файла

#certbot
@weekly /usr/bin/crontab renew \
    && service nginx reload \
    && service postfix reload \
    && service dovecot reload

Так же рекомендуется сделать символьные ссылки на 2 файла

/etc/ssl/private/iRedMail.key и /etc/ssl/certs/iRedMail.crt

rm /etc/ssl/private/iRedMail.key

rm /etc/ssl/certs/iRedMail.crt

ln -s /etc/letsencrypt/live/domain.ru/fullchain.pem /etc/ssl/certs/iRedMail.crt

ln -s /etc/letsencrypt/live/domain.ru/privkey.pem /etc/ssl/private/iRedMail.key

Данную процедуру выполнять не обязательно, чисто для подстраховки, на всякий случай.

Проверка работы почты

Открываем браузер и в адресной строке вводим https://mai.domain.ru/iredadmin/

Откроется страница входа в панель управления. Вводим логин [email protected] и пароль (пароль и домен domain.ru — данные, которые мы вводили при установке iRedMail).

Этот пароль храниться в конфиг файле iRedMail, который мы сгенерировали

export DOMAIN_ADMIN_PASSWD_PLAIN='wmcEgI2BiFMk3nl7f2AWYRq1sJhM'

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

Откроем https://mai.domain.ru/ и нас редиректит сюда https://mai.domain.ru/mail/

Это Web-интерфейс для пользования самой почтой, вводим логин [email protected] и пароль (пароль и домен domain.ru — данные, которые мы вводили при установке iRedMail)

Прочитайте те письма которые лежат у вас в ящике. В них хранится важная информация. Такие, как пароли и некоторые рекомендации, ссылки на документацию

Отключение Graylisting

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

Отключим его временно, а когда сервер уже будет готов к бою. Можно включить обратно

По-умолчанию настройка Graylisting /opt/iredapd/settings.py заблокирована для изменений (read-only), исправим это

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

Находим директиву с плагинами

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

Закомментируйте эту строку, и запишите ниже то же самое, но без greylisting

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

Возвращаем права только для чтения

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

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

service iredapd restart

Тут рекомендую вернуться к созданию DKIM записи, затем продолжить дальше

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

Отправьте письмо себе, другу. Пусть друг напишет на [email protected] Если у вас все получилось и вы не попали в спам, не пришло каких-либо сообщений с ошибками. То поздравляю, вам не придется дебажить почту и ее настройки)

Попробуйте подключиться к своему серверу с помощью почтовых клиентов, по протоколам IMAP и POP3 (если вам это нужно)

Ящик abuse

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

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

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

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

Так же не вижу смысла включать антивирус на почте, сейчас по почте рассылают либо фишинг, либо шифровальщики. Встроенный в почту антивир обычно это дело пропускает.

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

/etc/amavis/conf.d/50-user

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

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

Название строк говорит само за себя. Значение 1 - выключить, значение 0 - включить

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

service amavis restart

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

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

systemctl disable clamav-daemon
service clamav-daemon stop

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

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

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

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

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

/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:

service postfix restart

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

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

/etc/dovecot/dovecot.conf

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

ssl = yes  
disable_plaintext_auth = no

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

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

service dovecot restart

Мультидоменная настройка

Рассмотрим ситуацию, когда у нас один сервер и на него надо завести 2 почты от разных доменов. Выше я уже писал, особенности PTR записи. Но решение для введения нового IP и PTR записи можно отложить временно.

Давайте настроим почту на одном IP адресе

Для нового домена нам надо завести те же, записи, что и для основного. Что мы делали в начале статьи.

Создаем записи MX, A, SPF, а DKIM пока отложим в сторону, ее нужно сгенерировать на нашем сервере.

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

Необходимо для начала для сервиса amavis проверсти некоторые настройки. Нужно открыть в редакторе вот этот файл /etc/amavis/conf.d/50-user и найти строку

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

Это DKIM запись нашего первого домена и ниже нужно добавить еще одну строку, приведя этот учаток файла к подобному виду

...
dkim_key('domain.ru', 'dkim', '/var/lib/dkim/domain.ru.pem');
dkim_key('site.ru', 'dkim', '/var/lib/dkim/site.ru.pem');
...

Если потребуется добавить больше доменов, но потребуется перечислить их все

Опускаем взляд ниже, и видим комментарий в файле # catch-all (one dkim key for all domains), описывающий, что DKIM запись ниже, будет пременена для всех доменов заведенных на этом сервере. Нам такое не нужно и может вызвать множество проблем.

Эта часть конфига без изменений выглядит примерно вот так

    '.' => {d => 'domain.ru',
            a => 'rsa-sha256',
            c => 'relaxed/simple',
            ttl => 30*24*3600 },

domain.ru - это наш домен, который был указан при самой первой настройке и устрановке iRedMail

Давайте приведем эту запись к мультидоменной, поазываю как выглядит блок настройки у меня

@dkim_signature_options_bysender_maps = ({
    # 'd' defaults to a domain of an author/sender address,
    # 's' defaults to whatever selector is offered by a matching key

    # Per-domain dkim key
    # catch-all (one dkim key for all domains)
    'domain.ru' => {d => 'domain.ru',
            a => 'rsa-sha256',
            c => 'relaxed/simple',
            ttl => 30*24*3600 },

    'site.ru' => {d => 'site.ru',
            a => 'rsa-sha256',
            c => 'relaxed/simple',
            ttl => 30*24*3600 },

});

Ну и если есть более двух домено, то их тоже нужно будет все перечислить.

amavis настроен, сохраняем файл, пора генерировать новый DMKIM для домена site.ru

Выполняем команду от рута на нашем почтовом сервере

amavisd-new genrsa /var/lib/dkim/site.ru.pem 2048

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

chown amavis:amavis /var/lib/dkim/site.ru.pem && chown amavis:amavis /var/lib/dkim/ -R

Находим нашу новую запись

amavisd-new showkeys

Или выводим на экран только от нуженого домена

amavisd-new showkeys site.ru

Перезапускаем amavisd и проверяем, запустился ли демон:

service amavis restart && service amavis status

Далее нам необходимо DKIM запись прописать в настройках DNS и подождать когда она зарезолвится

dig TXT dkim._domainkey.site.ru

Как только сервер получилс запись, можно проверить валидность настроек DNS для DKIM

amavisd-new testkeys

При успешной проверке мы получим вывод:

TESTING#1 domain.ru: dkim._domainkey.domain.ru => pass
TESTING#2 site.ru: dkim._domainkey.site.ru => pass

Настройка Postfix на мультидоменность

Редактировать будем этот файл /etc/postfix/main.cf

Надим строчку virtual_alias_domains =, обычно у нее не указно никаких значений, давайте приведем ее к виду для нашего примера

virtual_alias_domains = mail.site.ru

Сюда мы указываем, только дополнительные домены, mail.domain.ru - будем считать как за основной

Далее находим строку mydestination = $myhostname, localhost, localhost.localdomain

И приведем ее к виду mydestination = $myhostname, $virtual_alias_domains, localhost, localhost.localdomain

После проведенных настроек надо перезапустить некоторые демоны

service dovecot restart \
    && service postfix restart \
    && service nginx restart

Создание нового домена в базе

Переходим по ссылке в нашу админку и добавляем новый домен

https://mail.domain.ru/iredadmin

Создаем пользователя для нашего нового домена, для начала я бы создал [email protected] и проверил отправку и получение почты уже через веб-морду

https://mail.site.ru/mail

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

Бэкапы

iRedMail устанавливает в cron задание, на бэкап данных с помощью скрипта.

Данный скрипт находится тут /var/vmail/backup/backup_pgsql.sh

Его можно изменять как вам вздумается, в скрипте есть полезные переменные, такая как KEEP_DAYS, по умолчанию, значение равно 90. Получается ротация бэкапов - 90 дней

Если ваша база слишком большая, или для вас эти данные не критичны, значение можно понизить, чтобы бэкапы не съели все пространство на диске

Настройка лимита на объем вложения

По умолчанию, допустимый размер отправляемого вложения, отправленного через iRedMail может быть размером не больше 15Мб, увеличим до 100Мб.

Например, чтобы разрешить почту с вложением размером 100 Мб, измените параметры message_size_limit и mailbox_size_limit, как показано ниже:

postconf -e message_size_limit=104857600
postconf -e mailbox_size_limit=104857600

Информация из документации

Они не должны быть одинаковыми. но mailbox_size_limit (размер почтового ящика) ДОЛЖЕН быть равен или БОЛЬШЕ, чем message_size_limit (размер одного сообщения электронной почты).

Postfix настроен на передачу полученной электронной почты в Dovecot для локальной доставки почты, поэтому параметр mailbox_size_limit не используется, но нам все еще нужен этот параметр, чтобы подавить предупреждение Postfix при запуске службы Postfix.

Перезапускаем Postfix

# service postfix restart

104857600 is 100 (MB) x 1024 (KB) x 1024 (Byte). Почта будет закодирована почтовым агентом пользователя (Outlook, Thunderbird и т. д.) перед передачей, фактический размер сообщения будет больше 100 МБ, вы можете просто увеличить указанный выше параметр до 110 МБ или 120 МБ, чтобы заставить его работать должным образом. Если mailbox_size_limit меньше, чем message_size_limit, вы получите сообщение об ошибке в файле журнала Postfix, например: fatal: main.cf configuration error: mailbox_size_limit is smaller than message_size_limit.

Изменяем настройки PHP, чтобы загружать большие файлы

/etc/php/<x.x>/fpm/php.ini - для Ubuntu Server + Nginx + php-fpm

...
memory_limit = 200M;
upload_max_filesize = 100M;
post_max_size = 100M;
...

И так же изменяем в Roundcube webmail

/opt/www/roundcubemail/config/config.inc.php

$config['max_message_size'] = '100M';

Изменяем настройки Nginx

/etc/nginx/conf-enabled/client_max_body_size.conf

client_max_body_size 100m;

Выполним перезапуск демонов # service phpX.X-fpm restart && service nginx restart && service postfix restart

service phpX.X-fpm restart - вместо X.X подставляем свою версию PHP

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

Создание алиасов

Ну и закончим алиасами. В iRedAdmin нельзя сделать алиасы, в бесплатной версии, но такая функция есть в Pro, за деньги. Платить за возможность создания алиасов, не наш метод. По этому мы сделаем все сами, через базу.

Установка последней версии iRedMail для Ubuntu Server возможна только совместно с PostgreSQL, по этому рассмотрим только эту базу.

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

Например, это будет [email protected]

После создания учетки, заходим в psql и выбираем базу vmail

Если вы не уверены в своих силах, проведите данную манипуляцию после создания бэкапа базы

# su - postgres

$ psql

postgres=# \с vmail

Вот теперь вводим запрос в базу, для создания алиаса, где [email protected] — несуществующий адрес электронной почты

INSERT INTO alias (address, domain, active) VALUES ('[email protected]', 'exaple.com', 1);

Алиас создан, теперь нам нужно его связать с существуюшей почты, куда будут прилетать письма, отправленные на [email protected]

INSERT INTO forwardings (address, forwarding,domain, dest_domain,is_alias, active) VALUES ('[email protected]', '[email protected]','exaple.com', 'domain.ru', 1, 1);

Теперь посмтрим на наши записи в двух таблицах, что мы создали

SELECT * FROM alias;
SELECT * FROM forwardings;

Теперь можно послать письмо на [email protected], а получит его уже [email protected]

Чтобы удалить алиас, вводим в ту же базу команду, с учетом верного id

DELETE from forwardings where address = '[email protected]' AND id=12;

Заключение

На этом у меня все. По окончанию настроек почты, очень рекомендую сервис https://www.mail-tester.com/ - отправляете письмо с более-менее осознанным предложением и проверяете рейтинг вашего письма. Обратите внимание, что данный сервис дает три попытки на сутки. Остальные попытки, за деньги. Но каждые сутки, ваши попытки сбрасываются

Лично данный сервис для себя принял эталонным, хоть он и не идеален. Проблем с доставкой писем не было, когда рейтинг письма был 10/10

https://mxtoolbox.com/ - так же может помочь в решении некоторых проблем

Так же прошу заметить, что я не являюсь экспертом в почтовых сервисах. Я просто разобрался с настройкой необходимой для моих задач.

Анонсы и еще больше информации в Telegram-канале