Почтовый сервер Postfix на CentOS 7 с виртуальными доменами, системой управления, веб-доступом и многим другим

В данной инструкции выполнена настройка полноценного почтового сервера. Список всех особенностей и возможностей:

Почтовая система на базе Postfix;
Поддержка виртуальных доменов;
Хранение почты на сервере;
Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
Поддержка шифрования;
Хранение части настроек в MariaDB;
Защита от СПАМа и вирусов;
Доступ к почте с помощью веб-интерфейса (Roundcube);
Возможность управление почтовыми ящиками с помощью PostfixAdmin.

1. Преднастройка системы
Напоминаю, данная инструкция написана под систему Linux CentOS версии 7.

Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа.

* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано relay.guwi.ru.
После вводим такую команду:

Устанавливаем служебные пакеты (они понадобятся в процессе настройки сервера):

* ntpdate для возможности синхронизировать время на сервере; wget — клиент для загрузки файлов.
Задаем временную зону (в данном примере московское время):

Синхронизируем время:

Обновляем систему:

Заранее открываем порты на брандмауэре:

* где мы откроем следующие порты:
25 — стандартный SMTP через STARTTLS;
80 — HTTP для порталов Postfixadmin и Roundcube;
110 — стандартный POP3 через STARTTLS;
143 — стандартный IMAP через STARTTLS;
443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;
465 — защищенный SMTP через SSL/TLS;
587 — защищенный SMTP через STARTTLS;
993 — защищенный IMAP через SSL/TLS;
995 — защищенный POP3 через SSL/TLS.

2. Настройка веб-сервера: NGINX + PHP + MariaDB
Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.

Установка NGINX
Добавляем репозиторий с нужным пакетом:

Устанавливаем nginx:

Разрешаем автозапуск сервиса и запускаем его:

Проверяем работоспособность веб-сервера, обратившись к нему в браузере по IP-адресу. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.

PHP + PHP-FPM + NGINX
Устанавливаем php и php-fpm:

Настраиваем NGINX:

* где /usr/share/nginx/html — каталог для размещения портала управления Postfix.

Настраиваем PHP-FPM:

* здесь мы поменяли строку 127.0.0.1:9000.

Запускаем сервисы:

* если в процессе перезапуска nginx выскочит ошибка nginx: [emerg] a duplicate default server, необходимо найти настройку виртуального домена, в которой также указана опция default_server — опцию нужно убрать. Или можно самостоятельно настроить другой виртуальный домен.

Для проверки, создаем индексный файл в директории сайта со следующим содержимым:

Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php.

MariaDB
Устанавливаем сервер баз данных следующей командой:

Включаем автозапуск сервиса и запускаем его:

Задаем пароль для пользователя sql root:

3. Установка и настройка PostfixAdmin
Устанавливаем дополнительные компоненты для PHP:

Для применения установленных пакетов, перезапускаем обработчик скриптов:

Скачиваем PostfixAdmin:

В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:

Задаем права на каталог:

* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя apache.

Создаем базу данных postfix и учетную запись в mariadb:

* где postfix — имя базы.

* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.

Выходим из командной оболочки MariaDB:

Открываем конфигурационный файл postfixadmin:

И редактируем следующее:

Запускаем браузер и вводим адрес http://IP-адрес сервера/postfixadmin/setup.php
Начнется процесс проверки конфигурации и установки портала PostfixAdmin. После ее окончания вводим дважды пароль и генерируем хэш:

Вводим дважды пароль после установки PostfixAdmin
После перезагрузки страницы копируем хэш:

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

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

И меняем ее на:

* где ‘7a8e14…c26’ — скопированный хэш.

После, на той же странице, где показан хэш, добавляем суперпользователя PostfixAdmin:
* где Setup password — пароль, который мы ввели на предыдущей странице; Пароль — новый пароль для создаваемой учетной записи.

Переходим в браузере на страницу http:///postfixadmin/

Вводим логин и пароль для созданного пользователя.

Готово.

4. Настройка Postfix
По умолчанию, Postfix уже установлен в CentOS 7. Но если встретится сервер без него, выполним установку простой командой:

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

* сначала мы создаем группу vmail и guid 1024, после — пользователя vmail с uid 1024 и домашней директорией /home/mail. Обратите внимание, что в некоторых системах идентификатор группы и пользователя 1024 может быть занят. В таком случае необходимо создать другой, а в данной инструкции ниже заменить все 1024 на альтернативный.

Теперь открываем на редактирование конфигурационный файл почтового сервера:

И редактируем следующие строки:

* данная настройка указывает, какой домен подставлять отправителю, если он не указан в заголовке FROM.

* указываем, для каких доменов принимаем входящую почту.

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

* разрешаем отправлять сообщения локальному серверу.

* указываем, откуда брать список алиасов.

* необходимо убедиться, что postfix будет слушать на всех необходимых интерфейсах, в данном случае, на всех.

Теперь в конец конфигурационного файла допишем следующее:

* где:
virtual_mailbox_base — базовый путь хранения почтовых ящиков в системе UNIX.
virtual_alias_maps — формат и путь хранения алиасов для виртуальных пользователей.
virtual_mailbox_domains — формат и путь хранения доменов виртуальных пользователей.
virtual_mailbox_maps — формат и путь хранения почтовых ящиков для виртуальных пользователей.
virtual_minimum_uid — с какого номера присваивать и