# Запуск почтового сервера. Часть 1. Подготовка бэкэнда

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

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

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

  1. Подготовка бэкэнда почтового сервера (настройка DNS-записей, подготовка веб-сервера, установка MySQL, устанвока веб-интерфейса postfixadmin);
  2. Развёртывание почтового сервера (установка и настройка postfix и dovecot);
  3. Проверка работы почтового сервера (установка и настройка почтового агента);
  4. Защита почтового сервера с помощью Fail2ban.

Начнём с первого этапа — настройки бэкэнда нашего сервера. Для начала работы нам понадобится только подготовленный к работе сервер и доменное имя. Мы будем устанавливать почтовый сервер на VPS на CentOS 8, но общая последовательность действий сохранится для любой другой операционной системы.

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

Сначала подготовим доменное имя для отправки и получения почты. За работу почты отвечают DNS-записи А и МХ.

А-запись домена указывает на IP-адрес, к которому привязан домен. В нашем случае это адрес сервера, на котором будет расположен почтовый сервис.

МХ-запись домена указывает на почтовый сервер, который будет использован для отправки почты по SMTP-протоколу. Здесь же указывают и порядковый номер предпочтения этого сервера, если основной почтовый сервер используется для отправки почты с нескольких серверов. Общий вид MX-записи такой: n mail.your_domain.com, где n — порядковый номер сервера.

Как правило, указать DNS-записи домена можно при помощи интерфейса, предоставленного вашей хостинговой компанией.

Для доменов, обслуживаемых Джино, это можно сделать в разделе Домены — Управление — Настройки — DNS.

В открывшемся окне можно увидеть все DNS-записи для выбранного домена. В большинстве случаев в нужных нам полях для A- и MX- записей уже указаны правильные значения, но лучше проверить их ещё раз. Если они отличаются от нужных — например, если домен недавно перенесли от другого регистратора или с другого сервера — изменить эти записи можно вручную.

После указания нужных параметров проверим, что они правильно указаны не только в веб-интерфейсе, но и правильно считываются DNS-серверами. Для этого установим на наш сервер пакет bind-utils:

sudo dnf install bind-utils

Это набор утилит, работающих с DNS-записями и позволяющих получить сведения о них. После установки запустим команду:

sudo dig your_domain.com

# Output
;your_domain.com.             IN      MX
your_domain.com.      10800   IN      MX      5 mail.your_domain.com.

В результате мы увидим в консоли имя нашего почтового сервера. Затем проверим IP-адрес нашего почтового сервера:

sudo dig mail.your_domain.com | grep IN

# Output

;mail.your_domain.com.           IN      A
mail.your_domain.com. 10800      IN      A       12.34.56.78

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

# Установка необходимых приложений

# Apache

После настройки доменного имени переходим к работе непосредственно с сервером. Начнём с установки веб-сервера. Будем использовать Apache из-за простоты его настройки:

sudo dnf install httpd

После установки активируем Apache и добавим его в автозагрузку:

sudo systemctl start httpd
sudo dnf enable httpd

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

sudo systemctl stop firewalld

Теперь, если мы зайдём в браузере по нашему IP-адресу, то увидим стартовую страницу Apache:

«apache»

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

sudo dnf install php mariadb mariadb-server php-imap php-mysqlnd php-mbstring

Это PHP, СУБД MariaDB и несколько дополнительных пакетов, обеспечивающих их взаимную работу, плюс функционирование протокола imap.

# phpMyAdmin

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

wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

После этого распакуем его и переместим распакованные файлы в директорию Apache, чтобы можно было обращаться к phpMyAdmin через браузер с адреса нашего почтового сервера:

tar xzvf phpMyAdmin-5.1.3-all-languages.tar.gz
sudo mkdir /var/www/html/phpma
sudo cp -R phpMyAdmin-5.1.3-all-languages/* /var/www/html/phpma/

Чтобы Apache мог обращаться к phpMyAdmin, передадим права на папку с ним пользователю Apache:

sudo chown -R apache. /var/www/html/phpma/

После этого можно зайти в браузере по адресу your_server_ip/phpma и убедиться, что phpMyAdmin запускается:

«phpma»

# MariaDB

Мы убедились, что phpMyAdmin установлен и запущен, теперь перейдём к предварительной настройке СУБД. Запустим MariaDB, добавим её в автозагрузку и запустим скрипт, отвечающий за настройки безопасности:

sudo systemctl start maria-db

sudo systemctl enable maria-db

~/bin/mysql_secure_installation

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

В phpMyAdmin создадим нового пользователя и базу данных postfix. Эти пользователь и база будут основными для работы нашего почтового сервера. В ходе создания не забудьте проверить тип кодировки. Он должен быть utf8_general_ci.

После создания новой базы данных установим и настроим веб-интерфейс для управления почтовым сервером.

# Установка и настройка веб-интерфейса

# Установка Postfixadmin

Для управления работой почтового сервера установим веб-интерфейс PostfixAdmin. В данном случае последовательность действий будет такой же, как для установки phpMyAdmin. Скачаем к себе на сервер архив с PostfixAdmin, распакуем его, переместим в папку с виртуальными хостами Apache и передадим веб-серверу права на управление папкой:

wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.4.tar.gz

tar xzvf postfixadmin-3.2.4.tar.gz

sudo mkdir /var/www/html/postadmin

sudo cp -R /root/postfixadmin-3.2.4/* /var/www/html/postadmin

sudo chown -R apache. /var/www/html/postadmin

После этого можно переходить к настройке Postfixadmin. Перед началом настройки создадим резервную копию основного конфигурационного файла:

sudo cp /var/www/html/postadmin/config.inc.php /var/www/html/postadmin/config.local.php

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

sudo vi /var/www/html/postadmin/config.local.php

В открывшемся текстовом файле кроме строк с пояснением к каждой переменной нам нужно найти сами переменные и установить для них следующие значения:

$CONF['configured'] = true;
$CONF['setup_password'] = 'bff0983368335032599fddsfjtretuiu8776yhj657de020a90ba837';
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'root@your_domain.com';
$CONF['encrypt'] = 'md5crypt';
$CONF['default_aliases'] = array (
 'abuse' => 'root',
 'hostmaster' => 'root',
 'postmaster' => 'root',
 'webmaster' => 'root'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
$CONF['transport_default'] = 'virtual';
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to http://your_ip/postadmin/public/';
$CONF['footer_link'] = 'http://your_ip/postadmin/public/';

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

Здесь следует обратить внимание на несколько строк:

  • $CONF['setup_password'] =, в которой указан длинный ряд цифр. Это строка, содержащая хэш вашего пароля от учётной записи superadmin PostfixAdmin. На данном этапе у вас нет пароля, а значит, и его хэша. Здесь указана случайная последовательность цифр, которая сейчас не играет никакой роли — при первом входе и задании нового пароля мы перепишем эту строку.
  • $CONF['encrypt'] содержит указание на тип шифрования паролей. Если вы не планируете шифровать пароли (что небезопасно), то укажите здесь значение cleartext.

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

После внесения всех изменений сохраняем и закрываем конфигурационный файл.

Перед началом работы с Postfixadmin создадим необходимую для его работы папку и передадим веб-серверу права на неё:

sudo mkdir /var/www/html/postadmin/templates_c

sudo chown -R apache. /var/www/html/postadmin/templates_c

Теперь веб-интерфейс готов к началу работы. Откроем его страницу в бразуере — зайдём по адресу your_server_ip/postadmin/public/setup.php.

Мы должны увидеть окно начала установки веб-интерфейса:

«pfadm»

Сразу после запуска setup.php, если никаких проблем с настройками не возникло, начнётся создание структуры базы данных. Postfixadmin подключится к MariaDB и создаст все указанные таблицы. После этого нужно будет зарегистрироваться в Postfixadmin.

После указания пароля для Superadministrator’a программа скажет нам, что наш пароль не совпадает с указанным в конфигурационном файле. Мы говорили об этой ситуации выше. Postfixadmin предложит нам новый хэш для указанного пароля. Копируем его и вставляем в конфигурационный файл /var/www/html/postadmin/config.local.php в строку $CONF['setup_password'] =.

Теперь можно заходить в веб-интерфейс Postfixadmin:

«padmms»

# Начало работы с Postfixadmin

После запуска Postfixadmi добавим домен, для которого настраиваем почту. Это можно сделать в разделе Список доменов — Новый домен.

«padddom»

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

После добавления домена в разделе меню Обзор — Создать ящик создаём первый почтовый ящик.

«paddmb»

Здесь выбираем домен (он у нас сейчас один), имя ящика, пароль для него и дисковую квоту.

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

Мы завершили первый этап создания почтового сервера — подготовили бэкэнд нашего почтового сервера. Далее можно переходить ко второй части нашей инструкции — установке и настройке Postfix и Dovecot — сервисов, отвечающих непосредственно за отправку и получение почты.