Как самостоятельно создать почтовый сервер

    Команда Simple-Server
    03.06.2026
    14 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Протоколы для приёма и отправки почты

    Сервер исходящей почты использует протокол SMTP — simple mail transfer protocol — дословно переводится как «простой протокол передачи почты». Главная задача протокола — быть ретранслятором между отправителем и получателем. Она заключается в выполнении каждой из двух ключевых функций: проверять конфигурацию и разрешать отправку устройству-отправителю, отправлять сообщение и получать код ответа.

    SMTP-сервер использует 25 и 465 порты для отправки почты с шифрованием и без шифрования соответственно.

    POP3 (Post Office Protocol) — протокол для получения электронной почты. Он позволяет установить соединение с сервером и загрузить письмо на локальное устройство, чтобы отобразить его в почтовом клиенте. При этом на удалённом сервере информация не сохраняется (однако существует опция создания дублей).

    Этот протокол использует 110 и 995 порты (без шифрования и SSL/TLS).

    IMAP (Internet Message Access Protocol) — протокол с теми же задачами и функциями, что и POP3. Ключевое отличие в том, что IMAP позволяет работать с почтой непосредственно на сервере, без дублирования почты на локальное устройство.

    Используются порты 143 и 993 (без шифрования и SSL/TLS).

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

    Чаще всего ответ на этот вопрос: «если настроить свой сервер, можно использовать свой домен в адресе электронной почты». Это верный, однако не совсем точный ответ.

    Настроить почту на своём домене вы сможете и без создания собственного сервера. Такую услугу, например, предоставляют VK Group, Яндекс.Почта и Google. Вам нужно только купить домен и привязать его к серверам компании в личном кабинете.

    Основное преимущество такого подхода — уже настроенный SMTP-сервер. То есть вам не придётся заниматься настройками переадресации, антиспам-фильтрами и прочими сложными настройками. Достаточно лишь грамотно указать NS-записи, а это не так сложно, как создать свой почтовый сервер. Кроме того, стоимость обслуживания и настройки гораздо ниже по сравнению с конфигурацией собственного сервера.

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

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

    Создание почтового сервера

    В этой статье разберём способы создания собственного почтового сервера. Для наших целей отлично подойдут облачные серверы Simple-Server — мы выберем себе устройство с ОС Ubuntu версии 20.04.

    Настроенная нами почта будет поддерживать шифрование, мы обеспечим защиту от спама, а также настроим панель администрирования писем в веб-среде.

    Первый шаг — переход в режим суперпользователя root:

    Перед установкой необходимого программного обеспечения обновим пакеты на сервере:

    apt update && apt upgrade

    Затем необходимо проверить, соответствует ли имя сервера домену вашей электронной почты:

    Если в ответе вы видите что-то отличное от желаемого имени сервера, используйте команду hostnamectl:

    hostnamectl set-hostname mail.hostname.ru,

    где mail.hostname.ru — имя хоста. __

    Далее для корректной работы всех планировщиков и непосредственно почты настраиваем временную зону — устанавливаем пакет для синхронизации времени chrony:

    apt install chrony timedatectl set-timezone Europe/Moscow

    Если ваша временная зона отличается от МСК, выберите подходящую, воспользовавшись командой timedatectl list-timezones.

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

    1. 25, 465 — SMTP
    2. 110, 995 — POP3
    3. 143, 993 — IMAP
    4. 80, 443 — HTTP

    В списке выше первыми идут порты для стандартных соединений, а вторыми — для защищённых. Воспользуемся утилитой iptables:

    iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995,80,443 -j ACCEPT

    Правила iptables сохраняются в течение одного сеанса, то есть после перезагрузки устройства они сбросятся. Чтобы этого избежать, используем пакет iptables-persistent:

    netfilter-persistent save

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

    Установка и настройка Postfix

    Postfix — агент передачи почты (mail transfer agent) с открытым исходным кодом. Он имеет модульную архитектуру, которая не требует работы из-под суперпользователя root. Установим приложение postfix и postfix-mysql для работы с базой данных:

    apt install postfix postfix-mysql

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

    После установки создаём новую учётную запись в системе, из-под этого пользователя будем работать с почтой. С помощью утилиты groupadd создаём группу vmail:

    Далее создадим пользователя vmail и назначим ему домашнюю директорию /home/mail:

    adduser --home /home/mail -gid 1080 -uid 1080 vmail

    … где 1080 — guid группы и uid пользователя. Если он занят, вы можете заменить его на любой другой.

    Проверим, что права на директорию /home/mail принадлежат пользователю vmail и группе vmail:

    Конфигурация почтового сервера

    После создания пользователя можно приступить к настройке postfix. Для этого открываем файл /etc/postfix/main.cf в любом текстовом редакторе:

    nano /etc/postfix/main.cf # Для каких доменов принимаем почту mydestination = localhost.$mydomain, localhost, localhost.localdomain # протокол работы postfix Inet_protocols = ipv4 # путь до публичного сертификата. smtpd_tls_cert_file = /etc/ssl/mail/public.pem # путь до приватного сертификата. smtpd_tls_key_file = /etc/ssl/mail/private.key

    Далее в этот же файл дописываем дополнительные опции, которые необходимы для корректной работы Postfix:

    # где будем хранить почту virtual_mailbox_base = /home/mail # путь к псевдонимам virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf # формат хранения доменов virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf # формат хранения почтовых ящиков virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf # минимальный идентификатор виртуального пользователя virtual_minimum_uid = 1080 # идентификатор основного пользователя, от которого создаются сообщения virtual_uid_maps = static:1080 # идентификатор группы, от пользователей которой создаются сообщения virtual_gid_maps = static:1080 # регистрируем доставщик сообщений virtual_transport = dovecot # разрешаем безопасную аутентификацию smtpd_sasl_auth_enable = yes # не используем шифрование в сетях $mynetworks smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes # тип аутентификации smtpd_sasl_type = dovecot # где лежат временные файлы smtpd_sasl_path = private/auth # шифровать соединение при подключении к другому SMTP-серверу smtp_use_tls = yes # поддерживаем подключение TLS smtpd_use_tls = yes # и используем только TLS smtpd_tls_auth_only = yes # начинаем сессию с HELO (или EHLO) smtpd_helo_required = yes

    Теперь создадим файлы, которые указывали в этой конфигурации. Сперва укажем, где Postfix должен брать псевдонимы. Открываем файл /etc/postfix/mysql_virtual_alias_maps.cf:

    nano /etc/postfix/mysql_virtual_alias_maps.cf

    … и записываем в него следующие строки:

    user = postfix password = postfixPa$w0rd hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

    Здесь dbname, user и password — база данных, имя пользователя и пароль для подключения к MySQL (настроим позже), query — шаблон запроса.

    Делаем аналогичные действия с файлом для получения данных доменов:

    nano /etc/postfix/mysql_virtual_domains_maps.cf user = postfix password = postfixPa$w0rd hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%u'

    Следом — файл с почтовыми ящиками:

    nano /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfix password = postfixPa$w0rd hosts = localhost dbname = postfix query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

    На этом этапе мы можем перейти к настройке файла master.cf:

    nano /etc/postfix/master.cf

    И записываем туда следующие настройки:

    submission   inet  n  -  n  -  -  smtpd -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=/var/spool/postfix/private/auth -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname smtps   inet  n  -  n  -  -  smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject dovecot   unix  -  n  n  -  -  pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

    Генерация сертификатов безопасности

    Для корректной работы почты нужно сгенерировать сертификаты безопасности с помощью утилиты openssl. В первую очередь создаём директорию, в которой будем хранить сертификаты (указывали в файле main.cf):

    mkdir -p /etc/ssl/mail openssl req -new -x509 -days 1000 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mail.devnullhost.ru"

    Запускаем и перезагружаем postfix:

    systemctl enable postfix && systemctl restart postfix

    Установка и настройка Dovecot

    Dovecot — IMAP и POP3 сервер с открытым исходным кодом. Установим его и модули для работы с БД:

    apt install dovecot-imapd dovecot-pop3d dovecot-mysql

    Настраиваем способ хранения сообщений:

    nano /etc/dovecot/conf.d/10-mail.conf

    Записываем в файл каталог для хранения почты. Будем использовать иерархию домен → пользователь:

    mail_location = maildir:/home/mail/%d/%u/

    В этом же файле настраиваем метод аутентификации:

    service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } } service stats { unix_listener stats-reader { user = vmail group = vmail mode = 0660 } unix_listener stats-writer { user = vmail group = vmail mode = 0660 } }

    Настраиваем аутентификацию в Dovecot:

    nano /etc/dovecot/conf.d/10-auth.conf

    Заменяем строку !include auth-system.conf.ext на !include auth-sql.conf.ext, указывая, что использовать нужно sql-авторизацию.

    Редактируем настройки шифрования:

    nano /etc/dovecot/conf.d/10-ssl.conf ssl = required ssl_cert = </etc/ssl/mail/public.pem ssl_key = </etc/ssl/mail/private.key

    При первом подключении пользователей создаём каталоги в домашней директории:

    nano /etc/dovecot/conf.d/15-lda.conf lda_mailbox_autocreate = yes

    Настраиваем подключение к базе данных:

    nano /etc/dovecot/dovecot-sql.conf.ext driver = mysql connect = host=localhost dbname=postfix user=postfix password=postfixPa$w0rd default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u' user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u'

    Настраиваем интерфейс Dovecot:

    nano /etc/dovecot/dovecot.conf

    Запускаем и перезагружаем Dovecot:

    systemctl enable dovecot && systemctl restart dovecot

    Установка и настройка PostfixAdmin

    Для корректной работы PostfixAdmin нужен настроенный веб-сервер, PHP и база данных MySQL (стеки LAMP или LEMP). В этом руководстве пропустим конфигурацию веб-сервера и приступим непосредственно к установке PostfixAdmin.

    Устанавливаем необходимые расширения php:

    apt install php-mysql php-mbstring php-imap

    Скачиваем PostfixAdmin в корневой каталог веб-сервера с помощью утилиты wget:

    wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz

    Создаём каталог postfixadmin и помещаем туда содержимое архива:

    mkdir -p /var/www/html/postfixadmin && tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1

    И создаём каталог для хранения кэша шаблонов:

    mkdir /var/www/html/postfixadmin/templates_c

    Ставим на весь каталог права веб-сервера:

    chown -R www-data:www-data /var/www/html/postfixadmin

    Создаём базу данных и пользователя:

    Если у вас MySQL версии ниже 8.0.11:

    CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfixPa$w0rd'; exit;

    Если у вас MySQL 8.0.11 и выше:

    CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixPa$w0rd'; GRANT ALL ON postfix.* TO 'postfix'@'localhost';

    В локальном файле конфигурации postfix добавим конфигурацию базы данных:

    nano /var/www/html/postfixadmin/config.local.php <?php $CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_password'] = 'postfixPa$w0rd'; $CONF['emailcheck_resolve_domain']='NO'; >

    Заходим на страницу установщика postfixadmin в браузере — /postfixadmin/public/setup.php. Здесь нам будет предложено сгенерировать хэш для авторизации.

    Вводим пароль и нажимаем на кнопку. Под формой увидим сообщение, в котором содержится хэш, его мы должны вставить в файл /var/www/html/postfixadmin/config.local.php:

    nano /var/www/html/postfixadmin/config.local.php

    Обновляем страницу /postfixadmin/public/setup.php и входим на страницу с паролем, который вводили для генерации хэша. Если сервер настроен верно, в результате мы увидим страницу с проверками конфигурации.

    В самом низу расположена форма, в ней создаём админа. После успешного создания переходим на страницу /postfixadmin/public/login.php и авторизуемся в аккаунт, который только что создали.

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

    Создаём почтовый ящик в PostfixAdmin

    В браузере переходим по адресу /postfixadmin/public/. В верхнем меню выбираем «Список доменов → Новый домен».

    Далее в разделе «Обзор → создать ящик» вводим данные для тестового почтового ящика.

    Теперь вы можете проверить подключение с помощью почтовых клиентов. Параметры для подключения:

    1. Сервер — имя вашего сервера
    2. IMAP — 143 STARTTLS
    3. POP3 — 110 STARTTLS
    4. SMTP — 25 STARTTLS
    5. Логин и пароль — данные, которые вы указали при создании ящика

    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны