Postfix чаще всего используется в качестве почтового сервера сайтов. Он готов к работе сразу после установки, но по умолчанию в нем нет системы авторизации. Это значит, что любой человек может использовать этот
почтовый сервер для отправки и приема писем. Чтобы исключить такую ситуацию, используется связка
Postfix – Dovecot.
Dovecot — плагин, который позволяет настроить авторизацию
Устанавливаем и настраиваем postfix
Устанавливаем и настраиваем dovecot
Создаём почтовый ящик
В прошлой статье
мы рассказали о том, как подготовить базу для нашего почтового сервера, теперь настало время установить и настроить сам почтовик.
На этом этапе мы рассмотрим настройку почтового сервера с виртуальными пользователями и хранением паролей от почтовых ящиков в файле. Этот метод несложен и не требует много действий в консоли, но если вы планируете заводить больше 10–15 почтовых ящиков, управлять ими будет не очень удобно — для этого лучше подойдёт второй вариант настройки с хранением паролей в базе данных
.
Текущая версия страницы пока не проверялась
опытными участниками и может значительно отличаться от версии
, проверенной 15 марта 2016 года; проверки требуют 9 правок
.
Postfix
— агент передачи почты (MTA — mail transfer agent
). Postfix является свободным программным обеспечением
, создавался как альтернатива Sendmail
.
Изначально Postfix
был разработан Вейтсом Венемой в то время, когда он работал в Исследовательском центре имени Томаса Уотсона компании IBM
. Первые версии программы стали доступны в середине 1999 года
.
Postfix
имеет модульную архитектуру, которая позволяет создать быструю почтовую систему. Так, например, привилегии root
требуются только для открытия порта ( TCP
25 порт
), а демоны, которые выполняют основную работу, могут работать непривилегированным пользователем в изолированном ( chroot
) окружении, что позитивно сказывается на безопасности.
Архитектура Postfix
выполнена в стиле UNIX
— где простые программы выполняют минимальный набор функций. Во время простоя почтовой системы ненужные демоны могут прекращать свою работу, высвобождая тем самым память, а при необходимости снова запускаются master- демоном
.
Имеет более простую и понятную конфигурацию по сравнению с Sendmail
и меньшую ресурсоёмкость (во время простоя почтовой системы).
Совместим с AIX
, BSD
, HP-UX
, IRIX
, GNU/Linux, Mac OS X, Solaris
, Tru64 UNIX
, фактически может быть собран на любой Unix-подобной операционной системе, поддерживающей POSIX
и имеющей компилятор
C. Является службой пересылки почты по умолчанию в ОС NetBSD
.
Этот почтовый агент выполняет те же функции, что и Sendmail, но более устойчив, гибок и безопасен. Он появился в 1999 году. Разработчики постоянно совершенствуют свой продукт. В версию
Postfix
3
встроена поддержка отправки почты как через устаревшую службу SMTPS, так и через протокол SMTP, а также поддерживается расширение для создания зашифрованных соединений STARTTLS.
Вместо Sendmail —
Postfix Mac Os,
начиная с версии 10.3. Этот почтовик также входит в состав инсталляционного пакета Linux. Поговорим о том, как установить и настроить Постфикс, об основных особенностях его работы и архитектуре.
<img src="https://content.timeweb.com/assets/39dd3dd7-4260-4dad-be29-0a2a0bbe85e2?width=3180&height=1060" alt="Особенности Работы Postfix
«>
Чтобы инсталлировать приложение, наберите:
apt-get install postfix
Запустится конфигурирование. Вам начнут задавать вопросы. Среди профилей, которые вам предложат, выберите Internet Site — тогда программа сконфигурирует конфиг main.cf и сразу же запустится. Иначе вам придется конфигурировать самостоятельно.
Справка.
Main.cf может содержать свыше 330 строк.
- Архитектура
- Концепция подсистем
- Некоторые утилиты
- Как письма попадают в почтовую систему
- Как происходит доставка
- Итоги
- Устанавливаем и настраиваем postfix
- Полезные команды
- Работа с очередью
- Настройка отправки почты
- Тестирование почты и настройка брандмауэра
- Алиасы и преобразования адресов
- Добавление пользователей
- Postfix logs
- Настройка Postfix для работы с Dovecot
- Установите Dovecot вместе с плагином для работы с MySQL:
- Устанавливаем и настраиваем dovecot
- Особенности работы
- Создаём почтовый ящик
- Виртуальные почтовые ящики
- Подготовка к установке
- Создание отдельного пользователя
- Настройка MySQL
- Настройка PostfixAdmin
- Меняем темы писем с Postfix Pcre
После инсталляции программные настройки запишутся в подкаталог /etc/postfix. Здесь же будет храниться main.cf — главный конфигурационный файл.
Решим, как будет использоваться клиент
mail Postfix : чтобы пересылать корреспонденцию на иной хост или хранить одну часть локально, а другую — пересылать.
Обычная локальная доставка, которая базируется на авторизации и учитывает юзеров вашей системы, не отличается гибкостью. Но мы ее рассмотрим, так как с этими командами взаимодействуют другие.
Зайдите в подкаталог etc/postfix и раскройте файл конфигурации main.cf. Вы увидите строки такого вида:
имя_параметра = значение
Их можно закомментировать, прописав в начале #
.
Если параметру может быть присвоено больше одного значения, это записывается одним из способов:
имя_параметра = знач1 знач2 знач3
имя_параметра = знач1, значение2, значение3
имя_параметра =
знач1
знач2
знач3
имя_параметра =
знач1,
знач2,
знач3
Если значения перечисляются в столбик, как в двух последних способах, то в начале записи должен быть пробел.
После присваивания значения можно указать перед его именем $
и использовать его величину в других выражениях. Для этого укажите $имя_параметра
там, где требуется «вытащить» значение.
Это может быть выглядеть так:
mydomen = example.net
mydestination=mail.$mydomen
Но, как правило, явные значения предпочтительней. Так как параметров используется меньше, их проще менять и вероятность ошибки ниже.
Архитектура
Соответствует стилю UNIX:
- количество функций минимально;
- выполнение — быстрое и надежное.
Концепция подсистем
В Sendmail работает одно большое приложение, а в Постфикс — компактные программы, функционирующие совокупно. Они связаны алгоритмами FIFO и сокетами Unix. Каналы обмена размещены в защищенном каталоге. К функциям программ относятся отправление/прием сетевых сообщений и локальная доставка корреспонденции.
Разбиение на подсистемы хорошо тем, что неиспользуемые модули отключаются. Все демоны завершаются не сами по себе, такую команду дает master. Когда почтовый сервер простаивает, демоны, которые в данный момент не нужны, прекращают работу и не занимают память. Если они понадобятся, master-демон может запустить их снова.
Запускает и контролирует процессы утилита master. В ее конфигурационном файле master.cf записаны сведения о вспомогательных программах и очередности их запуска. Процесс master активизируется, когда система стартует, и «живет», пока она работает. Он запускает остальные модули по требованию и перезапускает те, что из-за проблем были завершены аварийно.
Некоторые утилиты
В приложение входит набор утилит, которые работают через командную строку. Эти утилиты заточены на решение административных задач. С их помощью вы сможете обращаться к картам, просматривать очереди, ставить в нее сообщения и извлекать их, а также модифицировать конфигурацию. У всех их есть общая характеристика — post в начале имени, так что вы легко найдете их в таблице.
Как письма попадают в почтовую систему
1. Чаще всего — через сеть. Сначала их получает в
postfix SMTP- демон. Проводится проверка на спам, если эту функцию включил администратор.
Затем запускается процесс cleanup, отвечающий за зачистку. Он проверяет, правильно ли оформлено сообщение и допустимый ли у него формат. Цель — не допустить переполнение буфера, которое может быть причиной атак.
Обработанное письмо записывается в каталог incoming, выделенный для хранения входящей очереди.
2. Послание может быть отправлено с локальных серверов скриптами или командой, например, такой:
3. Письмо появилось как ответ системы. Отправителю сообщается, что его послание не удалось доставить.
4. Письмо возникло как уведомление администратору. Сообщается, что есть проблемы c протоколом SMTP или настройки нарушены. Чтобы доставить письмо, сначала запускается процесс cleanup, а потом оно ставится в очередь.
Как происходит доставка
Сообщения, поставленные в очередь incoming, должны быть доставлены адресатам.
Queue manager — менеджер очередей. Когда приходит сигнал о прибытии новой почты, он ставит ее в активную очередь active и отправляет запрос демону trivial-rewrite. Он сообщает, локальный это адрес или удаленный. Дополнительные сведения находятся в файле
Postfix transport
Менеджер очередей на основе анализа данных выбирает программы доставки. Перечислим их.
- Агент Local доставляет корреспонденцию внутри системы. Несколько таких процессов запускаются одновременно.
- Virtual — урезанная версия Local. Виртуальная доставка применима к п/я в формате mailbox. С *.forward и системными псевдонимами работа не предусмотрена.
- SMTP подключается, если послание адресовано удаленному клиенту. Менеджер очередей передает сведения о получателе: наименование очереди, адресные данные, домен или хост. По завершении пересылки выдается ее статус, например, успешно, фатальная ошибка или временная ошибка.
- LMTP доставляет корреспонденцию локальному/удаленному серверу, предназначенному для сбережения п/я. Принцип работы LMTP аналогичен SMTP, но протоколы разные.
- Интерфейс Pipe mailer работает с транспортными агентами со стороны, например, с UUCP.
Если доставка сорвалась, Queue manager отсылает это послание в директорию, выделенную отложенным сообщениям. Спустя какое-то время будет предпринята повторная проба. Если вам нужно попытаться отправить письмо раньше, запустите команду postfix flush.
Corrupt — очередь, куда отсылаются сообщения, которые повреждены, не читаются или у них недействительный формат. Подозрительные данные изолируются, пока администратор не примет решение о дальнейших действиях.
Очередь hold — для тех писем, которые были приостановлены. Из этого состояния их можно вывести специальной командой.
Queue manager умеет функционировать в различных режимах/стратегиях, или комбинировать их.
- Leaky bucket. При этой стратегии число писем в активной очереди ограничивается.
- Fairness. Если не заполнена активная очередь, то берутся письма, залежавшиеся в отложенной и входящей очередях.
- Slow start. Режим направлен на предотвращение заторов, которые происходят, когда получатель задерживается с обработкой запросов. Подстройка проводится путем регулирования числа попыток одновременной отправки.
- Round robin. Queue manager рассортировывает по очередям корреспонденцию в соответствии с местом доставки.
- Exponential backoff. Та почта, что не отправилась с первого раза, уходит в отложенную очередь. Ее тайм-аут после последующих неудачных попыток умножается на 2. Это позволяет не тратить ресурсы на нерабочие узлы.
- Кэширование статуса. Queue manager работает с таблицей, в которой содержатся статусы неудачных попыток доставки.
Итоги
Настройте для пересылки почты собственный клиент, если планируете:
- отправлять сообщения пользователей сервера за пределы локальной сети;
- получать извещения о происшедших событиях.
Число отказов снизится, а вероятность доставки возрастет с уменьшением количества посредников при пересылке писем.
Postfix, server пересылает корреспонденцию либо напрямую, непосредственно на почтовый сервер адресата, либо через relay (посредника). Почтовик легко устанавливается и запускается, но нужно понимать тонкости его работы, чтобы внедрить или разобраться в проблемах.
Устанавливаем и настраиваем postfix
Устанавливаем postfix
на сервер:
Centos
(обычно в Centos 7 он уже установлен):
yum install epel-release -y yum install postfix -y
apt install postfix -y
Далее откроется окно, где нужно выбрать Internet Site
:

И в следующем окне указать ваш домен, с которого будет отправляться почта:

Запускаем и добавляем в автозагрузку службу postfix
:
systemctl start postfix systemctl enable postfix
Вносим изменения в настройку postfix,
в консоли вводим следующие команды:
postconf -e 'inet_interfaces=all' postconf -e 'mydestination=' postconf -e 'myhostname=mailtest.fvds.ru' postconf -e 'virtual_mailbox_domains=mailtest.fvds.ru' postconf -e 'virtual_transport=lmtp:unix:private/dovecot-lmtp' postconf -e 'virtual_mailbox_maps=hash:/etc/postfix/virtual_recipients' postconf -e 'virtual_alias_maps=hash:/etc/postfix/virtual_alias_recipients' postconf -e 'virtual_mailbox_base=/var/mail/vmail/' postconf -e 'local_recipient_maps=$virtual_mailbox_maps' postconf -e 'smtpd_sasl_auth_enable=yes' postconf -e 'smtpd_sasl_type=dovecot' postconf -e 'smtpd_sasl_path=private/auth' postconf -e 'broken_sasl_auth_clients=yes' postconf -e 'smtpd_sasl_security_options=noanonymous' postconf -e 'smtpd_use_tls=yes' postconf -e 'smtpd_tls_cert_file=/etc/postfix/certs/cert.pem' postconf -e 'smtpd_tls_key_file=/etc/postfix/certs/key.pem' postconf -e 'smtpd_sasl_tls_security_options=noanonymous' postconf -e 'smtpd_tls_auth_only=yes' postconf -e 'smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination' postconf -e 'smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain' postconf -e 'smtpd_banner=$myhostname ESMTP' postconf -e 'biff=no' postconf -e 'strict_rfc821_envelopes=yes' postconf -e 'disable_vrfy_command=yes' postconf -e 'smtpd_helo_required=yes'
Конфигурация будет добавлена в файл /etc/postfix/main.cf
.
В конец файла /etc/postfix/master.cf
дописываем следующие строки:
submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING
Для Centos
в конец этого же файла нужно добавить:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
Для Debian/Ubuntu
в конец этого же файла нужно добавить:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
Теперь сгенерируем самоподписанный сертификат, чтобы данные не передавались в открытом виде. При генерации сертификата система задаст несколько вопросов. На них можно ответить всё, что угодно, — особой роли это не играет.
mkdir /etc/postfix/certs openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem
Вот пример выполнения команды:

Если у вас есть платный сертификат на домен с не истекшим сроком действия, используйте его. Файлы сертификата нужно разместить в директории /etc/postfix/certs/
и заменить имена файлов на свои в конфигурационном файле postfix /etc/postfix/main.cf
в следующих строках:
smtpd_tls_cert_file smtpd_tls_key_file
Проверить корректность настроек postfix
можно через команду:
postfix check
- The postfix Open Source Project on Open Hub: Languages Page
- ↑ 1
2
3
4
5
Free Software Directory
Полезные команды
DSN Postfix — оповестить о статусе доставки корреспонденции: успех, неудача, задержка или не отправлено.
Вы можете запретить оповещения:
Или разрешить лишь отобранным:
/etc/postfix/main.cf:
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
Перечень выбранных сетей — в файле esmtp_access. Например:
192.168.0.0/25 silent-discard
0.0.0.0/0 silent-discard, dsn
Работа с очередью
- С помощью утилиты
postcat Postfix вы сможете просматривать содержимое сообщений, которые застряли в очереди. - qshape Postfix можно увидеть письма, стоящие в очереди по каждому из доменов.
- Узнать количество писем в очереди:
- Установить наименование сервера
Имя узнается с помощью команды:
Если имя не установлено, или не такое, его можно прописать:
Справка
. Hostname сервера не совпадает с его доменом.
Например, server.example.com — полное имя домена, а server — его hostname.
Настройка отправки почты
Для того чтобы отправленные через MTA письма не попали под спам, а пришли адресату, вам будут нужны:
- реальный домен, вы настроите его поддомен как имя сервера и будете управлять настройками DNS.
При настройке обязательно указываются такие параметры: myhostname, mydomain и mydestination.
Хост и домен прописываются так:
myhostname = mail.
example.org
mydomain = example.org
Если не указать название хоста, система определит его сама, но лучше прописать явно. Имя домена получится из названия хоста, если отбросить левую часть до первой точки. Поэтому можно не прописывать его вручную. Mydomain — это публичное наименование почтового сервиса. К адресу, откуда отсылается корреспонденция, автоматически дописывается домен локальной почты:
myorigin = $mydomain
Прописываем почтовые домены, к которым сервер доставит почту. В mydestination перечисляются DNS-имена, для которых этот почтовый сервер сможет принимать корреспонденцию. Их лучше обрабатывать механизмом virtual, так что значения не присваиваем.
my destination =
localhost
$myhostname
Затем подключаем виртуальные домены, чтобы доставить почту:
Так как обычная локальная доставка нас не интересует, оставляем перечень адресатов без значений.
1. Прописываем сетевые интерфейсы, работающие на приеме почты, например, все:
inet_interfaces = all
Выбираем из ipv4, ipv6, all нужный нам протокол:
inet_protocols = all
2. Указываем доверенные сети, где разрешены практически любые соединения:
3. Если вы планируете отправлять корреспонденцию через relay, пропишите это в relayhost.
Справка.
Relay — это узел, перенаправляющий входящую почту. В его задачи входит:
- хранение на протяжение указанного периода;
- пересылка писем получателю или другому relay.
Relay для отправляемой корреспонденции:
relayhost = smtp.myprovider.net
Так как вы отправляете всю переписку на релей, вам нет смысла опрашивать DNS. Поэтому отключаем эти запросы:
disable_dns_lookups = yes
4. Прописываем домены, на которые разрешим пересылать сообщения от клиентов недоверенных сетей. Возможен один из вариантов:
relay_domains = $mydestination
- Запрет пересылки корреспонденции от посторонних:
- Отправление корреспонденции своим доменам:
relay_domains = $mydomain
Справка
. По умолчанию, Постфикс:
- переправляет корреспонденцию исключительно авторизованным доменам;
- воспринимает авторизованными те домены, что прописаны в mydestination.
Тестирование почты и настройка брандмауэра
Сначала необходимо убедиться в том, что почта доходит до нового ящика. Сделать это можно с помощью тестового письма:
tail -f /var/log/mail.log
Чтобы почтовый сервер был доступен из интернета, необходимо открыть несколько портов.
Начните с POP3 и POP3S:
sudo ufw allow 110
sudo ufw allow 995
Затем откройте IMAP и IMAPS:
sudo ufw allow 143
sudo ufw allow 993
И напоследок — доступ к
Ubuntu SMTP Server
sudo ufw allow 25
sudo ufw allow 465
sudo ufw allow 587
Для управления почтовыми ящиками можно использовать другой графический интерфейс. Например,
Roundcube-почта
— клиент для получения и отправки электронных писем. Работает на связке Apache и MySQL, что отлично вписывается в нашу конфигурацию.
Конфигурацию почтового сервера тоже можно менять. Например, добавить
Postfix DKIM — инструмент, который добавляет в заголовки писем электронную подпись. Кроме
DKIM Postfix
есть SPF и DMARC. Первый инструмент помогает внешним сервисам однозначно определять серверы, которые могут отправлять почту от домена, а второй инструмент позволяет указать другим серверам, что делать с письмами, не получившими одобрение от DKIM и SPF.
Чтобы конфигурацию было удобно переносить на другой сервер, можно также создать
со всеми установленными зависимостями.
Алиасы и преобразования адресов
Alias, или никнейм — это короткое имя, которое легко запомнить. Оно присваивается сложным и длинным наименованиям.
Имя адресата может быть таким же, как и имя пользователя системы, но также их можно извлечь из таблицы алиасов. Например:
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
Во время первой установки почтового клиента таблица пополняется записью с алиасом суперпользователя root. Ему будут отправляться все письма, отправленные на системные адреса или администратору (по умолчанию им становится первый зарегистрированный пользователь).
Рассмотрим на примере, как выглядит таблица.
Fitzwilliam Darcy: fitzwilliam
accountant: accountant@chiefcomputer
result: calendars, plans, reports
view: | postcat -q mail_id
postalias создает базы псевдонимов и обрабатывает запросы к ним. Чтобы построить рабочую таблицу, наберите команду:
Добавление пользователей
Чтобы создать нового пользователя, в терминале Ubuntu наберите команду:
Добавленный пользователь сможет пользоваться почтовиком. Такой метод подходит небольшим организациям. Если же в организации много пользователей, систему наращивают.
- Устанавливаем MySQL, в которой будет храниться информация о пользователях.
- Переносим учетные записи пользователей в базу данных.
Этот процесс подробнее описан в блоге
cloud.timeweb.com
, разбирается настройка Postfix и Dovecot
.
Postfix logs
Журнальные файлы по умолчанию хранятся в файле mail.log, расположенном в подкаталоге /var/log/mail.log.
Если вы или ваш провайдер изменили их местоположение, то для возврата к первичным настройкам потребуется выполнить apt-get install rsyslog
и перезапустить службы постфикса.
По каждому из писем в логах фиксируются базовые данные: отправитель и адресат, а также факт и время обработки. Анализируя
файлы журналов, вы можете:
- выяснить, отправлялось ли письмо с указанного адреса;
- изучить статистику работы с почтовиком;
- узнать объем сообщений, прошедших через SMTP.
Из этих строк не всегда можно понять, какое послание было обработано, так как одному и тому же получателю их могло быть отправлено несколько. Рассмотрим, как добавить в логе заголовки, которые смогут идентифицировать письмо с помощью директивы
1. Создаем в подкаталоге etc/postfix файл header_checks и пишем в него правило для проверки заголовков:
/^X-Message-(.*)$/ Information $1
2. Проверяем. Если нет ошибок в формате файла, то по команде:
postmap -q “X-Message-Result: 79461” pcre:/etc/postfix/header_checks
Information Result: 79461
3. Подключим этот файл в почтовый сервер:
postconf –e header_checks=pcre:/etc/postfix/header_checks postfix reload
Итог: для всех посланий, содержащих такой заголовок, в журнальных записях запишется последняя часть заголовка, по которой можно распознать письмо.
Настройка Postfix для работы с Dovecot
После настройки Dovecot измените конфигурацию Postfix. Откройте файл main.cf:
sudo ufw allow 110
sudo ufw allow 995
smtp_use_tls = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
Закомментируйте несколько параметров, которые теперь не нужны:
#virtual_mailbox_base = /home/vmail
#virtual_mailbox_maps = hash:/etc/postfix/vmaps
#virtual_minimum_uid = 1000
#virtual_uid_maps = static:5000
#virtual_gid_maps = static:5000
Вместо закомментированных параметров добавьте:
sudo ufw allow 143
sudo ufw allow 993
Измените файл master.cf. Откройте его:
sudo nano /etc/postfix/master.cf
relay_domains = $mydomain
После изменения конфигурации перезагрузите Postfix и Dovecot:
sudo systemctl restart postfix
sudo systemctl restart dovecot
Теперь у вас есть
Установка Dovecot
Dovecot — сервер, который мы будем использовать для авторизации пользователей по протоколу SMTP.
Установите Dovecot вместе с плагином для работы с MySQL:
Затем настройте способ хранения писем. Для этого откройте файл конфигурации с помощью встроенного редактора nano: tail -f /var/log/mail.log
Добавьте в него строку:
Это строка указывает, что сообщения необходимо хранить в папке MailDir. relay_domains = $mydestination
Затем настройте слушателя для аутентификации. Откройте другой файл конфигурации:
sudo nano /etc/dovecot/conf.d/10-master.conf
Добавьте в него следующие строки:
Затем добавьте в этот же файл конфигурации:
Теперь переходите к настройке самой аутентификации. Откройте файл 10-auth.conf:
sudo nano /etc/dovecot/conf.d/10-auth.conf
Пропишите в нем:
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Затем откройте файл 10-ssl.conf:
sudo nano /etc/dovecot/conf.d/10-ssl.conf
Настройте в нем шифрование:
ssl = required // требование шифровани
я
ssl_cert = </etc/ssl/mail/public.pem // путь к открытой части сертификата
ssl_key = </etc/ssl/mail/private.key // путь к приватному ключу
Настройте автоматическое создание каталогов в файле 15-lda.conf. Откройте его:
sudo nano /etc/dovecot/conf.d/15-lda.conf:
lda_mailbox_autocreate = yes
Настройте подключение к БД. Откройте файл конфигурации:
sudo nano /etc/dovecot/conf.d/auth-sql.conf.ext
Добавьте в него:
Здесь нужно указать файлы, в которых описываются правила получения пользователей и паролей из базы данных. Их тоже нужно добавить самостоятельно. Откройте файл:
sudo nano /etc/dovecot/dovecot-sql.conf.ext
В конце добавьте:
Это полностью сконфигурированный запрос, который позволит получать данные из БД. Осталось задать интерфейс, который будет слушать Dovecot. Откройте файл:
sudo nano /etc/dovecot/dovecot.conf
Пропишите в нем:
listen = *
Чтобы все заработало, разрешите запуск Dovecot:
systemctl enable dovecot
И перезагрузите процесс:
systemctl restart dovecot
Настройка почтового сервера
Устанавливаем и настраиваем dovecot
yum install dovecot -y
apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd -y
Активируем службу и добавляем в автозапуск:
systemctl start dovecot systemctl enable dovecot
Создаём локальный файл настроек:
touch /etc/dovecot/local.conf
Открываем его текстовым редактором и указываем в нём следующие настройки:
protocols = pop3 imap lmtp auth_mechanisms = plain login mail_gid = vmail mail_uid = vmail first_valid_uid = 5000 last_valid_uid = 5000 mail_location = maildir:/var/mail/vmail/%d/%n/ mbox_write_locks = fcntl disable_plaintext_auth = yes passdb { args = scheme=ssha512 username_format=%u /etc/dovecot/users driver = passwd-file } userdb { args = username_format=%u /etc/dovecot/users driver = passwd-file } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } unix_listener auth-userdb { mode = 0600 user = vmail } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail } protocol lmtp { postmaster_address = postmaster@mailtest.fvds.ru } ssl = required ssl_cert = </etc/postfix/certs/cert.pem ssl_key = </etc/postfix/certs/key.pem ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl_dh_parameters_length = 2048 ssl_prefer_server_ciphers = yes
Сертификат используется тот, что генерировали при настройке postfix
, если используете свой сертификат, то нужно указать путь до него в следующих строках конфигурационного файла dovecot
/etc/dovecot/local.conf
:
ssl_cert ssl_key
Особенности работы
Чем интересен этот почтовый сервер?
- Его исходный код открыт, а файлы конфигурации состоят всего из двух строк. Он готов отправлять сообщения сразу же после установки, но в нем нет встроенного механизма авторизации.
- Если не установить плагин Dovecot, любой желающий может подсоединиться к почтовику и начать отправлять или получать письма со всех ящиков.
- Возможна настройка виртуальных доменов.
- Postfix и Sendmail — две совместимые программы. Персональные файлы пользователей с расширением *.forward и алиасы, хранящие пути перенаправления e-mail пользователей, имеют сходную семантику и формат.
- Server Postfix комуницирует не только по SMTP, POP3 и IMAP, а также по расширенному протоколу ESMTP. В Постфиксе адреса не подставляются, а «вытягиваются» из табличных файлов или SQL-базы пользователя.
Создаём почтовый ящик
doveadm pw -s ssha512
Команда запросит пароль и подтверждение, придумываем его и вводим. На выходе увидим следующую строку:

Обязательно скопируйте её, это пароль от ящика в зашифрованном виде.
admin@mailtest.fvds.ru:{SSHA512}v8cRBy17QPdVE91MRQ1MsuMtCUENXZuWGuX5o51we/V1YG3MgJnC+9qHRw488U4W5ZR6eAlxuQiKco41U5swvXVMDRg=:5000:5000
Теперь создадим файл получателей локальной почты:
touch /etc/postfix/virtual_recipients
И файл псевдонимов для почтовых ящиков, чтобы настроить переадресацию на тот почтовый ящик, с которого вам удобнее получать письма:
touch /etc/postfix/virtual_alias_recipients
В нашем примере формат файла псевдонимов следующий:
admin@mailtest.fvds.ru admin.mailtest@ya.ru
Далее в файле /etc/postfix/virtual_recipients
укажем созданный почтовый ящик в таком виде:
admin@mailtest.fvds.ru admin/
Проиндексируем базу пользователей postfix
:
postmap /etc/postfix/virtual_recipients postmap /etc/postfix/virtual_alias_recipients
После каждого изменения файлов
/etc/postfix/virtual_recipients
и
/etc/postfix /virtual_alias_recipients
выполняйте их переиндексацию, чтобы данные обновились:postmap /etc/postfix/virtual_recipients postmap /etc/postfix/virtual_alias_recipients
Перезапускаем почтовые службы:
systemctl restart dovecot systemctl restart postfix
На этом базовая настройка почтового сервера завершена: можно отправлять и получать письма. Если не планируете переписываться с огромным количеством людей, у которых в почте настроены жёсткие проверки на спам, то можете на этом остановиться — протестировать отправку и пользоваться. Но, помните, что для полноценной работы почтового сервера только базовой настройки недостаточно. Такие сервисы, как gmail.com
, mail.ru
или yandex.ru
, могут расценивать ваши письма, как спам, из-за того, что они не прошли проверку, и отклонять их. Чтобы этого не случилось и письма доходили до адресата, советуем выполнить ещё пару настроек, о которых расскажем далее.
Виртуальные почтовые ящики
Это альтернатива ящикам, созданным для каждого из пользователей системы. Если на обслуживании вашего почтовика числятся сотни клиентов, то будет непрактично создавать всем им системные учетные записи для работы с почтой. Чтобы воспользоваться виртуальными п/я, вам нужно будет подкорректировать настройки программы и прописать окружение операционки.
Рассмотрим общий принцип функционирования виртуальных ящиков в системе. Если сервер почты не является релеем, то вся почтовая информация записывается на диск. При использовании постфиксом системных учеток, почтовые записи можно распознать по уникальным идентификаторам. Но, когда эксплуатируются виртуальные п/я, потребуется каким-то образом сообщить приложению о необходимости сохранения почтовой информации под определенной учеткой ОС.
Идентификаторы пользователей и групп, а также их права можно задать с помощью параметров virtual_uid_maps, virtual_gid_maps. Кроме того, необходимо прописать папку, в которой будет храниться почта.
Класс виртуальных п/я создан для того, чтобы доставлять корреспонденцию для hosted_domains. Транспорт, который доставляет письма, прописывается в параметре
Postfix virtual transport . По молчанию ему присвоено значение virtual, что обозначает доставку виртуальным агентом. Параметр mailbox_domains отвечает за наименования доменов, а в maps указываются допустимые адресаты.
Подготовка к установке
- Сервер с готовой конфигурацией. Например, можно заказать его на
- Учетная запись с правами sudo.
В этом руководстве мы построим
Mail Server на основе Ubuntu 20.04. Для хранения данных подключим базу данных MySQL.
Создание отдельного пользователя
Запустите терминал Ubuntu и создайте нового пользователя:
Выдайте новому пользователю права sudo:
Создаем учетную запись, от которой будут выполняться задачи чтения и записи почтовых ящиков в каталоге на сервере. Мы создадим пользователя vmail с одноимённой группой и UID и GID 1024:
groupadd -g 1024 vmail
useradd -d /home/mail -g 1024 -u 1024 vmail
mkdir /home/mail
chown vmail:vmail /home/mail
Мы будем хранить всю почту пользователей в каталоге /home/mail.
Настройка MySQL
MySQL нужен для решения двух задач. Первая — хранение данных пользователей, вторая — хранение конфигурации Roundcube.
Установите MySQL, PHP и Apache:
sudo apt install mysql-server mysql-client apache2 libapache2-mod-php php php-imap php-mysql php-mbstring
Запустите и добавьте в автозагрузку базу данных и веб-сервер:
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl start mysql
sudo systemctl enable mysql
Задайте пароль для учетной записи root, а также создайте БД для Postfix и Roundcube:
Настройка PostfixAdmin
Добавьте символическую ссылку из каталога веб-сервера:
Отредактируйте его содержимое:
Теперь перезагрузите страницу, на которой получили хэш, и появится возможность создать администратора.
После авторизации откроется интерфейс, через который можно управлять пользователями и почтовыми ящиками, отправлять и получать письма. Можно даже попробовать послать сообщение. Правда, велика вероятность, что оно не дойдет или окажется в спаме, так как почтовые сервисы доверяют не всем доменам. Следить за репутацией почтового домена помогает
Постмастер Майл и другие подобные инструменты, но их изучение выходит за рамки этого руководства.
Postfix Ubuntu и postfix-mysql
для соединения с базой данных:
sudo apt install postfix postfix-mysql -y
После завершения установки в терминале отобразится графический интерфейс.
Postfix-настройка
- Выберите Internet Site.
- Укажите FQDN сервера, на котором запущен
почтовый сервер Linux
Если впоследствии появится необходимость изменить эти параметры, сделать это можно с помощью утилиты dpkg-reconfigure:
sudo dpkg-reconfigure postfix
Переходите к настройке Postfix. Откройте главный файл конфигурации:
sudo nano /etc/postfix/main.cf
Закомментируйте несколько строк:
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_tls_security_level=may
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
Добавьте следующие строки:
virtual_transport=lmtp:unix:private/dovecot-lmtp
relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base=/var/mail/vmail/
local_recipient_maps=$virtual_mailbox_maps
smtpd_sasl_auth_enable=yes
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
broken_sasl_auth_clients=yes
smtpd_sasl_security_options=noanonymous
smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/postfix/certs/cert.pem
smtpd_tls_key_file=/etc/postfix/certs/key.pem
smtpd_sasl_tls_security_options=noanonymous
smtpd_tls_auth_only=yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain
smtpd_banner=$myhostname ESMTP
strict_rfc821_envelopes=yes
disable_vrfy_command=yes
smtpd_helo_required=yes
Затем откройте для редактирования файл master.cf:
sudo nano /etc/postfix/master.cf
Добавьте в него строки:
Создайте конфигурационные файлы, которые определят порядок обращений Postfix к БД MySQL.
Создайте папку MySQL:
sudo mkdir /etc/postfix/mysql
Откройте файл relay_domains.cf:
sudo nano /etc/postfix/mysql/relay_domains.cf
Пропишите в нем:
Откройте файл virtual_alias_domain_maps.cf:
sudo nano /etc/postfix/mysql/virtual_alias_domain_maps.cf
Пропишите в нем:
Откройте файл virtual_alias_maps.cf:
sudo nano /etc/postfix/mysql/virtual_alias_maps.cf
Пропишите в нем:
Откройте файл virtual_mailbox_domains.cf:
sudo nano /etc/postfix/mysql/virtual_mailbox_domains.cf
Пропишите в нем:
Откройте файл virtual_mailbox_maps.cf:
sudo nano /etc/postfix/mysql/virtual_mailbox_maps.cf
Пропишите в нем:
Напоследок сгенерируйте самоподписной сертификат.
sudo mkdir /etc/postfix/certs
sudo openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem
При генерировании сертификата появится несколько вопросов, ответы на них могут быть любыми.
После завершения настройки перезапустите Postfix:
sudo postfix check
sudo systemctl restart postfix
<!--
NewPP limit report
Parsed by mw1380
Cached time: 20230808105412
Cache expiry: 1814400
Reduced expiry: false
Complications: [show‐toc]
CPU time usage: 1.331 seconds
Real time usage: 1.519 seconds
Preprocessor visited node count: 1606/1000000
Post‐expand include size: 49745/2097152 bytes
Template argument size: 3977/2097152 bytes
Highest expansion depth: 16/100
Expensive parser function count: 18/500
Unstrip recursion depth: 0/20
Unstrip post‐expand size: 2637/5000000 bytes
Lua time usage: 1.185/10.000 seconds
Lua memory usage: 15759069/52428800 bytes
Lua Profile:
recursiveClone 340 ms 29.3%
MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::getEntity 300 ms 25.9%
MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::getEntityStatements 180 ms 15.5%
type 80 ms 6.9%
? 60 ms 5.2%
MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::addStatementUsage 40 ms 3.4%
MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::getLabel 40 ms 3.4%
(for generator) 40 ms 3.4%
init 20 ms 1.7%
MediaWiki\Extension\Scribunto\Engines\LuaSandbox\LuaSandboxCallback::getAllExpandedArguments 20 ms 1.7%
[others] 40 ms 3.4%
Number of Wikibase entities loaded: 30/400
-->
Меняем темы писем с Postfix Pcre
В Постфикс можно заменять темы писем. Для этого потребуется доустановить библиотеку pcre, введя в терминале команду:
apt install postfix-pcre
Рассмотрим пример, где почтовик приписывает имя сервера к теме сообщения.
1. Добавляем в файл конфигурации запись:
header_checks = pcre:/etc/postfix/rewrite_subject
2. Создаем файл rewrite_subject в подкаталоге etc/postfix.
3. Записываем в этот файл правило, по которому наименование сервера припишется к теме письма.
/^Subject: (.*)$/ REPLACE Subject: $1 (from server.domain.tld)
-
/^Subject: (.*)$/
— регулярное выражение, которое совпадет с текстом заголовка, идущего после слова «Subject». -
(.*)
— любая из тем письма, ее значение присвоится переменной $1. -
REPLACE
— замена текста.
Результатом этой команды будет замена заголовка на «заголовок + имя сервера».
4. Перезапускаем почтовый сервер, чтобы изменения вступили в силу.
Справка
. Регулярные выражения pcre можно применять не только для правки заголовков, но и для фильтрации сообщений.