Настройки Amavis
Для того, чтобы Amavis не удалял письма помеченные в теме письма как spam, отредактируем файл amavisd.conf
YAML
# nano /etc/amavisd/amavisd.conf
# SPAM
$final_spam_destiny = D_BOUNCE
1 |
# 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 |
# 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 |
# nano /etc/mail/spamassassin/local.cf use_bayes1 bayes_sql_dsnDBI:mysql:sa_bayes:127.0.0.1:3306 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 |
# 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 |
# 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='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. При необходимости разрешить одному пользователю управлять несколькими доменами, мы должны выполнить несколько аналогичных запросов.
Перенаправление СПАМа на специальный ящик
По умолчанию, письма с отметкой в теме письма приходят на ящики пользователей. Если мы хотим, чтобы наш сервер пересылал все сообщения с подозрением на СПАМ в специальный ящик, выполняем следующее.
Открываем на редактирование файл:
vi /etc/postfix/header_checks
… и добавляем строку:
* в даной инструкции мы говорим проверять заголовок, и если находим в теме, перенаправляем письмо на ящик spam@dmosk.ru.
Проверяем настройку командой:
postmap -q "Subject: test" pcre:/etc/postfix/header_checks
Мы должны увидеть что-то на подобие:
REDIRECT spam@dmosk.ru
Теперь открываем файл:
vi /etc/postfix/master.cf
Находим в нем все опции no_header_body_checksи удаляем их. Данные опции запрещают проверку заголовков, что помешает нам использовать опцию header_checksв Postfix.
Перезапускаем службу mta:
systemctl restart postfix
Перенаправление почты для почтового ящика
Настройка пересылки писем через веб-интерфейс доступна только в Pro версии. В бесплатной это можно сделать с помощью прямых запросов в базу. Рассмотрим одну SQL-команду.
Подключаемся к базе данных:
mysql -uroot -p
Используем нашу базу для почты:
> use vmail
Создадим настройку для пересылки:
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_forwarding, active) VALUES ('iredmail_user@dmosk.ru', 'other_user@example.com', 'dmosk.ru', 'example.com', 1, 1);
* в данном примере мы перенаправим всю почту, которая придет на адрес iredmail_user@dmosk.ruна почтовый ящик other_user@example.com.
Чтобы удалить перенаправление, сначала находим нужную нам строку:
> SELECT * FROM forwardings WHERE address!=forwarding;
Затем просто ее либо удаляем по идентификатору:
> DELETE FROM forwardings WHERE id='10';
* в моем примере нужная нам строка была под идентификатором 10.
… или можно просто отключить перенаправления, не трогая троку:
> UPDATE forwardings SET active='0' WHERE id='10';
Аналоги 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 ('managers@dmosk.ru', 'dmosk.ru', 1);
* в данном примере мы создали группу с почтовым адресом managers@dmosk.ruдля домена dmosk.ru.
Теперь добавим в нее три адреса:
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'postmaster@dmosk.ru', 'dmosk.ru', 'dmosk.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'test1@dmosk.ru', 'dmosk.ru', 'dmosk.ru', 1, 1);
> INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active) VALUES ('managers@dmosk.ru', 'example@gmail.com', 'dmosk.ru', 'gmail.com', 1, 1);
* в данном примере мы добавили в созданный адрес рассылки managers@dmosk.ruтри адреса — postmaster@dmosk.ru, test1@dmosk.ru, example@gmail.com
Обратите внимание, что последний адрес на бесплатном сервисе от 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/
Откроется панель для работы с почтой — вводим логин и пароль от созданного пользователя (логин должен быть с доменом, в нашем примере, test1@dmosk.ru)
Нажимаем Написать сообщение и отправляем тестовое сообщение на один из своих адресов:
Если письма не отправляются, выполняем рекомендации ниже по предотвращению попадания в СПАМ.
Режем заголовки в 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 |
# 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 postmaster@dmosk.ru --webroot-path /usr/share/nginx/html/ -d mail.dmosk.ru
* обратите внимание, что в данном примере мы получим сертификат для узла mail.dmosk.ru. Продолжаем выполнение операции:
Продолжаем выполнение операции:
(Y)es/(N)o: Y
Мы должны увидеть подтверждение об успешном получении сертификата:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live...
Удаляем старые сертификаты:
\rm /etc/pki/tls/private/iRedMail.key
\rm /etc/pki/tls/certs/iRedMail.crt
И создаем симлинки на полученные:
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: