Почтовый сервер Postfix#

Postfix — это высокопроизводительный и масштабируемый почтовый сервер, реализующий функции Mail Transfer Agent (MTA). Предназначен для надежной доставки электронной почты в соответствии с протоколом SMTP (Simple Mail Transfer Protocol).

Функциональные особенности Postfix:

  • Прием входящей почты – обеспечивает прием входящей почты через протокол SMTP от внешних серверов.

  • Отправка исходящей почты – позволяет отправлять исходящую почту на другие почтовые серверы по протоколу SMTP.

  • Маршрутизация почты — выполняет маршрутизацию почты, определяя, куда доставлять сообщения (локально или на удаленные серверы).

  • Возможность локальной доставки почты – поддерживает локальную доставку почты пользователям на самом сервере через агенты доставки, такие как Dovecot или local.

  • Выстраивание очереди сообщений – организует выстраивание очереди сообщений для временного хранения и последующей обработки при недоступности получателя.

  • Поддержка виртуальных доменов – поддерживает работу с виртуальными доменами, позволяя обслуживать множество доменов на одном сервере с разными почтовыми ящиками.

  • Логирование операций – ведет подробное логирование всех операций, упрощает диагностику, мониторинг и анализ работы почтовой системы.

Плагин postfix-ldap – модуль расширения для почтового сервера Postfix, позволяющий интегрировать его с LDAP-каталогами для централизованного управления информацией о пользователях, доменах, псевдонимах и маршрутизации почты.

С помощью плагина postfix-ldap Postfix выполняет запросы к LDAP-серверу для:

  • проверки существования почтовых ящиков;

  • разрешения псевдонимов;

  • определения виртуальных доменов;

  • поиска местоположения доставки почты;

  • фильтрации отправителей/получателей на основе данных из каталога.

Файлы конфигурации Postfix#

По умолчанию файлы конфигурации находятся в каталоге /etc/postfix.

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

  • /etc/postfix/main.cf – содержит глобальную конфигурацию Postfix.

  • /etc/postfix/master.cf – определяет взаимодействие Postfix с различными процессами для доставки почты.

Дополнительные часто используемые файлы:

  • /etc/postfix/access — задает правила доступа, например, хосты, которым разрешено подключаться к Postfix.

  • /etc/postfix/transport — сопоставляет адреса электронной почты с серверами ретрансляции.

  • /etc/aliases — содержит настраиваемый список, требуемый почтовым протоколом, описывающий псевдонимы идентификаторов пользователей.

Примечание

Файлы /etc/postfix/main.cf и /etc/postfix/master.cf должны принадлежать и быть доступными для записи только пользователю с административными полномочиями. Предоставление прав на запись означает предоставление пользователю административных полномочий.

Управление конфигурацией Postfix#

Для настройки параметров конфигурации используется утилита postconf.

Для просмотра полной текущей конфигурации почтового сервера Postfix введите:

postconf

Чтобы добавить или обновить параметр в файле /etc/postfix/main.cf, используйте:

postconf <parameter>=<value>

Где:

  • <parameter> - параметр, который нужно добавить или обновить;

  • <value> - значение параметра.

Для проверки корректности конфигурации Postfix введите:

postfix check

Пример вывода команды:

postfix: /etc/postfix/main.cf: undefined parameter: relay_hoost

В данном примере отображается опечатка в параметре relayhost.

Команда postfix check выполняет базовую проверку синтаксиса и согласованности конфигурационных файлов:

  • Проверяет наличие и доступность ключевых файлов.

  • Контролирует правильность путей в /etc/postfix/main.cf.

  • Обнаруживает типичные ошибки, например:

    • несуществующие каталоги;

    • ошибки в параметрах;

    • отсутствующие сервисы в /etc/postfix/master.cf.

После внесения изменений в файлы /etc/postfix/main.cf и /etc/postfix/master.cf выполните команду postfix reload, чтобы обновить работающую почтовую систему и применить настройки.

Синтаксис файла конфигурации /etc/postfix/main.cf#

Параметры конфигурации Postfix напоминают переменные оболочки, с несколькими важными отличиями:

  • Postfix не читает кавычки. Параметры задаются в формате:

    <parameter> = <value>
    

    Где:

    • <parameter> - параметр;

    • <value> - значение.

    Для использования значения параметра в других параметрах, поместите символ $ перед его названием:

    <parameter_2> = $<parameter>
    
  • $<parameter> можно использовать до того, как ему присвоено значение.

    Язык конфигурации Postfix использует отложенную оценку и не обращается к значению параметра до тех пор, пока оно не понадобится во время выполнения.

  • Postfix использует файлы баз данных для управления доступом, перезаписи адресов и других целей. Пример использования базы данных в Postfix:

     virtual_alias_maps = hash:/etc/postfix/virtual
    

Настройки Postfix#

В данном разделе описаны основные конфигурационные файлы, ключевые параметры, рекомендации по настройке почтового сервера Postfix.

Доменное имя исходящей почты#

Параметр myorigin файла /etc/postfix/main.cf определяет домен, который будет указан в письмах. По умолчанию используется локальное имя: $myhostname. Для согласованности между адресами отправителя и получателя myorigin также определяет доменное имя, которое будет добавлено к неполным адресам получателей (без указания домена).

Например:

myorigin = $myhostname 
myorigin = $mydomain 

Где:

  • $myhostname - отправка почты от имени user@$myhostname. Значение по умолчанию.

  • $mydomain - имя домена user@$mydomain. Рекомендуется.

Домены для получения почты#

Параметр mydestination определяет, для каких доменов машина будет доставлять почту локально.

Можно не указывать или указать несколько доменных имен, паттернов /файл/имя и таблиц поиска тип:таблица (например, hash:, btree:, ldap:, mysql:), разделяя их пробелами и/или запятыми. Паттерны /файл/имя заменяются содержимым указанного файла. тип:таблица означает выполнение поиска в таблице с проверкой только факта существования записи. Результат поиска при этом игнорируется.

Важно

Если машина является почтовым сервером для всего домена, включите $mydomain в список.

Ниже представлены примеры настроек доменов для получения почты:

  • Для настройки по умолчанию введите в файл /etc/postfix/main.cf следующие значения параметра mydestination:

    mydestination = $myhostname localhost.$mydomain localhost
    
  • Для настройки почтового сервера для всего домена в файле /etc/postfix/main.cf используйте:

    mydestination = $myhostname localhost.$mydomain localhost $mydomain
    

Важно

Чтобы избежать «закольцовывания» при доставке почты, перечислите все имена хостов машины, включая $myhostname и localhost.$mydomain.

Пересылка почты от клиентов#

По умолчанию Postfix пересылает почту от клиентов из авторизованных сетевых блоков на любые адреса. Авторизованные сети определяются параметром mynetworks. Значение по умолчанию разрешает только локальную машину.

Можно указать доверенные сети в файле /etc/postfix/main.cf или позволить Postfix определить их самостоятельно. По умолчанию Postfix делает это автоматически. Результат зависит от значения параметра mynetworks_style.

Возможные значения mynetworks представлены в таблице ниже.

Значения mynetworks_style#

Значение

Описание

mynetworks_style = host

Пересылать почту только от локальной машины

mynetworks_style = subnet

Пересылать почту от SMTP-клиентов в тех же IP-подсетях, что и локальная машина

mynetworks_style = class

Пересылать почту от клиентов в тех же IP-сетях класса A/B/C, что и локальная машина

В качестве альтернативы можно задать список mynetworks вручную, в этом случае Postfix игнорирует параметр mynetworks_style.

Чтобы задать список доверенных сетей вручную, перечислите их в mynetworks:

mynetworks = <network_1>/<mask_1>, <network_2>/<mask_2>

Где:

  • <network> - сеть;

  • <mask> - маска сети.

Адреса для пересылки почты#

По умолчанию Postfix пересылает почту от «чужих» клиентов (клиентов вне авторизованных сетей) только на разрешенные удаленные домены. Разрешенные удаленные домены определяются параметром relay_domains. По умолчанию разрешаются все домены (и поддомены), которые указаны в параметре mydestination.

Возможные значения relay_domains представлены в таблице ниже.

Значения relay_domains#

Значение

Описание

relay_domains = $mydestination

Пересылать почту на все домены (и поддомены)$mydestination. Значение по умолчанию

relay_domains =

Никогда не пересылать почту от клиентов вне авторизованной сети

relay_domains = $mydomain

Пересылать почту на домен $mydomain

Сообщение о проблемах#

Настройте псевдоним postmaster в файле /etc/aliases для отправки сообщений об ошибках. Система Postfix сообщит о проблемах на адрес, указанный в postmaster.

Важно

После внесения изменений в файл /etc/aliases выполните команду newaliases, чтобы обновить работающую почтовую систему и применить корректировки.

По умолчанию отправляются сообщения только о серьезных проблемах (ресурсных, программных). Пример настройки файла /etc/postfix/main.cf по умолчанию:

notify_classes = resource, software

Где notify_classes - типы уведомлений об ошибках.

Возможные значения notify_classes представлены в таблице ниже.

Значения notify_classes#

Значение

Описание

bounce

Уведомить администратора о недоставленной почте. Отправить администратору копию недоставленного письма. Отправить расшифровку SMTP-сессии, если Postfix отклонил письмо

2bounce

Отправить администратору недоставленное письмо, если Postfix не может вернуть его отправителю

delay

Уведомить администратора о задержанной почте. Администратор получает только заголовок письма

policy

Уведомить администратора о запросах клиентов, отклоненных из-за политик (UCE)

protocol

Уведомить администратора об ошибках протокола (со стороны клиента или сервера) или попытках выполнить несуществующие команды

resource

Уведомить администратора о почте, недоставленной из-за нехватки ресурсов (например, ошибки записи в файл очереди)

software

Уведомить администратора о почте, недоставленной из-за программных ошибок

Внешние сетевые адреса прокси/NAT#

При запуске Postfix через прокси или NAT, настройте параметр proxy_interfaces и укажите все внешние адреса, на которые Postfix принимает почту. Можно указывать символические имена хостов вместо сетевых адресов.

Логирование Postfix#

Postfix поддерживает собственную систему ведения журнала с помощью postlogd.

Настройка логирования в файл#

Для настройки Postfix на запись логов добавьте строку в файл /etc/postfix/master.cf, если она отсутствует.

postlog   unix-dgram n  -       n       -       1       postlogd

Важно

В начале строки не должно быть пробелов.

Внесите изменения в файл /var/log/postfix.log.

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

  1. Остановите работающий почтовый сервер Postfix, выполнив команду:

    postfix stop
    
  2. Измените настройки логирования, используя:

    postconf maillog_file=/var/log/postfix.log
    postconf maillog_file_permissions=0644
    

    Параметр maillog_file_permissions указывается опционально для Postfix версии 3.9 и выше. Значение по умолчанию — 0600, доступ к файлу имеет только пользователь с административными полномочиями. Значение 0644 дополнительно разрешает чтение группе и другим пользователям.

  3. Запустите Postfix:

    postfix start
    

По умолчанию имя лог-файла должно начинаться с /var или /dev/stdout. Список разрешенных префиксов задается параметром maillog_file_prefixes. Данный механизм безопасности ограничивает последствия ошибки в конфигурации.

Настройка логирования в stdout#

Для настройки Postfix на запись логов в stdout выполните следующий сценарий.

  1. Добавьте строку в файл /etc/postfix/master.cf, если она отсутствует:

    postlog   unix-dgram n  -       n       -       1       postlogd
    
  2. Остановите работающий почтовый сервер Postfix, выполнив команду:

    postfix stop
    
  3. Настройте /etc/postfix/main.cf, добавив строку:

    maillog_file = /dev/stdout
    
  4. Запустите Postfix:

    postfix start-fg
    

Ротация логов#

Команда postfix logrotate запускается вручную или через cron для регистрации ошибок и вывода сообщения об ошибках в stderr.

postfix logrotate выполняет следующие шаги:

  • Переименовывает текущий лог-файл, добавляя суффикс с датой и временем. Формат суффикса задается параметром maillog_file_rotate_suffix (по умолчанию –%Y%m%d-%H%M%S).

  • Перезагружает Postfix, чтобы postlogd закрыл старый лог-файл.

  • После небольшой паузы сжимает старый лог-файл. Программа сжатия задается параметром maillog_file_compressor (по умолчанию – gzip).

  • При следующей записи события postlog создаст новый лог-файл с правами доступа, указанными в параметре maillog_file_permissions (по умолчанию: 0600).

Примечание

Команда не выполняет ротацию логов, путь к которым находится в каталоге /dev и не удаляет старые лог-файлы.

Важно

Если Postfix остановлен, программы без режима демона (postfix, postsuper, postmulti и postlog) будут записывать ошибки напрямую в maillog_file. Иные программы ведут логи через postlogd.

Настройка параметров TLS для сервера Postfix#

Чтобы зашифровать почтовый трафик и повысить его безопасность, настройте Postfix на использование сертификата от доверенного центра сертификации (CA), а также настройте параметры безопасности TLS.

Для настройки параметров TLS:

  1. Скопируйте следующие файлы на сервер Postfix:

    • Сертификат сервера: /etc/pki/tls/certs/postfix.pem.

    • Закрытый ключ: /etc/pki/tls/private/postfix.key.

  2. Укажите путь к файлам сертификата и закрытого ключа на сервере, добавив следующие строки в файл /etc/postfix/main.cf:

    smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
    smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
    
  3. Ограничьте входящие SMTP-подключения только аутентифицированными пользователями в файле /etc/postfix/main.cf:

    smtpd_tls_auth_only = yes
    
  4. Перезагрузите службу, чтобы применить изменения:

    systemctl reload postfix
    

Поддержка LDAP в Postfix#

Postfix может использовать каталог Lightweight Directory Access Protocol (LDAP) в качестве источника данных для своих запросов. Это позволяет хранить информацию о почтовой службе в реплицируемой сетевой базе данных с детальными настройками доступа. Используйте несколько почтовых серверов без необходимости копирования их на каждый сервер.

Примечание

На системе должны быть установлены библиотеки LDAP и Make-файлы, используемые при установке Postfix.

Чтобы собрать библиотеки OpenLDAP для использования с Postfix, выполните следующую команду:

% ./configure --without-kerberos --without-cyrus-sasl --without-tls
--without-threads --disable-slapd --disable-slurpd
--disable-debug --disable-shared

Postfix с поддержкой LDAP может использоваться для реализации групповых рассылок, позволяя:

  • разрешать групповые адреса в списки email-адресов участников;

  • получать информацию о пользователях из LDAP;

  • интегрироваться с системами рассылки и фильтрации при дополнительной настройке.

Использование каталога LDAP в качестве таблицы поиска#

Используя сервер LDAP для хранения учетных записей, доменов или псевдонимов, настройте Postfix на использование сервера LDAP в качестве таблицы поиска. Использование LDAP вместо файлов позволяет иметь централизованную базу данных.

Важно

Перед настройкой убедитесь, что на сервере Postfix установлен плагин postfix-ldap.

Для использования каталога LDAP в качестве таблицы поиска:

  1. Настройте параметры поиска в LDAP, создав файл /etc/postfix/ldap-aliases.cf, в котором:

    • Укажите имя хоста сервера LDAP:

      server_host = ldap.example.ru
      

      Где ldap.example.ru - имя хоста сервера.

    • Укажите базовое доменное имя для поиска в LDAP:

      search_base = dc=example,dc=ru
      
  2. Включите источник LDAP как таблицу поиска в файле /etc/postfix/main.cf, добавив:

    virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
    
  3. Перезагрузите службу, чтобы применить изменения:

    systemctl reload postfix
    

Настройка Postfix в качестве исходящего почтового сервера для пересылки писем от авторизованных пользователей#

В данном сценарии пользователи проходят аутентификацию и используют свой адрес электронной почты для отправки писем через SMTP-сервер, настроив Postfix как исходящий почтовый сервер с поддержкой SMTP-аутентификации, шифрования TLS и ограничений по адресу отправителя.

Чтобы настроить Postfix в качестве исходящего почтового сервера:

  1. Отредактируйте файл /etc/postfix/main.cf, добавив следующие строки:

    • Включите аутентификацию SMTP:

      smtpd_sasl_auth_enable = yes
      broken_sasl_auth_clients = yes
      
    • Запретите подключения без TLS:

      smtpd_tls_auth_only = yes
      
    • Разрешите пересылку почты только авторизованным пользователям:

      smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
      
  2. Перезагрузите службу, чтобы применить изменения:

    systemctl reload postfix
    

Настройка Postfix для использования SASL#

Postfix поддерживает аутентификацию по протоколу SMTP на основе Simple Authentication and Security Layer (SASL) (SMTP AUTH), в том числе реализацию Dovecot SASL.

SMTP-сервер Postfix может взаимодействовать с реализацией Dovecot SASL, используя либо UNIX-сокет, либо TCP-сокет. Используйте этот метод, если приложения Postfix и Dovecot запущены на разных машинах.

  1. Настройте Dovecot:

    1.1. Добавьте следующие строки в файл /etc/dovecot/conf.d/10-master.conf:

    service auth {
      unix_listener /var/spool/postfix/private/auth {
        mode = 0660
        user = postfix
        group = postfix
      }
    }
    

    Данный пример предполагает стандартные настройки SMTP-сервера Postfix, включая расположение почтовой очереди в каталоге /var/spool/postfix/ и запуск приложения от пользователя и группы postfix.

    1.2. (Опционально) Настройте Dovecot на прослушивание запросов аутентификации от Postfix через TCP:

    service auth {
      inet_listener {
          port = <port_number>
      }
    }
    

    Где <port_number> - номер порта.

    1.3. Укажите метод, который почтовой клиент будет использовать для аутентификации в Dovecot. Отредактируйте параметр auth_mechanisms в файле /etc/dovecot/conf.d/10-auth.conf:

    auth_mechanisms = plain login
    
  2. Настройте Postfix, изменив файл /etc/postfix/main.cf. Для этого выполните следующие шаги:

    2.1. Включите аутентификацию SMTP на SMTP-сервере Postfix:

    smtpd_sasl_auth_enable = yes
    

    2.2. Укажите использование реализации Dovecot SASL для аутентификации SMTP:

    smtpd_sasl_type = dovecot
    

    2.3. Укажите путь к службе аутентификации относительно каталога очереди Postfix:

    smtpd_sasl_path = private/auth
    

    Этот шаг использует UNIX-доменные сокеты для взаимодействия между Postfix и Dovecot.

    Чтобы настроить Postfix на использование Dovecot, расположенного на другой машине (если используется TCP-соединение), укажите конфигурационные параметры следующего вида:

    smtpd_sasl_path = inet: <IP_address> : <port_number>
    

    Где:

    • <IP_address> - IP-адрес машины с Dovecot;

    • <port_number> - номер порта, указанный в файле /etc/dovecot/conf.d/10-master.conf.

    2.4. Укажите механизмы SASL, которые SMTP-сервер Postfix предоставляет клиентам:

    smtpd_sasl_security_options = noanonymous, noplaintext
    smtpd_sasl_tls_security_options = noanonymous
    

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

Доставка почты из Postfix в Dovecot на одном хосте#

Настройте Postfix на доставку входящей почты в Dovecot, запущенный на том же хосте, с использованием протокола LMTP через UNIX-сокет. Данный сокет обеспечивает прямое взаимодействие между Postfix и Dovecot на локальной машине.

  1. Настройте Postfix на использование протокола LMTP и UNIX-доменного сокета для доставки почты в Dovecot в файле /etc/postfix/main.cf:

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

      virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
      
    • Если требуются обычные (не виртуальные) почтовые ящики, добавьте следующую строку:

      mailbox_transport = lmtp:unix:/var/run/dovecot/lmtp
      
  2. Перезагрузите службу, чтобы применить изменения:

    systemctl reload postfix
    

Доставка почты из Postfix в Dovecot на другом хосте#

Установите безопасное соединение между почтовым сервером Postfix и сервером доставки Dovecot по сети. Для этого настройте службу LMTP на использование сетевого сокета для передачи почты между серверами. По умолчанию протокол LMTP не шифруется. Однако если настроить шифрование TLS, Dovecot автоматически применяет те же параметры для службы LMTP. После этого SMTP-серверы могут подключаться к ней с использованием команды STARTTLS через LMTP.

  1. Настройте Postfix на использование протокола LMTP и сетевого (INET) сокета для доставки почты в Dovecot в файле /etc/postfix/main.cf, добавив следующую строку:

    mailbox_transport = lmtp:inet:<dovecot_host>:<port>
    

    Где:

    • <dovecot_host> - IP-адрес или имя хоста сервера Dovecot;

    • <port> - номер порта службы LMTP.

  2. Перезагрузите службу, чтобы применить изменения:

    systemctl reload postfix
    

Архитектура Postfix#

Данный раздел описывает внутреннюю структуру и основные принципы построения почтового сервера Postfix, включая ключевые компоненты системы и их взаимодействие.

Получение почты Postfix#

../../_images/receives.svg

Диаграмма. Получение почты Postfix

Когда сообщение поступает в почтовую систему Postfix, его первым пунктом назначения становится очередь входящих сообщений (incoming queue, «входящая очередь»). Почта из сети поступает через серверы smtpd или qmqpd. Данные серверы удаляют протокольную обертку SMTP или QMQP, выполняют базовые проверки для защиты Postfix и передают отправителя, получателей и содержимое письма серверу cleanup.

Локальные письма принимаются с помощью совместимой команды sendmail и помещаются в очередь maildrop привилегированной командой postdrop. Такая схема работает даже если почтовая система Postfix не запущена. Локальный сервер pickup забирает письма из локальной очереди, выполняет базовые проверки для защиты и передает отправителя, получателей и содержимое письма серверу cleanup. Почта из внутренних источников передается напрямую серверу cleanup. Сервер cleanup выполняет последнюю стадию обработки перед помещением письма в очередь.

Сервер trivial-rewrite переписывает адреса в стандартный формат user@fully.qualified.domain.

Доставка почты Postfix#

../../_images/delivers.svg

Диаграмма. Доставка почты Postfix

После того как письмо попадает во входящую очередь, начинается процесс его доставки. Диспетчер очередей, сервер qmgr, — центральный элемент доставки почты в Postfix. Он взаимодействует с агентами доставки smtp, lmtp, local, virtual, pipe, discard или error. Он отправляет им запросы на доставку для одного или нескольких адресов получателей. Агенты discard и error — специальные: они либо отбрасывают, либо возвращают все письма и не показаны на схеме.

Диспетчер очередей поддерживает ограниченную активную очередь (active queue) с письмами, которые он открыл для доставки. Активная очередь действует как ограниченное окно на потенциально большие входящие или отложенные очереди. Это предотвращает исчерпание памяти диспетчером очередей при высокой нагрузке. Также ведет отдельную очередь deferred для писем, которые временно не могут быть доставлены, чтобы большой объем отложенной почты не замедлял обычную работу очередей.

Сервер trivial-rewrite определяет, к какому классу (локальному или удаленному) относится каждый адрес получателя.

Клиент smtp ищет список SMTP-серверов для получателей в запросе на доставку, сортирует его по приоритету и последовательно пытается подключиться к каждому серверу, пока не доставит или не получит ответ от всех получателей. Он инкапсулирует данные с отправителем, получателями и содержимым письма согласно протоколу SMTP, включая преобразование тела сообщения из 8-битного MIME в 7-битное кодирование, но не включая кодирование заголовков по RFC 2047.

Клиент lmtp использует протокол, аналогичный SMTP, который оптимизирован для доставки на серверы почтовых ящиков. Преимущество такой настройки в том, что один сервер Postfix может обслуживать несколько серверов ящиков по LMTP, и наоборот — один сервер ящиков может принимать почту по LMTP от нескольких серверов Postfix.

Агент доставки local поддерживает почтовые ящики в стиле UNIX, файлы maildir, совместимые с qmail, базы данных общесистемных псевдонимов в стиле Sendmail и файлы пересылки для каждого пользователя .forward в стиле Sendmail. Несколько локальных агентов доставки могут запускаться параллельно, но параллельная доставка одному и тому же пользователю обычно ограничена.

Агент доставки virtual — это упрощенный агент, доставляющий только в почтовые ящики в стиле UNIX или в файлы maildir, совместимые с qmail. Данный агент может доставлять почту для нескольких доменов. Это делает его удобным для хостинга множества маленьких доменов на одном сервере.

Модуль pipe — это интерфейс для отправки почты в другие почтовые системы (входной интерфейс — команда sendmail). Интерфейс совместим с UNIX: pipe передает информацию дочернему процессу через командную строку, переменные окружения и стандартный поток ввода, и ожидает код завершения, определенный в <sysexits.h>.

Внутренние процессы Postfix#

Сервер master следит за работоспособностью всей почтовой системы Postfix. Обычно запускается при загрузке системы командой postfix start и работает до ее выключения. master отвечает за запуск серверных процессов для приема и доставки почты, а также за перезапуск процессов, завершившихся аварийно. Он также контролирует ограничения на количество запущенных процессов, заданные в файле конфигурации /etc/postfix/master.cf.cf.

../../_images/behind.svg

Диаграмма. Иерархия процессов при запуске Postfix

Сервер anvil реализует ограничение на количество подключений и запросов от клиентов для всех серверов smtpd.

Службы bounce, defer и trace ведут собственное дерево каталогов очередей с файлами журнала на каждое письмо. Postfix использует эту информацию для отправки уведомлений отправителю о статусе доставки: failed («не доставлено»), delayed («задержано») или success («доставлено»).

Серверы flush ведут журналы по каждому получателю. Это позволяет вернуть выбранные файлы из очереди deferred обратно в incoming и запросить их доставку.

Серверы proxymap предоставляют Postfix-процессам сервис поиска по таблицам (как для чтения, так и для записи). Это позволяет обойти ограничения chroot, уменьшить количество открытых таблиц за счет их совместного использования несколькими процессами и реализовать таблицы с одним обновляющим процессом.

Сервер scache управляет кешем соединений для клиента smtp. Клиент smtp может повторно использовать TLS-зашифрованное соединение (при включенной опции smtp_tls_connection_reuse = yes).

../../_images/withouttlsproxy.svg

Диаграмма. Управление кешем соединений для клиента

../../_images/tlsproxy.svg

Диаграмма. Повторное использование соединения, зашифрованного по протоколу TLS

Серверы showq отображают состояние очереди Postfix. Эта служба выполняет работу для команд mailq и postqueue.

../../_images/postfixqueuedraw.svg

Диаграмма. Очередь Postfix

Серверы spawn по запросу запускают внешние команды, подключая клиент через сокет или FIFO к стандартным потокам ввода, вывода и ошибок команды.

Сервер tlsmgr запускается при включении TLS (Transport Layer Security, ранее SSL) в клиенте smtp или сервере smtpd. У него две основные задачи:

  • Поддержка генератора псевдослучайных чисел (PRNG), используемого для инициализации TLS-движков в процессах smtp или smtpd. Состояние PRNG периодически сохраняется в файл и считывается при запуске tlsmgr.

  • Управление кешами сессионных ключей TLS для клиента smtp или сервера smtpd.

Сервер verify проверяет, можно ли осуществить доставку по адресу отправителя или получателя, до того как smtpd примет письмо. verify проверяет кеш с результатами проверки адресов. Если результат не найден, сервер помещает «пробное» письмо в очередь Postfix и обрабатывает статус от агента доставки или диспетчера очередей.

Сервер postscreen может быть размещен «перед» процессами smtpd. Его задача — принимать сетевые подключения и определять, каким SMTP-клиентам разрешено взаимодействовать с Postfix.

Установка Postfix#

Чтобы установить Postfix, используйте встроенный в ОС менеджер пакетов dnf:

dnf install postfix

Запуск Postfix#

Чтобы запустить Postfix, выполните команду:

systemctl start postfix

Для проверки статуса Postfix используйте один из следующих вариантов:

  • проверка статуса с помощью systemctl:

    systemctl status postfix
    
  • проверка статуса альтернативным способом:

    postfix status
    

Для активации автозапуска Postfix при загрузке ОС выполните следующую команду:

systemctl enable postfix

Для проверки версии введите:

postconf mail_version

Управление Postfix#

Список основных служебных команд, используемых для управления Postfix, представлен в таблице ниже.

Команды Postfix#

Команда

Описание

postfix

Управляет работой почтовой системы: запуск, остановка, перезапуск, администрирование. Доступна пользователю с административными полномочиями

postalias

Управляет базами данных псевдонимов Postfix aliases

postcat

Отображает содержимое файлов очереди Postfix

postconf

Показывает или изменяет параметры /etc/postfix/main.cf, а также отображает информацию о поддерживаемых методах блокировки файлов и типах таблиц поиска

postdrop

Размещает почту в каталоге maildrop

postkick

Предоставляет доступ к внутренним каналам связи Postfix

postlock

Обеспечивает блокировку почтовых ящиков в Postfix для использования в скриптах

postlog

Предоставляет логирование в стиле Postfix

postmap

Управляет таблицами поиска Postfix (например, canonical, virtual)

postmulti

Позволяет создавать, удалять и управлять (запуск, остановка) несколькими экземплярами Postfix

postqueue

Позволяет просматривать или очищать очереди

postsuper

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