Внутренний почтовый сервер на базе iredmail

Настройки Amavis

Для того, что­бы Amavis не уда­лял пись­ма поме­чен­ные в теме пись­ма как spam, отре­дак­ти­ру­ем файл amavisd.conf

YAML

# nano /etc/amavisd/amavisd.conf
# SPAM
$final_spam_destiny = D_BOUNCE

1
2
3

# nano /etc/amavisd/amavisd.conf

# SPAM

$final_spam_destiny=D_BOUNCE

Для того, что­бы акти­ви­ро­вать обу­че­ние SpamAssassin в Amavis, отре­дак­ти­ру­ем файл amavisd.conf

YAML

# nano /etc/amavisd/amavisd.conf
$sa_tag_level_deflt = -999;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = 6.3;
$sa_dsn_cutoff_level = 10;

1
2
3
4
5

# nano /etc/amavisd/amavisd.conf

$sa_tag_level_deflt=-999;

$sa_tag2_level_deflt=5;

$sa_kill_level_deflt=6.3;

$sa_dsn_cutoff_level=10;

Пере­за­пус­ка­ем Amavis

YAML

# systemctl restart amavisd

1 # systemctl restart amavisd

Настройка SpamAssassin

Настра­и­ва­ем хра­не­ние базы SpamAssasin в MySQL, редак­ти­ру­ем файл local.cf

YAML

# nano /etc/mail/spamassassin/local.cf
use_bayes 1
bayes_auto_learn 1
bayes_auto_expire 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# nano /etc/mail/spamassassin/local.cf

use_bayes1
bayes_auto_learn1
bayes_auto_expire1
 
# Store bayesian data in MySQL
bayes_store_moduleMail:SpamAssassin:BayesStore:MySQL

bayes_sql_dsnDBI:mysql:sa_bayes:127.0.0.1:3306

 
# Store bayesian data in MySQL
#bayes_store_module Mail::SpamAssassin::BayesStore::PgSQL
#bayes_sql_dsn      DBI:Pg:database:sql_server:sql_port
#
bayes_sql_username%user%

bayes_sql_password%password%

где:
%user% — имя поль­зо­ва­те­ля, кото­рый име­ет доступ к базе sa_bayes
%password% — пароль
Эти дан­ные мы заве­дем чуть позже

Про­ве­рим вер­сию SpamAssassin и ска­ча­ем схе­му базы spamassassin

YAML

# spamassassin -V
SpamAssassin version 3.4.0
running on Perl version 5.16.3
# cd /home
# wget http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_release_3_4_0/sql/bayes_mysql.sql

1
2
3
4
5

# spamassassin -V

SpamAssassinversion3.4.0

runningonPerlversion5.16.3

# cd /home

# wget http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_release_3_4_0/sql/bayes_mysql.sql

Отре­дак­ти­ру­ем файл bayes_mysql.sql
В нем надо varchar(200) поме­нять на varchar(191), ина­че при добав­ле­нии схе­мы в базу про­изой­дет не полностью

Созда­дим базу sa_bayes, поль­зо­ва­те­ля и пароль

YAML

# mysql -uroot -p
mysql> CREATE DATABASE sa_bayes;
mysql> USE sa_bayes;
mysql> SOURCE /home/bayes_mysql.sql;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON sa_bayes.* TO %user%@localhost IDENTIFIED BY ‘%password%’;
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

1
2
3
4
5
6
7

# mysql -uroot -p

mysql>CREATEDATABASEsa_bayes;

mysql>USEsa_bayes;

mysql>SOURCE/home/bayes_mysql.sql;

mysql>GRANTSELECT,INSERT,UPDATE,DELETEONsa_bayes.*TO%user%@localhostIDENTIFIEDBY’%password%’;

mysql>FLUSHPRIVILEGES;

mysql>EXIT;

Не забы­ва­ем менять %user% и %password% на свои значения

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

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

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

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='[email protected]';

* в данном примере мы указываем, что пользователь [email protected] должен быть админом (isadmin=1), но не глобальным админом (isglobaladmin=0).

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

> INSERT INTO domain_admins (username, domain) VALUES ('[email protected]', 'test.local');

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

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

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

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

vi /etc/postfix/header_checks

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

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

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

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

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

REDIRECT [email protected]

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

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 ('[email protected]', '[email protected]', 'dmosk.ru', 'example.com', 1, 1);

* в данном примере мы перенаправим всю почту, которая придет на адрес [email protected]на почтовый ящик [email protected].

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

> SELECT * FROM forwardings WHERE address!=forwarding;

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

> DELETE FROM forwardings WHERE id='10';

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

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

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

Аналоги iRedMail

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

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

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

Что такое iRedMail?

iRedMail — это почтовый сервер с открытым исходным кодом, богатый функциями, которые помогают упростить развертывание, настройку и общие повседневные почтовые операции для дистрибутивов Linux. Он поддерживается различными дистрибутивами Linux, такими как Ubuntu, Red Hat, Debian, FreeBSD, OpenBSD, CentOS и Rocky Linux 8. iRedMail позволяет создавать бесчисленные почтовые ящики и почтовые домены в веб-панели администратора.

iRedMail предпочтительнее по следующим причинам:

  • Privacy-One может контролировать безопасность электронной почты
  • Это открытый исходный код
  • Веб-почта — упрощает управление почтой, папками, сетчатыми фильтрами.
  • Безопасность по умолчанию — пользователи вынуждены использовать почтовые службы через безопасные соединения, такие как веб-почта с HTTPS и IMAP, SMTP, POP3 через TLS.
  • Календари / Контакты / ActiveSync
  • Хранит учетные записи в бэкэндах MariaDB, OpenLDAP, PostgreSQL и MySQL.
  • Имеет упрощенную веб-панель администратора.
  • Воспроизводимый и простой в использовании почтовый сервер в развёртывании

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

  • Сервер Dovecot IMAP
  • ClamAV для антивируса
  • Сервер политик iRedAPD Postfix для серых списков
  • SpamAssassin для защиты от спама
  • Fail2ban для защиты SSH
  • SMTP-сервер Postfix
  • Amavised-новинка для подписи и проверки DKIM
  • Веб-сервер Nginx для обслуживания панели администратора и веб-почты
  • Веб-почта Roundcube
  • Мониторинг сервера Netdata
  • Fail2ban для защиты SSH
  • OpenLDAP, MySQL / MariaDB или PostgreSQL для хранения пользовательской информации
  • ClamAV для антивируса
  • менеджер списков рассылки mlmmj

Для этого руководства по установке и настройке почтового сервера iRedMail в Rocky Linux 8 вам потребуется следующее:

  • Сервер Rocky Linux 8 с минимальным объемом памяти 2 ГБ.
  • Пользователь с привилегиями sudo
  • Доменное имя почтового сервера

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

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

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

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

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

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

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

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

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

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

Создать другую подпись 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.

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

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

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

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

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

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

systemctl restart amavisd

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

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

Ящик abuse

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

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

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

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

mysql -uroot -p

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

> use vmail

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

> INSERT INTO alias (address, domain, active) VALUES ('[email protected]', 'dmosk.ru', 1);

* в данном примере мы создали группу с почтовым адресом [email protected]для домена dmosk.ru.

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

> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('[email protected]', '[email protected]', 'dmosk.ru', 'dmosk.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('[email protected]', '[email protected]', 'dmosk.ru', 'dmosk.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('[email protected]', '[email protected]', 'dmosk.ru', 'gmail.com', 1, 1);

* в данном примере мы добавили в созданный адрес рассылки [email protected]три адреса — [email protected][email protected][email protected]

Обратите внимание, что последний адрес на бесплатном сервисе от Google

Step 1: Choose the Right Hosting Provider and Buy a Domain Name

It is highly recommended that you install iRedMail on a clean fresh Ubuntu 22.04 server. If you use an existing production server, iRedMail might wipe away your existing database.

This tutorial is done on a $9/month Kamatera VPS (virtual private server) with 1 CPU and 3GB RAM. They offer a 30-day free trial.

Kamatera is a very good option to run a mail server because

  • They don’t block port 25, so you can send unlimited emails (transactional email and newsletters) without spending money on SMTP relay service. Kamatera doesn’t have any SMTP limits. You can send a million emails per day.
  • The IP address isn’t on any email blacklist. (At least this is true in my case. I chose the Dallas data center.) You definitely don’t want to be listed on the dreaded Microsoft Outlook IP blacklist or the spamrats blacklist. Some blacklists block an entire IP range and you have no way to delist your IP address from this kind of blacklist.
  • You can edit PTR record to improve email deliverability.
  • They allow you to send newsletters to your email subscribers with no hourly limits or daily limits, whatsoever.
  • You can order multiple IP addresses for a single server. This is very useful for folks who need to send a large volume of emails. You can spread email traffic on multiple IP addresses to achieve better email deliverability.

Go to Kamatera website to create an account, then create your server in your account dashboard.

I recommend following the tutorial linked below to properly set up your Linux VPS server on Kamatera.

How to Create a Linux VPS Server on Kamatera

ssh 

You will be asked to enter the password.

You also need a domain name. I registered my domain name from NameCheap because the price is low and they give whois privacy protection free for life.

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

Получение

Чтобы проверить получение почты, для домена должна быть настроена 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/

Откроется панель для работы с почтой — вводим логин и пароль от созданного пользователя (логин должен быть с доменом, в нашем примере, [email protected])

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

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

Режем заголовки в Postfix

Для того, что бы не све­тить свой локаль­ный ip в исход­ни­ке пись­ма, отре­дак­ти­ру­ем файл header_checks, доба­вив туда строки

YAML

# nano /etc/postfix/header_checks
/^\s*(Received: from)*(.*for <.*@(?!test.ru).*)/ REPLACE $1 (localhost )$2
/^\s*Mime-Version: 1.0.*/ REPLACE Mime-Version: 1.0
/^\s*User-Agent/ IGNORE
/^\s*X-Enigmail/ IGNORE
/^\s*X-Mailer/ IGNORE
/^\s*X-Originating-IP/ IGNORE

1
2
3
4
5
6
7

# nano /etc/postfix/header_checks

/^\s*(Received: from)*(.*for <.*@(?!test.ru).*)/ REPLACE $1 (localhost )$2

/^\s*Mime-Version: 1.0.*/ REPLACE Mime-Version: 1.0

/^\s*User-Agent/IGNORE

/^\s*X-Enigmail/IGNORE

/^\s*X-Mailer/IGNORE

/^\s*X-Originating-IP/IGNORE

Пере­за­гру­жа­ем Postfix

YAML

# systemctl restart postfix

1 # systemctl restart postfix

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

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

vi /etc/hostname

mail.dmosk.ru

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

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

Заданное имя сервера должно разрешаться в IP-адрес через DNS. Если на момент установки это невозможно, создадим запись в файле hosts:

vi /etc/hosts

127.0.0.1       mail.dmosk.ru mail

* очень важно, чтобы имя FQDN было первым. Останавливаем веб-сервер apache (в данном примере будет использоваться nginx):

Останавливаем веб-сервер apache (в данном примере будет использоваться nginx):

systemctl stop apache2

systemctl disable apache2

* если не остановить apache и попытаться установить nginx, мы получим ошибку Errors were encountered while processing: nginx-full.

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

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

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

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

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

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

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

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

systemctl restart nginx

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

yum install certbot

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

certbot certonly --webroot --agree-tos --email [email protected] --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

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

ln -s /etc/letsencrypt/live/mail.dmosk.ru/cert.pem /etc/pki/tls/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.dmosk.ru/privkey.pem /etc/pki/tls/private/iRedMail.key

* cert.pem и iRedMail.crt — открытые ключи (public); privkey.pem и iRedMail.key — закрытые (private); mail.dmosk.ru — узел, для которого был получен сертификат

Обратите внимание, что в нашем примере прописаны пути до сертификатов от Let’s Encrypt — если у вас свои сертификаты, пути должны быть соответствующими

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

systemctl restart iredapd
systemctl restart nginx

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

crontab -e

Добавим: 

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

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

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

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

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

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

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

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

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

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

Создать другую подпись 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.

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

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

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

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

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

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

systemctl restart amavisd

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

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

Ящик abuse

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

Step 5: Installing Let’s Encrypt TLS Certificate

Obtaining the Certificate

First, log in to your server again via SSH and run the following command to install Let’s Encrypt (certbot) client on Ubuntu 20.04.

sudo apt install certbot

iRedMail has already configured TLS settings in the default Nginx virtual host, so here I recommend using the webroot plugin, instead of nginx plugin, to obtain a certificate. Run the following command. Replace the red text with your actual data.

sudo certbot certonly --webroot --agree-tos --email  -d mail.your-domain.com -w /var/www/html/

When it asks you if you want to receive communications from EFF, you can choose No.

If everything went well, you will see the following text indicating that you have successfully obtained a TLS certificate. Your certificate and chain have been saved at directory.

Failure to Obtain TLS Certificate

If certbot failed to obtain TLS certificate, maybe it’s because your DNS records are not propagated to the Internet. Depending on the domain registrar you use, your DNS record might be propagated instantly, or it might take up to 24 hours to propagate. You can go to https://dnsmap.io, enter your mail server’s hostname () to check DNS propagation.

If certbot failed to obtain a certificate and you saw the following message,

Failed authorization procedure. mail.linuxbabe.com (http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://mail.linuxbabe.com/.well-known/acme-challenge/IZ7hMmRE4ZlGW7cXYoq2Lc_VrFzVFyfW6E0pzNlhiOA: Timeout during connect (likely firewall problem)

It might be that you have set AAAA record for , but Nginx web server doesn’t listen on IPv6 address. To fix this error, edit the file

sudo nano /etc/nginx/sites-enabled/00-default.conf

Find the following line.

#listen :80;

Remove the character to enable IPv6 for this Nginx virtual host.

listen :80;

Save and close the file. Then edit the SSL virtual host .

sudo nano /etc/nginx/sites-enabled/00-default-ssl.conf

Add the following line.

listen :443 ssl http2;

Save and close the file. Then test Nginx configuration.

sudo nginx -t

If the test is successful, reload Nginx for the change to take effect.

sudo systemctl reload nginx

Run the following command again to obtain TLS certificate. Replace red text with your actual data.

sudo certbot certonly --webroot --agree-tos --email  -d mail.your-domain.com -w /var/www/html/

Now you should be able to successfully obtain TLS certificate.

Installing the Certificate in Nginx

After obtaining a TLS certificate, let’s configure Nginx web server to use it. Edit the SSL template file.

sudo nano /etc/nginx/templates/ssl.tmpl

Find the following 2 lines.

ssl_certificate /etc/ssl/certs/iRedMail.crt;
ssl_certificate_key /etc/ssl/private/iRedMail.key;

Replace them with:

ssl_certificate /etc/letsencrypt/live/mail.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.your-domain.com/privkey.pem;

Save and close the file. Then test nginx configuration and reload.

sudo nginx -t

sudo systemctl reload nginx

Visit iRedMail admin panel again, your web browser won’t warn you any more because Nginx is now using a valid TLS certificate.

Installing TLS Certificate in Postfix and Dovecot

We also need to configure Postfix SMTP server and Dovecot IMAP server to use the Let’s Encrypt issued certificate so that desktop mail client won’t display security warning. Edit the main configuration file of Postfix.

sudo nano /etc/postfix/main.cf

Find the following 3 lines. (line 95, 96, 97).

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

Replace them with:

smtpd_tls_key_file = /etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your-domain.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.your-domain.com/chain.pem

Save and close the file. Then reload Postfix.

sudo systemctl reload postfix

Next, edit the main configuration file of Dovecot.

sudo nano /etc/dovecot/dovecot.conf

Fine the following 2 lines. (line 47, 48)

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

Replace them with:

ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem

Save and close the file. Then reload dovecot.

sudo systemctl reload dovecot

From now on, desktop mail users won’t see security warnings.

How to Disable Greylisting

By default, iRedMail has enabled greylisting, which tells other sending SMTP servers to try again in a few minutes. This is mainly useful to block spam, but it also degrades user experience. If you prefer to disable greylisting, follow the instructions below.

Add write permission to the file.

sudo chmod 600 /opt/iredapd/settings.py

Then edit the configuration file.

sudo nano /opt/iredapd/settings.py

Find the following line.

plugins = 

Remove from the list. Save and close the file. Then restart iredapd.

sudo systemctl restart iredapd

Change the configuration file back to read only mode.

sudo chmod 400 /opt/iredapd/settings.py

SSL cert relevant settings in Postfix/Dovecot/Apache/Nginx

In sample settings below, file paths are for Debian/Ubuntu.

Apache (web server)

  • On RHEL/CentOS, SSL certificate is defined in .
  • On Debian/Ubuntu, it’s defined in
    (or )
  • On FreeBSD, it’s defined in . Note:
    if you’re running different version of Apache, the path will be slightly
    different ( will be ).
  • On OpenBSD, if you’re running OpenBSD 5.5 or earlier releases, it’s defined
    in . Note: OpenBSD 5.6 and later releases don’t
    ship Apache anymore.

Example:

Restarting Apache service is required.

MySQL, MariaDB

  • On Red Hat and CentOS, it’s defined in
  • On Debian and Ubuntu, it’s defined in .
  • On FreeBSD, it’s defined in .
  • On OpenBSD, it’s defined in .

OpenLDAP

  • On Red Hat and CentOS, it’s defined in .
  • On Debian and Ubuntu, it’s defined in .
  • On FreeBSD, it’s defined in .
  • On OpenBSD, it’s defined in .

OpenBSD ldapd(8)

To make ldapd(8) listening on network interface for external network, please
make sure you have setting in to listen on the interface. We
use as external network interface here for example.

If you want to use port 636 with SSL, try this:

ldapd(8) will look for SSL cert and key from directory by
default, the cert file name is and .
In our case, it will look for and .

Since iRedMail already generates a cert and key, we can use it directly. If you
have bought SSL cert/key, or requested one from LetsEncrypt, you can use them
too.

Now restart ldapd(8) service:

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: