Полноценный почтовый сервер с 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@… На данный ящик могут приходить жалобы на СПАМ. Стоит время от времени просматривать его (или настроить переадресацию), и реагировать на жалобы. Эту рекомендацию я нашел в инете, и не проверял.
Отключение антивируса и антиспама
Отключить защиту для почты может понадобиться при различных обстоятельствах, например:
- Для диагностики проблем отправки сообщений.
- Экономии ресурсов (антивирус может слишком много потреблять ресурсов).
- При отсутствии необходимости.
Так же не вижу смысла включать антивирус на почте, сейчас по почте рассылают либо фишинг, либо шифровальщики. Встроенный в почту антивир обычно это дело пропускает.
И так, для отключения 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]
и проверил отправку и получение почты уже через веб-морду
Дополнительные настройки
Бэкапы
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-канале