Постфикс почтовый сервер

Blog

Postfix чаще всего используется в качестве почтового сервера сайтов. Он готов к работе сразу после установки, но по умолчанию в нем нет системы авторизации. Это значит, что любой человек может использовать этот
почтовый сервер для отправки и приема писем. Чтобы исключить такую ситуацию, используется связка
Postfix – Dovecot.
Dovecot — плагин, который позволяет настроить авторизацию

postfix

Устанавливаем и настраиваем 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
.

Blog

Этот почтовый агент выполняет те же функции, что и 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 строк. 

После инсталляции программные настройки запишутся в подкаталог /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. 
Читайте также:  Обзор дешевых VPS-серверов / Хабр

Если доставка сорвалась, 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  


  1. The postfix Open Source Project on Open Hub: Languages Page

  2. 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, что отлично вписывается в нашу конфигурацию.

Читайте также:  Установка WordPress на локальный компьютер с помощью XAMPP

Конфигурацию почтового сервера тоже можно менять. Например, добавить
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 наберите команду:

     
    
  

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

  1. Устанавливаем MySQL, в которой будет храниться информация о пользователях.
  2. Переносим учетные записи пользователей в базу данных.

Этот процесс подробнее описан в блоге
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-настройка

      1. Выберите Internet Site.
      2. Укажите 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 можно применять не только для правки заголовков, но и для фильтрации сообщений.

  • Оцените статью
    Хостинги