# Запуск почтового сервера. Часть 1. Подготовка бэкэнда
Почтовый сервер – это классический сервис, не теряющий своей актуальности. Он предоставляет администратору максимально возможную гибкость в управлении и настройках, а также полноценный доступ ко всем почтовым ящикам.
В этой серии статей мы расскажем, как установить, настроить и запустить в эксплуатацию собственный почтовый сервер. Мы пройдём весь путь от самого начала, когда у нас есть только доменное имя и подготовленный к работе сервер, до настройки почтового агента и отправки и получения писем.
Порядок наших действий будет следующим:
- Подготовка бэкэнда почтового сервера (настройка DNS-записей, подготовка веб-сервера, установка MySQL, устанвока веб-интерфейса postfixadmin);
- Развёртывание почтового сервера (установка и настройка postfix и dovecot);
- Проверка работы почтового сервера (установка и настройка почтового агента);
- Защита почтового сервера с помощью 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:
После запуска веб-сервера установим дополнительные приложения, необходимые для работы нашего сервера:
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 запускается:
# 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
.
Мы должны увидеть окно начала установки веб-интерфейса:
Сразу после запуска setup.php, если никаких проблем с настройками не возникло, начнётся создание структуры базы данных. Postfixadmin подключится к MariaDB и создаст все указанные таблицы. После этого нужно будет зарегистрироваться в Postfixadmin.
После указания пароля для Superadministrator’a программа скажет нам, что наш пароль не совпадает с указанным в конфигурационном файле. Мы говорили об этой ситуации выше. Postfixadmin предложит нам новый хэш для указанного пароля. Копируем его и вставляем в конфигурационный файл /var/www/html/postadmin/config.local.php
в строку $CONF['setup_password'] =
.
Теперь можно заходить в веб-интерфейс Postfixadmin:
# Начало работы с Postfixadmin
После запуска Postfixadmi добавим домен, для которого настраиваем почту. Это можно сделать в разделе Список доменов — Новый домен.
Здесь мы указываем имя нашего домена и задаём количество доступных алиасов для него и, если нужно, ограничение на количество создаваемых почтовых ящиков.
После добавления домена в разделе меню Обзор — Создать ящик создаём первый почтовый ящик.
Здесь выбираем домен (он у нас сейчас один), имя ящика, пароль для него и дисковую квоту.
После создания, если мы оставили галочку Отправить приветственное письмо
, мы увидим ошибку, что письмо не отправлено. Всё правильно, ведь мы ещё не настроили сервис для отправки писем. При этом ящик уже создан, в базе данных появилась запись для него — можно зайти в phpMyAdmin и проверить её наличие в базе.
Мы завершили первый этап создания почтового сервера — подготовили бэкэнд нашего почтового сервера. Далее можно переходить ко второй части нашей инструкции — установке и настройке Postfix и Dovecot — сервисов, отвечающих непосредственно за отправку и получение почты.