Зачем нужен свой почтовый сервер?

Для каждого будет свой ответ на этот вопрос, если он пришел к выводу, что нужен свой почтовый сервер. Могу озвучить несколько причин касающихся меня. Получаем большую конфиденциальность, уже не смогут отслеживать на что подписываюсь, что покупаю. Избавиться от надоевших сервисов на которых зарегистрировался, простым создание алиасов основного почтового ящика. Создание сколько угодно почтовых адресов для своего домена. В последнее время многие бесплатные почтовые сервисы становятся уже не такие бесплатные, это касается владельцев своего домена. Пользуясь бесплатными услугами почты нет гарантии, что информация о вашей деятельности не продается третьим лицам, они же не добрые самаритяне давать бесплатно такие услуги. Современные мессенджеры почти вытеснили почтовую переписку, но этому не бывать 😜 , они так же не дают конфиденциальности, как бы себя не позиционировали. Поставив на телефон приложение типа DeltaChat, взамен популярных мессенджеров, вести переписку при его помощи через свой сервер, получаем почти полную анонимность, если только не заявятся домой и не вскроют сервер. Приобрести опыт по управлению своим почтовым сервисом, поэкспериментировать. Да и доля параноидальности то же присутствует 😆

Требования

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

Железо

Особых мощностей не нужно, необходимо минимум 4 гига оперативки, если меньше, то компенсировать свопом. Про то как прибавить файл подкачки тута. При малом объёме оперативной памяти будет затруднительно для работы антивируса. Дискового пространства хватит 128Гб SSD. В моем случае в качестве сервера старенький ноут 2011 года рождения с 3 гигами оперативки и 128Гб SSD, без экрана, я его отстегнул, что бы сделать из него телевизор.

Подготовка к установке почтового сервера iRedMail

Скачать Debian 12

Вкратце: скачать новую версию Debian с минимальными набором компонентов debian-12.1.0-amd64-netinst.iso или скачать стандартную версию со страницы выбрав версию debian-live-12.1.0-amd64-standard.iso. На момент написания поста свежая версия была Debian 12.1. Если нужна более ранняя версия ее можно взять с этой страницы архива. SOGo поддерживает только 12 версию. Ранее установленные версии почтового сервера до сих пор работают на 10 и 11 версиях дебиан, на 11-ю с бубном поставил (изменив репозиторий SOGo на ночные сборки). SOGo необходим для дальнейшего получения разных плюшек, да и просто выглядит приятнее 😀

После того, как необходимая версия скачана, записать образ на флэшку при помощи программы Rufus или при помощи Etcher доступны версии для разных ОСей.

Установить сервер Debian 12

Краткая инструкция по установке легкой версии netinst

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

Подключить монитор, клавиатуру, по желанию мышку, вставить установочную флэшку. Включить компьютер. Войти в BIOS (многократным нажатием кнопки DEL). Выбрать загрузочным диском установленную флэшку. Меню BIOS Advanced BIOS Features - Hard Disk Boot Priority - нажать Enter - выбрать стрелками флэшку, кнопками PageUp Page Down переместить имя флэшки на первую позицию. Нажать F10. Выскочит надпись SAVE to CMOS and EXIT (Y/N)? подтвердить нажатием Y и Enter. В других вариантах BIOS смотреть мануалы или воспользоваться поиском. Есть еще вариант во время запуска компьютера нажимать функциональную кнопку для выбора диска с которого будет производится загрузка системы, у каждого это может быть по разному. В моем варианте это F12.

  • Загрузившись с установочной флэшки в отобразившемся меню установки выбрать (по умолчанию уже выделено) Graphical install нажать Enter
  • Выбрать язык - Русский нажать Enter
  • Выбрать местонахождения Российская Федерация нажать Enter
  • Настройка клавиатуры Русская нажать Enter
  • Переключение между национальными раскладками клавиатуры, по умолчанию Alt+Shift нажать Enter
  • Если несколько сетевых интерфейсов выбрать тот которому подключен интернет, по умолчанию он будет выделен, нажать Enter (когда интерфейс один будет предложен следующий шаг)
  • Ввести имя компьютера. Сразу назвать вместе с доменным именем. Поскольку это почтовый сервер имя будет mail а домен, который есть. mail.wildserver.ru нажать Enter
  • Ввести пароль суперпользователя два раза нажать TAB еще раз ввести пароль нажать Enter
  • Ввести имя пользователя, например свое имя и фамилию нажать Enter
  • Ввести ник пользователя нажать Enter
  • Ввести пароль пользователя два раза нажать TAB еще раз ввести пароль нажать Enter
  • Настройка времени, выбрать свой часовой пояс нажать Enter
  • Разметка дисков - Авто -использовать весь диск нажать Enter
  • Выбрать диск на который будет произведена установка нажать Enter
  • Разметка дисков - *Все файлы в одном разделе (рекомендуется новичкам) нажать Enter (По поводу разметки тема широкая, поступим проще)
  • Разметка дисков - Закончить разметку и записать изменения на диск нажать Enter. Файл подкачки пускай будет, поскольку памяти на компьютере в обрез, всего 2 Гига.
  • Разметка дисков - Записать изменения на диск поставить флажок напротив Да стрелка вниз нажать Enter
  • Настройка менеджера пакетов - Российская Федерация нажать Enter
  • Настройка менеджера пакетов - Зеркало архива Debian: deb.debian.org нажать Enter
  • Настройка менеджера пакетов - Информация о HTTP-прокси(если прокси нет- не заполняйте) нажать Enter
  • Участвовать в опросе популярности пакетов - по умолчанию Нет нажать Enter
  • Выбор программного обеспечения - Оставить галки только на SSH-сервер и Стандартные утилиты выбор стрелками установка/снятие галок пробел нажать TAB и Enter
  • Установка системного загрузчика GRUB - выбрать Да нажать Enter
  • Устройство для установки системного загрузчика - выбрать диск на котором установлена ОС Debian /dev/sda нажать Enter
  • Установка завершена - вытащить установочную флэшку нажать Enter

Вход на сервер

После перезагрузки в строке: mail login ввести логин (ник) пользователя, который был указан при установке нажать Enter. Потом пароль, который не будет отображаться нажать Enter

Теперь в командной строке ввести команду hostname -I что бы узнать локальный ip-адрес сервера он нужен для удаленного подключения по SSH

Для удобства с другого компьютера подключиться к новому серверу по SSH или дальнейшие действия сделать из командной строки нового сервера.

Будет разложена удаленная установка по ssh.

Подключиться к серверу:

ssh имя_пользователя@ip-адрес сервера

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

Командная строка изменится на:

root@mail:~#

Все дальнейшие действия будут от имени суперпользователя ⚠️. Потом можно будет в целях безопасности установить SUDO

Настройка имени хоста

Проверить имя хоста:

hostnamectl

Если в строке Static hostname: указано mail следующий шаг делать не надо.

Установить имя хоста как - mail

hostnamectl set-hostname mail

Далее по желанию. Изменить в соответствии со стандартами, что бы некоторые графические утилиты выводили значок системы. Спецификация

hostnamectl set-icon-name mail-forward
hostnamectl set-chassis server
hostnamectl set-hostname "Почтовый сервер wildserver.ru" --pretty

Настройка хоста

Нужно прописать в соответствии с доменом по которому будет жить почтовый сервер. Открыть файл

nano /etc/hosts

Если при установке все было сделано правильно, то редактировать ничего не надо, но проверить стоит.

Отредактировать примерно так:

127.0.0.1       localhost
127.0.1.1       mail.wildserver.ru      mail

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Скачать установщик iRedMail

Произнести заклинание:

apt upgrade
apt update -y

Зайти на страницу IredMail Скопировать ссылку на архив и скачать командой:

wget -O iredmail.tar.gz https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.4.tar.gz

https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.4.tar.gz Ссылка на текущий момент.

Распаковать архив:

tar -zxf iredmail.tar.gz

Альтернативный вариант получения установщика iRedMail

Можно скачать архив, скопировать на флэшку и уже потом распаковать на сервере. А еще интереснее клонировать прямо с гитхаба 🧐. Для этого установить git

apt install git -y

Клонировать установщик почтового сервера непосредственно из репозитория:

clone https://github.com/iredmail/iRedMail.git

Установка почтового сервера iRedMail

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

cd iRedMail-*/

Запустить скрипт:

bash iRedMail.sh

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

  1. Согласиться нажать Enter при выделенной Yes нажать Enter
  2. Поступит предложение о месте хранения почты, согласиться по умолчанию Next нажать Enter
  3. Веб сервер Nginx без вариантов (раньше apache2 еще предлагался). Далее жмем Next нажать Enter
  4. Выбрать базу данных PostgreSQL, чтобы в дальнейшем использую скрипты делать изменения без IredMailPro. Выбор производится при помощи пробела и стрелок.

Есть нюанс, если выбрать базу данных MariaDB то будет возможность добавлять алиасы при помощи веб-интерфейса, что довольно наглядно и проще. Но при любом выборе настройки можно будет делать непосредственно редактируя базы данных при помощи Adminer, а это в любом случае придется делать. Так что затрудняюсь сказать на чем остановить свой выбор. Пробовал оба варианта.

Next нажать Enter

  1. Ввести пароль для базы данных. Пароль не должен содержать спецсимволы. Next нажать Enter
  2. Ввести имя домена, на котором будет почтовый сервер wildserver.ru. Next нажать Enter
  3. Ввести пароль для учетной записи администратора postmaster@wildserver.ru. Пароль не должен содержать спецсимволы. (потом можно поменять на более стойкий) Next нажать Enter
  4. Сделать выбор программного обеспечения. Оставить звездочки только на SOGo - для того чтобы работала фильтрация почты, с установленным Roundcubemail работать не будет , iRedAdmin - простенькая админка для создания почтовых ящиков и включения доменов , Fail2ban - будет уже настроен под почтовый сервер, для справки читаем здесь. netdata по желанию, если ресурсы позволяют можно установить этот монитор. Выбор производится при помощи пробела и стрелок. Next нажать Enter
  5. Попросят подтвердить выбранные настройки нажать кнопку Y и Enter
*************************************************************************
***************************** WARNING ***********************************
*************************************************************************
*                                                                       *
* Below file contains sensitive infomation (username/password), please  *
* do remember to *MOVE* it to a safe place after installation.          *
*                                                                       *
*   * /home/wildserver/iRedMail-1.6.4/config
*                                                                       *
*************************************************************************
********************** Review your settings *****************************
*************************************************************************

* Storage base directory:               /var/vmail
* Mailboxes:
* Daily backup of SQL/LDAP databases:
* Store mail accounts in:               PostgreSQL
* Web server:                           Nginx
* First mail domain name:               wildserver.ru
* Mail domain admin:                    postmaster@wildserver.ru
* Additional components:                SOGo iRedAdmin Fail2ban

< Question > Continue? [y|N]

Начнется установка почтового сервера. Можно смело идти пить чай с печенюшками.

В конце будет задан вопрос:

*************************************************************************
* iRedMail-1.6.4 installation and configuration complete.
*************************************************************************

< Question > Would you like to use firewall rules provided by iRedMail?
< Question > File: /etc/nftables.conf, with SSHD ports: 22. [Y|n]

Ответить утвердительно y и Enter

На следующий вопрос так же ответить утвердительно:

< Question > Restart firewall now (with ssh ports: 22)? [y|N]y

Будут произведены настройки файервола и открыты необходимые порты.

Исправление ошибки обновления антивируса ClamAV

Так же будет ошибка обновления антивируса ClamAV, санкции однако:

Fri Sep  1 18:09:29 2023 -> ClamAV update process started at Fri Sep  1 18:09:29 2023
Fri Sep  1 18:09:29 2023 -> This means that you have been rate limited or blocked by the CDN.
Fri Sep  1 18:09:29 2023 ->  1. Verify that you're running a supported ClamAV version.
Fri Sep  1 18:09:29 2023 ->     See https://docs.clamav.net/faq/faq-eol.html for details.
Fri Sep  1 18:09:29 2023 ->  2. Run FreshClam no more than once an hour to check for updates.
Fri Sep  1 18:09:29 2023 ->     FreshClam should check DNS first to see if an update is needed.
Fri Sep  1 18:09:29 2023 ->  3. If you have more than 10 hosts on your network attempting to download,
Fri Sep  1 18:09:29 2023 ->     it is recommended that you set up a private mirror on your network using
Fri Sep  1 18:09:29 2023 ->     cvdupdate (https://pypi.org/project/cvdupdate/) to save bandwidth on the
Fri Sep  1 18:09:29 2023 ->     CDN and your own network.
Fri Sep  1 18:09:29 2023 ->  4. Please do not open a ticket asking for an exemption from the rate limit,
Fri Sep  1 18:09:29 2023 ->     it will not be granted.
********************************************************************

Лечится такая ошибка следующим способом - открыть файл - nano /etc/clamav/freshclam.conf добавить строку:

DatabaseMirror https://pivotal-clamav-mirror.s3.amazonaws.com

Другие строки начинающиеся с DatabaseMirror закомментировать # до лучших времен.

Сохранить файл Ctrl+O, закрыть Ctrl+X.

Далее удалить файл freshclam.dat и перезапустить службу:

rm -f /var/lib/clamav/freshclam.dat
systemctl restart clamav-freshclam

Перезагрузить сервер

shutdown -r now

Безопасность почтового сервера

После перезагрузки файервол уже настроен и необходимые порты открыты. Fail2ban то же настроен. Если сервер напрямую подключен к интернету необходимо настроить ограниченный доступ по SSH

Антивирус ClamAV

Проверить работу демона автоматической закачки баз данных

$ systemctl status clamav-freshclam

● clamav-freshclam.service - ClamAV virus database updater
     Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; preset: enabled)
     Active: active (running)

Работает active (running) - это радует

Проверка работы демона clamav-daemon предоставляющего API для проверки файлов

$ systemctl status clamav-daemon

○ clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: inactive (dead)
TriggeredBy: ○ clamav-daemon.socket
  Condition: start condition failed

⚠️ Если на сервере менее 3Gb памяти RAM то не стоит включать антивирус. Со временем при возросшей нагрузке будет убит какой нибудь процесс и хорошо, если это будет антивирь, а не другой нужный. В таком случае на данном этапе остановить автозагрузчик баз данных.

Не работает, нету баз данных. Исправляем - остановить автозагрузчик баз данных и вручную загрузить базы данных:

$ systemctl stop clamav-freshclam
$ freshclam

Mon Sep  4 08:31:42 2023 -> ClamAV update process started at Mon Sep  4 08:31:42 2023
Mon Sep  4 08:31:42 2023 -> daily.cvd database is up-to-date (version: 27020, sigs: 2040238, f-level: 90, builder: raynman)
Mon Sep  4 08:31:42 2023 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
Mon Sep  4 08:31:42 2023 -> bytecode.cvd database is up-to-date (version: 334, sigs: 91, f-level: 90, builder: anvilleg)

Загрузились. Запускаем оба демона и перезапускаем amavis:

$ systemctl restart clamav-freshclam
$ systemctl restart clamav-daemon
$ systemctl restart amavis

Или одной строчкой:

systemctl restart clamav-freshclam clamav-daemon amavis

Снова проверяем работу антивируса:

$ systemctl status clamav-freshclam

● clamav-freshclam.service - ClamAV virus database updater
     Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled; preset: enabled)
     Active: active (running)

$ systemctl status clamav-daemon

● clamav-daemon.service - Clam AntiVirus userspace daemon
     Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/clamav-daemon.service.d
             └─extend.conf
     Active: active (running)

Все работает - замечтательно 👍

Закрыть доступ к iRedAdmin

Что бы не светить админкой на весь интернет, ограничить доступ по ip-адресу с доступом только из локальной сети, открыть файл nano /etc/nginx/templates/iredadmin.tmpl раскомментировать записи после # Access control

    # Access control
    # Разрешить доступ только с конкретных адресов или пул адресов
    allow 127.0.0.1;
    #allow 192.168.1.10;
    #allow 192.168.1.0/24;
    # Запретить со всех адресов
    deny all;

Прописать пулы IP-адресов назначенные в маршрутизаторе сервером DHCP локальной сети или ограничить конкретным IP-адресом одного компьютера с которого будет разрешен доступ. Нужное раскомментировать или дописать свои адреса. Запись deny all запрещает доступ всем IP. allow разрешает конкретным адресам или пулам написанным в формате CIDR.

Произвести проверку синтаксиса nginx nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустить веб-сервер systemctl restart nginx

Перенаправление с закрытых или не существующих страниц

Теперь при попытке попасть с запрещенного ip в админку почтового сервера будет выскакивать ошибка 403 - доступ запрещен. Так же при запросе к несуществующей странице будет выдаваться стандартный ответ сервера nginx с ошибкой 404. Облагородить такие ответы заменив на свою страницу ошибок:

Добавить запись в файл конфигурации веб-сервера

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

    error_page 404 403 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
        internal;
    }

Содержимое файла будет выглядеть так:

#
# 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;

# Добавлено для вызова в случае ошибок 404 и 403 своей страницы
    error_page 404 403 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
        internal;
    }

    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;
}

Своя страница ошибок

Найти или самому создать свою страницу об ошибке. Создать файл custom_404.html и поместить в него код.

nano /usr/share/nginx/html/custom_404.html

Например можно взять интересные страницы с сайта https://codepen.io/ набрав в поиске по сайту 404, но для просмотра большего количества работ необходимо зарегистрироваться. Выбрать понравившуюся страницу скопировать текст из блоков вот в такой шаблон:

<!DOCTYPE html>
<html>
  <head>

    <script>
    // В этом блоке разместить содержимое JS

    </script>

    <style type=text/css>
    /* В этом блоке разместить содержимое CSS */

    </style>
  
  </head>

  <body>
  <!-- В этом блоке разместить содержимое HTML -->

  </body>
</html>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Проверить синтаксис веб-сервера nginx:

nginx -t

Перезапустить веб-сервер:

systemctl restart nginx

Локальный доступ к сервисам почтового сервера iRedMail

На данном этапе доступ к службам почтового сервера осуществляется локально. Просмотреть первые сообщения, касающиеся настроек сервера можно зайдя по локальному ip-адресу сервера набрав его в браузере. Попадем на страницу SOGo, где нужно ввести в качестве логина postmaster@wildserver.ru и пароль, который был указан при установке iRedMail.

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

Набрав в строке url браузера ip-адрес сервера/iredadmin попадем в простенькую админ панель управления, так же ввести логин - postmaster@wildserver.ru и пароль. Где можно назначить нового администратора почтового сервера, но не всего сервера. Лучше оставить пользователя postmaster для приема служебных писем, а администраторские полномочия передать другому логину, в целях безопасности. Если веб-морда почтового сервера будет открыта, то бруту подвергнется именно postmaster. Хоть и установлен Fail2ban предосторожность лишней не бывает.

Удалить файлы после установки iRedMail

Сохранить в надежном месте файлы conf и iRedMail.tips

Необходимо удалить файлы, которые уже не нужны или могут скомпроментировать сервер. Поступим проще, удалить папку с установщиком.

rm -R iRedMail-*/

Двухфакторная аутентификация

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

Настройка доступа к серверу из интернета

Для того чтобы сервер мог общаться с “внешним” миром необходимо произвести следующие действия:

Проброс портов на маршрутизаторе

Пробросить порты, которые необходимы для работы почтового сервера, на маршрутизаторе или файерволе, если сервер не напрямую подключен к сети интернет. 22 порт не обязательно открывать миру. Для примера проброс портов на роутере TP-link с голубым интерфейсом.

Набрать в браузере адрес веб-морды роутера, ввести пароль, если требуется логин. Выбрать вкладку Дополнительные настройки - NAT-переадресация - Виртуальные серверы - Добавить. В новых прошивках немного поменялось название Дополнительные настройки - NAT-переадресация - Перенаправление порта - Добавить Заполнить поля:

Проброс 80 порта

Тип сервиса HTTP
Внешний порт 80
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 80
Протокол TCP

И так добавить все необходимы порты. Проброс 443 порта

Тип сервиса HTTPS
Внешний порт 443
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 443
Протокол TCP

Проброс 25 порта

Тип сервиса SMTP
Внешний порт 25
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 25
Протокол TCP

Проброс 465 порта

Тип сервиса SMTPS
Внешний порт 465
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 465
Протокол TCP

Проброс 587 порта

Тип сервиса SMTPS
Внешний порт 587
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 587
Протокол TCP

Проброс 143 порта

Тип сервиса IMAP
Внешний порт 143
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 143
Протокол TCP

Проброс 993 порта

Тип сервиса IMAPS
Внешний порт 993
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 993
Протокол TCP

Проброс 110 порта

Тип сервиса POP3
Внешний порт 110
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 110
Протокол TCP

Проброс 995 порта

Тип сервиса POP3S
Внешний порт 995
Внутренний IP-адрес локальный IP-адрес сервера
Внутренний порт 995
Протокол TCP

Настройка DNS записей

У регистратора доменных имен создать необходимые записи:

В подзоне wildserver.ru помимо записи A добавить записи MX 10 mail.wildserver.ru. и TXT v=spf1 mx ~all

Добавить подзоны mail.wildserver.ru с записью A указав ip-адрес сервера в интернете, www.mail.wildserver.ru запись CNAME mail.wildserver.ru

Добавить подзону _dmarc.wildserver.ru с записью TXT

v=DMARC1; p=reject; rua=mailto:postmaster@wildserver.ru; ruf=mailto:postmaster@wildserver.ru; pct=100;

Об этой записи подробнее чуть позже.

В терминале выполнить команду amavisd showkeys

  ("v=DKIM1; p="
  "MIIBfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK"
  "txFUt0ec5+1dWmcDv04H0qZLFK711sibNN5Lutvna3iuH+w3Kr8Ylbw8gq2j0UBok"
  "FcMycUvOBd7nUYn/TUrOuaNns+qKSJBy88IW6Sh2zHzrGbjRYujyWSTjlPELJ0H+5"
  "EV711qseo/omquskkwIDAQAB")

Скопировать все что между скобками ( ) удалить все кавычки " переносы строк, пробелы и поместить результат в созданную подзону dkim._domainkey.wildserver.ru с записью TXT должно получится так:

v=DKIM1; p=
MIIBfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK
txFUt0ec5+1dWmcDv04H0qZLFK711sibNN5Lutvna3iuH+w3Kr8Ylbw8gq2j0UBok
FcMycUvOBd7nUYn/TUrOuaNns+qKSJBy88IW6Sh2zHzrGbjRYujyWSTjlPELJ0H+5
EV711qseo/omquskkwIDAQAB

Пробелов после p= не должно быть. О генерации DKIM чуть позже

Зарегистрировать почтовый домен в Google Postmaster Tools Хоть это не обязательно, но рекомендуется. Зайдя по ссылке, если есть аккаунт гугл, то все еще проще.

  • Нажать на плюсик в открывшемся окошке написать свой почтовый домен mail.wildserver.ru нажать Далее.
  • Скопировать запись TXT,у регистратора доменов добавить в подзону mail.wildserver.ru запись TXT с скопированным текстом, подтверждающим права владения доменом
  • Подождать некоторое время (не более 15 минут, бывает и меньше) нажать Подтвердить В случае успеха будет сообщение Домен mail.wildserver.ru добавлен в список подтвержденных.

Теперь не должно быть проблем с отправкой писем на сервисы гугла.

Обратная запись PTR

Необходимо обратиться к своему интернет провайдеру предоставившему постоянный белый IP-адрес. В моем случае все просто, зайти в личный кабинет Сервисные настройки - Обратные зоны - Добавить обратную зону написать доменное имя почтового сервера mail.wildserver.ru

Получение SSL сертификата Let’s Encrypt

Используя самоподписанный сертификат соединения будут шифрованными, но не будет доверия со стороны других пользователей. Поэтому надо установить доверенный и причем бесплатный сертификат. Как написано в инструкции iRedMail нужно установить Certbotи получить сертификат без ключа nginx, потому что попортит все настройки веб-сервера. Без всяких пояснений, их можно прочесть по ссылкам выше.

apt install snapd

Выйти из системы или перезагрузить сервер.

$ snap install core

Результат:
INFO Waiting for automatic snapd restart...
core 16-2.60.2 from Canonical✓ installed

Протестировать систему установив оснастку:

$ snap install hello-world

Результат:
hello-world 6.4 from Canonical✓ installed

Написать в терминале и получить ответ, если все получилось, значит хорошо ☺️

$ hello-world

Результат:
Hello World!

Установка Certbot

$ snap install --classic certbot

Результат:
certbot 2.6.0 from Certbot Project (certbot-eff✓) installed

Сделать симлинк:

ln -s /snap/bin/certbot /usr/bin/certbot

Пробный запрос на получение сертификата:

certbot certonly --webroot --dry-run -w /var/www/html -d mail.wildserver.ru -d www.mail.wildserver.ru

При первом запуске нужно указать действующий адрес почты:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel):

Согласиться с условиями обслуживания:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Аккаунт зарегистрирован,но не совсем 😆 при первом обращении и еще с ключом пробного запуска --dry-run аккаунт не регистрируется, это произойдет в следующем запросе без ключа. Пробный сертификат получен.

Account registered.
Simulating a certificate request for mail.wildserver.ru and www.mail.wildserver.ru
The dry run was successful.

Если ошибок нет можно запросить действующий сертификат, теперь уже без ключа --dry-run ввести адрес электронной почты на вопросы ответить утвердительно (нам не жалко 🙂)

$ certbot certonly --webroot -w /var/www/html -d mail.wildserver.ru -d www.mail.wildserver.ru

Результат:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): admin@wildserver.ru

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for mail.wildserver.ru and www.mail.wildserver.ru

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mail.wildserver.ru/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mail.wildserver.ru/privkey.pem
This certificate expires on 2023-12-02.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Проверка автоматического обновления сертификатов, для этого выполнить команду:

$ certbot renew --dry-run

Результат:
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/mail.wildserver.ru.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for mail.wildserver.ru and www.mail.wildserver.ru

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
  /etc/letsencrypt/live/mail.wildserver.ru/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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

$ systemctl list-timers

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

Mon 2023-09-04 04:00:00 MSK 3h 15min left -                           -             snap.certbot.renew.timer     snap.certbot.renew.service

Каталоги /etc/letsencrypt/live/ и /etc/letsencrypt/archive принадлежат root-пользователю с разрешением 0700 что бы демоны сетевых служб, таких как Postfix/Dovecot/PostgreSQL получили доступ необходимо установить разрешение 0755.

chmod 0755 /etc/letsencrypt/{live,archive}

Сохранить старые самоподписанные сертификаты и сделать символические ссылки на новые сертификаты от Letsencrypt:

mv /etc/ssl/certs/iRedMail.crt{,.bak}
mv /etc/ssl/private/iRedMail.key{,.bak}
ln -s /etc/letsencrypt/live/mail.wildserver.ru/fullchain.pem /etc/ssl/certs/iRedMail.crt
ln -s /etc/letsencrypt/live/mail.wildserver.ru/privkey.pem /etc/ssl/private/iRedMail.key

Перезапустить службы: Postfix Dovecot Nginx

/etc/init.d/postfix restart
/etc/init.d/dovecot restart
/etc/init.d/nginx restart

Или так:

systemctl restart postfix dovecot nginx

Заходим в браузер, набираем mail.wildserver.ru и наслаждаемся замочком говорящем о защищенном соединении.

Проверка действия сертификата:

$ certbot certificates

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

Отправка тестовых писем

Зайти в админку https://mail.wildserver.ru/iredadmin/

Настройки Выбрать язык, Временную зону.

Создать нового пользователя например `test Добавить - Пользователь Заполнить поля. Записать изменения

Зайти на страницу почтового сервера под логином только что созданного пользователя https://mail.wildserver.ru/

Написать два письма, одно будет отправлено на внутренний почтовый ящик postmaster@wildserver.ru другое, а еще лучше несколько, на разные почтовые сервисы.

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

Онлайн сервисы проверки почтового сервера

Если есть какие то проблемы с отправкой/получением писем, помогут нижеперечисленные сайты, точного ответа как исправить они не дадут, но помогут выбрать направление в котором нужно искать ошибку.

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

https://mxtoolbox.com/ Хороший сайт для онлайн тестирования почтового сервера. Полный и наглядный результат можно получить зайдя на ту страницу введя адрес почтового сервера: https://mxtoolbox.com/emailhealth/

https://dkimvalidator.com/ проверка почтовых сообщений, отправляем письмо на указанный адрес и смотрим, как настроены записи DKIM, SPF, PTR

check-auth@verifier.port25.com - отправив на этот почтовый адрес письмо, в ответе получим как настроены записи DKIM, SPF, PTR

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

Проверка работы спам фильтров

С другого сервиса почты отправить письмо на тестовый почтовый ящик с содержимым в теле письма:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

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


Spam FROM LOCAL [127.0.0.1]:39476 <test@wildserver.ru>
Понедельник, Сентябрь 04, 2023 13:06 EDT
person
Content-filter at mail.wildserver.ru postmaster@mail.wildserver.ru
Кому
root@mail.wildserver.ru
Content type: Spam
Internal reference code for the message is 01035-17/PrRnyIFTryTu

First upstream SMTP client IP address: [127.0.0.1] localhost

Return-Path: <test@wildserver.ru>
From: "TESTER" <test@wildserver.ru>
Message-ID: <3e2-64e60a80-19-51e34450@42417729>
User-Agent: SOGoMail 5.8.4
Subject: Spam
Not quarantined.

The message WILL BE relayed to:
<admin@wildserver.ru>

Spam scanner report:
Spam detection software, running on the system "mail.wildserver.ru",
has identified this incoming email as possible spam.  The original
message has been attached to this so you can view it or label
similar future email.  If you have any questions, see
@@CONTACT_ADDRESS@@ for details.

Content preview:  XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
   XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X 

Content analysis details:   (999.0 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
-1.0 ALL_TRUSTED            Passed through trusted hosts only via SMTP
1000 GTUBE                  BODY: Generic Test for Unsolicited Bulk Email
 0.0 HTML_MESSAGE           BODY: HTML included in message
 0.0 TVD_SPACE_RATIO        No description available.

Проверка антивируса

Также отправить письмо с содержимым:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Будет получен отчет:


VIRUS (Eicar-Signature) in mail FROM LOCAL [127.0.0.1]:59004 <test@wildserver.ru>
Понедельник, Сентябрь 04, 2023 13:27 EDT
person
Content-filter at mail.wildserver.ru postmaster@mail.wildserver.ru
Кому
root@mail.wildserver.ru
A virus was found: Eicar-Signature

Scanner detecting a virus: clamav-socket

Content type: Virus
Internal reference code for the message is 01534-18/DvFYyKiX30xt

First upstream SMTP client IP address: [127.0.0.1] localhost

Return-Path: <test@wildserver.ru>
From: "TESTER" <test@wildserver.ru>
Message-ID: <4e2-64k64380-1d-51f34480@92485995>
Subject: Antivir
The message has been quarantined as: TvjYywiX59xt

The message WAS NOT relayed to:
<admin@wildserver.ru>:
   250 2.7.0 Ok, discarded, id=01034-18 - INFECTED: Eicar-Signature

Virus scanner output:
  p001: Eicar-Signature FOUND

Проверка страницы ошибок

Проверить работу страницы ошибок, набрав в браузере несуществующую страницу, например mail.wildserver.ru/12345 или с устройства с запрещенным ip-адресом, который не должен попадать в разрешенные ранее. Проверить ответ на доступ к закрытой странице mail.wildserver.ru/iredadmin в обоих случаях должна появится страница, которую заранее уже сделали. Если ничего не отображается, сделать код страницы попроще или смотреть настройки веб-сервера

Итог

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