Почтовый сервер, как следует из названия, — это устройство, которое отвечает за корректную доставку электронных писем от отправителя получателю. Так, например, когда вы отправляете почту через Gmail, вероятнее всего вы используете почтовый сервер Google.
Почтовый клиент — это программа, которая используется непосредственно для работы с почтой: чтения, отправки и хранения. Примеры таких клиентов — Microsoft Outlook, Thunderbird и так далее.
Сервер исходящей почты использует протокол 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-записи, а это не так сложно, как создать свой почтовый сервер. Кроме того, стоимость обслуживания и настройки гораздо ниже по сравнению с конфигурацией собственного сервера.
Однако при использовании сторонних сервисов вы не будете иметь полный контроль над работой почты. Во-первых, количество отправляемых писем будет ограничено. У каждой компании установлены свои лимиты, но вам не хватит квоты, если вы работаете с большими объёмами электронной почты: корпоративная почта, рассылки и так далее.
При использовании собственного почтового сервера вам придётся не только следить за лимитами и квотами, но также обеспечивать резервное копирование, избегать попадания в спам-листы, а также настраивать права доступа, если почтой пользуются несколько человек.
В этой статье мы рассмотрим способы создания собственного почтового сервера. Для наших целей отлично подойдут облачные серверы Timeweb — мы выберем себе устройство с ОС Ubuntu версии 20.04.
cloud
Настроенная нами почта будет поддерживать шифрование, мы обеспечим защиту от спама, а также настроим панель администрирования писем в веб-среде.
Первый шаг — переход в режим суперпользователя root:
sudo su
Перед установкой необходимого программного обеспечения обновим пакеты на сервере:
apt update && apt upgrade
Затем необходимо проверить, соответствует ли имя сервера домену вашей электронной почты:
hostname
Если в ответе вы видите что-то отличное от желаемого имени сервера, используйте команду hostnamectl
:
hostnamectl set-hostname mail.hostname.ru,
где mail.hostname.ru
— имя хоста.
Далее для корректной работы всех планировщиков и непосредственно почты настраиваем временную зону — устанавливаем пакет для синхронизации времени chrony
:
apt install chrony
timedatectl set-timezone Europe/Moscow
Если ваша временная зона отличается от МСК, выберите подходящую, воспользовавшись командой timedatectl list-timezones
.
Запускаем chrony
:
systemctl enable chrony
Теперь нужно открыть порты, необходимые для работы почтового сервера, с помощью утилиты iptables. Нам нужен следующий набор портов:
В списке выше первыми идут порты для стандартных соединений, а вторыми — для защищённых. Воспользуемся утилитой 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 — агент передачи почты (mail transfer agent) с открытым исходным кодом. Он имеет модульную архитектуру, которая не требует работы из-под суперпользователя root. Установим приложение postfix
и postfix-mysql
для работы с базой данных:
apt install postfix postfix-mysql
В диалоговом окне в процессе установки выбираем Internet Site. Это предполагает, что у вас есть доступ к редактированию DNS-записей и вы можете указать FQDN — полное имя домена. В следующем окне оставляем имя сервера и переходим далее.
После установки создаём новую учётную запись в системе, из-под этого пользователя будем работать с почтой. С помощью утилиты groupadd
создаём группу vmail
:
addgroup -gid 1080 vmail
Далее создадим пользователя vmail
и назначим ему домашнюю директорию /home/mail
:
adduser --home /home/mail -gid 1080 -uid 1080 vmail
… где 1080 — guid группы и uid пользователя. Если он занят, вы можете заменить его на любой другой.
Проверим, что права на директорию /home/mail
принадлежат пользователю vmail
и группе vmail
:
ll /home
После создания пользователя можно приступить к настройке 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 — 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
Указываем:
listen = *
Запускаем и перезагружаем Dovecot:
systemctl enable dovecot && systemctl restart dovecot
Для корректной работы 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 -u root
> CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfixPa$$w0rd';
> exit;
В локальном файле конфигурации 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/public/
. В верхнем меню выбираем «Список доменов → Новый домен».
Далее в разделе «Обзор → создать ящик» вводим данные для тестового почтового ящика.
Теперь вы можете проверить подключение с помощью почтовых клиентов. Параметры для подключения:
Выгодные тарифы на облачные серверы
В этой статье мы изучили, что представляет из себя домашний почтовый сервер, какие технологии и программное обеспечение используются для его настройки.
Основное преимущество владения своим почтовым сервером — возможность полностью настроить его под себя: создать неограниченное количество почтовых ящиков, привязать псевдонимы, включать и выключать пользователей. Все эти возможности можно реализовать, арендовав облачное решение Timeweb Cloud и настроив сервер по инструкции из этой статьи.
В следующих статьях расскажем о том, как бороться с вирусами в письмах, как настроить собственный веб-клиент для работы с почтой и о том, как избежать попадания в спам-листы.
И зараза при попытке отправки формы в разделе "отправить письмо" сразу зависает.
Здравствуйте! Спасибо за ваши комментарии, мы внесли правки в статью.
В ближайшее время мы переработаем и актуализируем эту инструкцию, чтобы все точно работало как часы 🙌
Может будет полезно. У меня тоже зависала отправка. это из-за комментарием после параметра в /etc/postfix/main.cf
Пример: Inet_protocols = ipv4 # протокол работы postfix Нужно сделать: Inet_protocols = ipv4 если убрать все такие комментарии после параметра, то работает
Такие комменатрии вызывали у меня варнинги: /usr/sbin/postconf: warning: /etc/postfix/main.cf: #comment after other text is not allowed: # ???????????????? ???... и отправка не работала
Ой. Перевод строк побились
Добрый день!
Спасибо за замечание! Форматирование поправили.
<?php $CONF['configured'] = true; $CONF['default_language'] = 'ru'; $CONF['database_password'] = 'postfixPa$$w0rd'; $CONF['emailcheck_resolve_domain']='NO';
не закрыт тег ?>
nano mysql_virtual_alias_maps.cf
пропущено /etc/postfix/
Какая конфигурация сервера потребуется для почтового сервера на 30-40 почтовых адресов на 1 домен?
Используемое в инструкции ПО (postfix, dovecot) достаточно легковесное, и для запуска будет достаточно минимального тарифа (CPU 1 x 3.3 ГГц, 1 Гб RAM, 15 Гб NVMe). Дальше все будет зависеть от объема почты, хранимой на сервере — при необходимости всегда можно будет перейти на тариф с большим объемом диска.