You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 KiB

Почтовая система Postfix + Dovecot

Рассматрим структуру почтовой системы, в которой Postfix и Dovecot имеют доступ к списку пользователей и работают параллельно, разделяя доступ к почтовым ящикам пользователей.

В начале следует углубиться в теорию для понимания механизмов работы Postfix. Рассмотрим архитектуру Postfix, что такое классы адресов и какие бывают типы доменов. Затем рассмотрим классы адресов с точки зрения менеджмента почтовых ящиков. В конце разберёмся какие проблемы есть у почтовых серверов из-за спама, и как повысить надежность доставки писем вашим почтовым сервером.

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

Как Postfix получает почту

                           trivial-rewrite(8)
                                  ▲
Network ───► smtpd(8) ──┐         │
                        │         ▼
Network ───► qmqpd(8) ──┼───► cleanup(8) ───► incoming
                        │
maildrop ──► pickup(8) ─┘
  ▲
  │
postdrop(1)
  ▲
  │
sendmail(1)
  ▲
  │
Local

Когда сообщение попадает в почтовую систему Postfix, первой остановкой внутри неё является очередь входящих сообщений incoming. На рисунке показаны основные процессы, связанные с новой почтой. Имена, за которыми следует цифра, представляют собой команды или программы сервера Postfix, а непронумерованные имена - очереди Postfix.

smtpd(8), qmqpd(8), pickup(8)

Почта из сети поступает в Postfix через сервисы smtpd(8) или qmqpd(8). Эти сервисы удаляют инкапсуляцию протокола SMTP или QMQP, выполняют некоторые проверки на корректность для защиты Postfix и передают отправителя, получателей и содержимое сообщения сервис cleanup(8). Сервис smtpd(8) может быть настроен на блокировку нежелательной почты, как описано в документе SMTPD_ACCESS_README.

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

cleanup(8)

Почта из внутренних источников передается непосредственно сервису cleanup(8). Эти источники не показаны на рисунке и включают в себя: почту, пересылаемую агентом доставки local(8), сообщения, возвращаемые отправителю сервером bounce(8), и уведомления почтмейстера о проблемах с Postfix.

Сервер cleanup(8) реализует финальную стадию обработки перед постановкой почты в очередь. Он добавляет недостающие заголовки From: и другие сообщения, а также преобразует адреса, как описано в документе ADDRESS_REWRITING_README. При желании сервер cleanup(8) можно настроить для облегченной проверки содержимого с помощью регулярных выражений, как описано в документе BUILTIN_FILTER_README. Сервер cleanup(8) помещает результат в виде одного файла во входящую очередь incoming и уведомляет менеджер очередей qmgr(8) о прибытии новой почты.

trivial-rewrite(8)

Сервис trivial-rewrite(8) перезаписывает адреса в стандартную форму «user@complete.qualified.domain», как описано в документе ADDRESS_REWRITING_README. В настоящее время Postfix не реализует язык перезаписи, но многое можно сделать с помощью поиска по таблицам и, при необходимости, регулярных выражений.

Конфигурация сервисов участвующих в приёме почты в файле master.cf:

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
#628       inet  n       -       y       -       -       qmqpd
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
rewrite   unix  -       -       y       -       -       trivial-rewrite

Как Postfix отправляет почту

incoming     trivial-rewrite(8)  ┌─ smtp(8) ────► Network
   │                ▲            │
   │                │            ├─ lmtp(8) ────► Network
   ▼                ▼            │
active ─────────► qmgr(8) ───────┼─ local(8) ───► File, command
   ▲                             │
   │                             ├─ virtual(8) ─► File
   ▼                             │
deferred                         └─ pipe(8) ────► Command

Как только сообщение достигнет входящей очереди, следующим шагом будет его доставка. На рисунке показаны основные компоненты доставки почты Postfix. Имена, за которыми следует номер, представляют собой команды Postfix или сервисы, а ненумерованные имена представляют очереди Postfix.

qmgr(8)

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

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

Диспетчер очередей поддерживает отдельную отложенную очередь deferred для почты, которая не может быть доставлена, чтобы большой объем невыполненной почты не замедлял нормальный доступ к очереди. Стратегия администратора очередей в отношении отложенных попыток доставки почты описана в документах QSHAPE_README и TUNING_README.

trivial-rewrite(8)

Сервер trivial-rewrite(8) разрешает каждый адрес получателя в соответствии с его локальным или удаленным классом адреса, как определено в документе ADDRESS_CLASS_README. Дополнительную информацию о маршрутизации можно указать с помощью дополнительной таблицы transport(5). Сервер trivial-rewrite(8) дополнительно запрашивает таблицу relocated(5) о получателях, чей адрес изменился; Для таких получателей письмо возвращается отправителю с объяснением.

smtp(8)

Клиент smtp(8) просматривает список почтовых обменников для хоста назначения, сортирует список по предпочтениям и пробует по очереди каждый сервер, пока не найдет сервер, который отвечает. Затем он инкапсулирует отправителя, получателя и содержимое сообщения в соответствии с требованиями протокола SMTP; это включает преобразование 8-битного MIME в 7-битное кодирование.

lmtp(8)

Клиент lmtp(8) использует протокол, аналогичный SMTP, который оптимизирован для доставки на серверы почтовых ящиков, такие как Cyrus. Преимущество этой настройки состоит в том, что одна машина Postfix может обслуживать несколько серверов почтовых ящиков через LMTP. Верно и обратное: один сервер почтовых ящиков может подключаться по LMTP к нескольким машинам Postfix.

local(8)

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

Агент доставки local(8) имеет несолько альтернативных формы локальной доставки. Вы можете настроить его:

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

virtual(8)

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

pipe(8)

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

Конфигурация сервисов участвующих в отправке почты в файле master.cf:

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
qmgr      unix  n       -       n       300     1       qmgr
error     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
rewrite   unix  -       -       y       -       -       trivial-rewrite
smtp      unix  -       -       y       -       -       smtp
lmtp      unix  -       -       y       -       -       lmtp
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

Объединённая схема:

                           trivial-rewrite(8)
                                  ▲
Network ───► smtpd(8) ──┐         │
                        │         ▼
Network ───► qmqpd(8) ──┼───► cleanup(8) ───► incoming      trivial-rewrite(8)  ┌─ smtp(8) ────► Network
                        │                        │                 ▲            │
maildrop ──► pickup(8) ─┘                        │                 │            ├─ lmtp(8) ────► Network
  ▲                                              ▼                 ▼            │
  │                                           active ──────────► qmgr(8) ───────┼─ local(8) ───► File, command
postdrop(1)                                      ▲                              │
  ▲                                              │                              ├─ virtual(8) ─► File
  │                                              ▼                              │
sendmail(1)                                   deferred                          └─ pipe(8) ────► Command
  ▲
  │
Local

Какое нам дело до классов адресов?

Классы адресов опеределяют то, как Postfix принимает решения какие письма принимать и куда их доставлять. Класс адреса определяется тремя вещами:

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

По умолчанию определёны следующие классы:

  1. local domain class (локальные почтовые ящики),
  2. virtual mailbox domain class (виртуальные почтовые ящики),
  3. virtual alias domain class (виртуальные псевдонимы),
  4. relay domain class (адреса транзитных smtp серверов),
  5. default domain class (адреса по умолчанию).

Можно считать, что класс - это правило, применяемое к полю Кому: конверта элекронного письма. Правило имеет вид:

user@domain -> agent(email),

которое применяется, если истинно, что:

user ∈ USERS,
domain ∈ DOMAINS,
agent ∈ AGENTS.

Особенности. Для локальных (local domain class) и виртуальных (virtual mailbox class) почтовых ящиков пустое множество в USER = {} означает, что проверка пользователей отключена, то есть подходит любое имя пользователя. Для разрешения псевдонимов в адреса в классе virtual alias domain class (виртуальные псевдонимы) агент не используется AGENTS = {}.

1. local domain class (domain ∈ mydestination inet_interfaces proxy_interfaces)

Адрес попадает в данный класс, если его домен или его ip адрес совпадает с одним из mydestination, inet_interfaces или proxy_interfaces.

Класс предназначен для доставки писем до почтовых ящиков пользователей имеющих аккаунты в UNIX системе. Имена user определяются параметром local_recipient_maps. По умолчанию это /etc/passwd и /etc/aliases.

agent = local 
USERS = /etc/passwd  /etc/aliases
DOMAINS = mydestination  inet_interfaces  proxy_interfaces
AGENTS = service names ∈ /etc/postfix/master.cf

2. virtual mailbox domain class (domain ∈ virtual_mailbox_domains)

Адреса почтовых ящиков вида user@domain ищутся в одной или нескольких таблицах указанных в параметре virtual_mailbox_maps. Доставка до почтовых ящиков пользователей в доменах, чьи пользователи не имеют аккаунтов в UNIX системе.

agent = virtual 
USERS = virtual_mailbox_maps
DOMAINS = virtual_mailbox_domains
AGENTS = service names ∈ /etc/postfix/master.cf

3. virtual alias domain class (виртуальные псевдонимы)

Назначение: хостинговые домены, в которых каждый адрес получателя псевдонимом привязан к учётной записи локальной UNIX-системы или к удаленному адресу. Пример виртуального псевдонима приведен в файле VIRTUAL_README.

Доменные имена перечисляются в virtual_alias_domains. Для совместимости с Postfix 1.1 по умолчанию используется значение $virtual_alias_maps.

Действительные адреса получателей перечисляются в параметре virtual_alias_maps. SMTP-сервер Postfix отклоняет недействительных получателей с сообщением "Пользователь неизвестен в таблице виртуальных псевдонимов". Для совместимости с Postfix 1.1 по умолчанию используется значение $virtual_maps.

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

agent = 
USERS = virtual_alias_maps
DOMAINS = virtual_alias_domains
AGENTS = {}

4. relay domain class (адреса доменов-ретранляторов)

Назначение: переадресация почты на удаленные адреса, в которых ваша система указана в качестве основного или резервного MX-хоста. Для обсуждения основных деталей конфигурации см. документ BASIC_CONFIGURATION_README. Обсуждение различий между каноническими доменами, размещенными доменами и другими доменами см. в файле VIRTUAL_README.

Доменные имена перечисляются с помощью параметра relay_domains.

Действительные адреса получателей перечисляются с помощью параметра relay_recipient_maps. SMTP-сервер Postfix отклоняет недействительных получателей с сообщением "User unknown in relay recipient table". Если значение этого параметра пустое, то SMTP-сервер Postfix принимает всех получателей для доменов, перечисленных в параметре relay_domains.

Транспорт доставки почты задается параметром relay_transport. По умолчанию используется значение relay, которое является клоном агента доставки smtp(8).

agent = relay 
USERS = relay_recipient_maps
DOMAINS = relay_domains
AGENTS = service names ∈ /etc/postfix/master.cf

5. default domain class (адреса по умолчанию)

Назначение: пересылка почты в Интернет от имени авторизованных клиентов. Для обсуждения основных деталей конфигурации см. файл BASIC_CONFIGURATION_README. О различиях между каноническими доменами, размещенными доменами и другими доменами см. файл VIRTUAL_README.

У этого класса нет таблицы доменов назначения.

Этот класс не имеет таблицы действительных адресов получателей.

Транспорт доставки почты задается параметром default_transport. По умолчанию используется значение smtp для доставки с помощью агента доставки smtp(8).

agent = smtp
USERS = {}
DOMAINS = {}
AGENTS = service names ∈ /etc/postfix/master.cf

Типы доменов

Большинство систем Postfix являются конечным пунктом назначения только для нескольких доменных имен. К ним относятся имена хостов и [IP-адреса] машин, на которых работает Postfix, а иногда и родительский домен имени хоста. Эти домены называются каноническими ( canonical ) доменами. Обычно они реализуются с помощью класса адресов локального домена Postfix, как определено в файле ADDRESS_CLASS_README.

Помимо канонических доменов, Postfix может быть настроен на то, чтобы быть конечным адресатом для любого количества дополнительных доменов. Такие домены называются размещенными ( hosted ), поскольку они не связаны непосредственно с именем самой машины. Размещенные домены обычно реализуются с помощью класса виртуального псевдонима домена и/или виртуального домена почтовых ящиков.

Но подождите! Это еще не все. Postfix может быть настроен как резервный MX-хост для других доменов. В этом случае Postfix не будет являться резервным хостом MX для этих доменов. Он просто ставит почту в очередь, когда основной MX-хост работает, и пересылает почту, когда основной MX-хост не работает. Эта функция реализуется с помощью класса адресов доменов-ретрансляторов, как определено в файле ADDRESS_CLASS_README.

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

Таблица. 1 Сводная таблица классов почтовых адресов

1. Локальные почтовые ящики 2. Виртуальные почтовые ящики 3. Виртуальные псевдонимы 4. Адреса доменов-ретранляторов 5. Класс доменных адресов по умолчанию
agent local virtual доставляются после отображения адресов в 1 или 2 relay smtp
USERS /etc/passwd, /etc/aliases virtual_mailbox_maps virtual_alias_maps relay_recipient_maps -
DOMAINS mydestination, inet_interfaces, proxy_interfaces virtual_mailbox_domains virtual_alias_domains relay_domains -
AGENTS /etc/postfix/master.cf /etc/postfix/master.cf /etc/postfix/master.cf /etc/postfix/master.cf /etc/postfix/master.cf

Первая настройка

Первые параметры, представляющие интерес, определяют идентификацию и роль машины в сети. Заполним таблицу:

Таблица 2. Список вопросов перед настройкой почтового сервера

Вопрос Ответ Параметр
Куда указывает MX запись? mail.stud12.myoffice.ru MX запись DNS
Какое доменное имя у машины с Postfix? mail.stud12.myoffice.ru myhostname
Какой домен является родительским? stud12.myoffice.ru mydomain
Письма из которой сети будут приниматься без авторизации? 127.0.0.0/8 mynetworks
Какое доменное имя использовать в исходящей почте? stud12.myoffice.ru myorigin = myhostname или mydomain
Для каких доменов принимать почту и доставлять локально? stud12.myoffice.ru mydestination = $myhostname localhost.$mydomain localhost
С каких клиентов передавать почту?
В какие пункты назначения передавать почту?
Какой метод доставки использовать: прямой или непрямой? прямой relay or proxy not used?

Параметр mydomain задает родительский домен myhostname. По умолчанию он получается из myhostname путем удаления первой части (за исключением случаев, когда в результате не будет получен домен верхнего уровня ). И наоборот, если вы укажете mydomain в файле main.cf, то Postfix будет использовать его значение для генерации полностью определенного значения по умолчанию для параметра myhostname.

Таблица 3. Пример вычисления значений myhostname, mydomain

myhostname mydomain
www.stud12.myoffice.space -> ?
stud12.myoffice.space -> myoffice.space
myoffice.space -> myoffice.space
localhost.myoffice.space <- myoffice.space

Рекомендуется сопоставить myhostname с тем, что есть в PTR-записи, и проверить, что PTR имеет соответствующую A-запись.

Параметр myorigin задает домен, который отображается в почте, размещенной на этой машине. По умолчанию используется имя локальной машины, myhostname, которое по умолчанию равно имени машины. Если только вы не используете действительно небольшой сайт, то, вероятно, следует изменить его на mydomain, которое по умолчанию соответствует родительскому домену имени машины.

Параметр mydestination определяет, на какие домены эта машина будет доставлять локально, а не пересылать на другую машину. По умолчанию принимается почта для самой машины. О том, как настроить Postfix для размещенных доменов, см. файл VIRTUAL_README. (Правда в конфигурационном файле main.cf.proto есть комментарий: "Вы ДОЛЖНЫ указать $myhostname в начале текста. Это требование 581 RFC. Самому Postfix безразлично.")

Пример эволюции конфигурации Postfix - от простого к сложному.

Несколько доменов в mydestiantion

У вас есть почтовый сервер обслуживающий один домен myoffice.ru. Стоит ли заводить ещё один почтовый сервер, если количество доменов увеличилось (появился myoffice.space)? Совсем не обязательно.

Самый простой способ размещения дополнительного домена - это добавить имя домена к доменам, перечисленным в конфигурационном параметре Postfix mydestination, и добавить имена пользователей в файл паролей UNIX /etc/passwd. При таком подходе не делается различий между каноническими ( canonical ) и размещенными ( hosted ) доменами. Каждое имя пользователя может получать почту в каждом домене.

myhostname = stud12.myoffice.ru
mydomain = stud12.myoffice.ru
mydestination = stud12.myoffice.space $myhostname localhost.$mydomain

Ограничениями данного подхода являются:

  • Полное отсутствие разделения: почта для info@stud12.myoffice.ru доставляется на ту же системную учетную запись UNIX, что и почта для info@stud12.myoffice.space.
  • При наличии пользователей в файле паролей UNIX администрирование большого числа пользователей становится неудобным.

Виртуальные псевдонимы

При использовании подхода, описанного в данном разделе, каждый размещаемый домен может иметь свой собственный адрес электронной почты info@stud12.myoffice.ru и info@stud12.myoffice.space. Однако при этом по-прежнему используются системные учетные записи UNIX для доставки локальных почтовых ящиков.

При использовании виртуальных доменов-псевдонимов каждый размещаемый адрес привязывается к локальной учетной записи UNIX-системы или к удаленному адресу. Они не обязательно должны ссылаться на системные учетные записи UNIX на вашей машине. В приведенном ниже примере показано, как использовать этот механизм для домена stud12.myoffice.space.

1 /etc/postfix/main.cf:
2     virtual_alias_domains = stud12.myoffice.space ...other hosted domains...
3     virtual_alias_maps = hash:/etc/postfix/virtual
5 /etc/postfix/virtual:
6     postmaster@stud12.myoffice.space postmaster
7     info@stud12.myoffice.space      joe
8     sales@stud12.myoffice.space      jane
9     # Uncomment entry below to implement a catch-all address
10     # @stud12.myoffice.space         jim
11     ...virtual aliases for more domains...

Виртуальные псевдонимы решает одну проблему: он позволяет каждому домену иметь свой собственный почтовый адрес. Например это даёт возможность работать с ящиками info@stud12.myoffice.ru и info@stud12.myoffice.space разным пользователям.

Но при этом остается один недостаток: каждый виртуальный адрес привязывается к системной учетной записи UNIX. При добавлении большего количества виртуальных адресов увеличивается и количество системных учетных записей UNIX. В следующем разделе эта проблема будет устранена.

Виртуальные почтовые ящики

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

С помощью агента доставки Postfix virtual(8) каждый адрес получателя может иметь свой собственный виртуальный почтовый ящик. В отличие от доменов виртуальных псевдонимов, домены виртуальных почтовых ящиков не нуждаются в неуклюжей трансляции из каждого адреса получателя в другой адрес, а владельцам адресов виртуальных почтовых ящиков не нужно иметь системную учетную запись UNIX.

Агент доставки виртуальных почтовых ящиков Postfix virtual(8) ищет путь к почтовому ящику пользователя, uid и gid в отдельных таблицах, которые перебираются вместе с почтовым адресом получателя. Доставка в стиле Maildir включается путем завершения имени почтового ящика символом "/".

Если идея нескольких таблиц покажется вам неудобной, помните, что вы можете перенести информацию (после того как она заработает) в базу данных SQL. Если вы пойдете по этому пути, обязательно ознакомьтесь с разделом "local files versus databases" в верхней части документа VIRTUAL_README.

Пример конфигурации:

1 /etc/postfix/main.cf:
2     virtual_mailbox_domains = myoffice.space ...more domains...
3     virtual_mailbox_base = /var/mail/vhosts
4     virtual_mailbox_maps = hash:/etc/postfix/vmailbox
5     virtual_minimum_uid = 100
6     virtual_uid_maps = static:5000
7     virtual_gid_maps = static:5000
8     virtual_alias_maps = hash:/etc/postfix/virtual
10 /etc/postfix/vmailbox:
11     info@myoffice.space    myoffice.space/info
12     sales@myoffice.space   myoffice.space/sales/
13     # Comment out the entry below to implement a catch-all.
14     # @myoffice.space      myoffice.space/catchall
15     ...virtual mailboxes for more domains...
17 /etc/postfix/virtual:
18     postmaster@myoffice.space postmaster
  • Строка 2: Параметр virtual_mailbox_domains указывает Postfix, что myoffice.space является так называемым виртуальным почтовым доменом. Если опустить эту настройку, то Postfix будет отклонять почту (relay access denied) или не сможет ее доставить (почта для myoffice.space зацикливается на себе).

НИКОГДА не указывайте виртуальное доменное имя MAILBOX в качестве домена mydestination!
НИКОГДА не указывайте имя виртуального домена MAILBOX в качестве виртуального домена ALIAS!

  • Строка 3: Параметр virtual_mailbox_base задает префикс для всех имен путей виртуальных почтовых ящиков. Это защитный механизм на случай ошибки. Он предотвращает доставку почты по всей файловой системе.

  • Строки 4, 10-15: Параметр virtual_mailbox_maps задает таблицу поиска с именами почтовых ящиков (или maildir), индексированных по виртуальному почтовому адресу. В данном примере почта для info@myoffice.space отправляется в почтовый ящик по адресу /var/mail/vhosts/myoffice.space/info, а почта для sales@myoffice.space - в maildir, расположенный по адресу /var/mail/vhosts/myoffice.space/sales/.

  • Строка 5: virtual_minimum_uid задает нижнюю границу UID владельца почтового ящика или maildir. Это защитный механизм на случай ошибки. Он предотвращает запись почты в чувствительные файлы.

  • Строки 6, 7: Параметры virtual_uid_maps и virtual_gid_maps указывают, что все виртуальные почтовые ящики принадлежат фиксированным uid и gid 5000. Если это не то, что нужно, укажите таблицы поиска, которые ищут по почтовому адресу получателя.

  • Строка 14: Закомментированная запись (текст после #) показывает, как можно реализовать универсальный адрес виртуального почтового ящика. Будьте готовы к получению большого количества спама, а также отбитого спама, отправленного от имени anything@myoffice.space.

НИКОГДА не помещайте виртуальный MAILBOX wild-card в виртуальный файл ALIAS!!!

  • Строки 8, 17, 18: Как видите, можно смешивать виртуальные псевдонимы с виртуальными почтовыми ящиками. Мы используем эту возможность для перенаправления почты для адреса postmaster сайта myoffice.space на локальный адрес postmaster. Аналогичный механизм можно использовать и для перенаправления адреса на удаленный адрес.

  • Строка 18: В данном примере предполагается, что в файле main.cf под параметром mydestination указан $myorigin. Если это не так, укажите явное доменное имя в правой части записей таблицы виртуальных псевдонимов, иначе почта будет отправляться не на тот домен.

Как увеличить вероятность доставки почты с вашего почтового сервера?

Чеклист

Вопрос Ответ
0. Внесена PTR запись на стороне провайдера _______
1. Внесена MX запись на стороне DNS _______
2. Настроен SPF на стороне почтового сервера и на стороне DNS _______
3. Настроен DKIM на стороне почтового сервера и на стороне DNS _______
4. Настроен DMARC на стороне почтового сервера и на стороне DNS _______
5. Настроен обмен сообщениями по TLS с другими серверами _______
6. Получен и настроен сертификат домена от центра сертификации _______

Рекомендуется использовать TLS и избегать STARTTLS. Анекдот про то, как выбирается протокол шифрования в STARTTLS:

А: Давай по SSL 2.0.
Б: Могу только по SSL 3.0.
А: Тогда предлагаю по TLS 1.0.
Б: У меня TLS 1.1.
А: А TSL 1.2 нет?
Б: Могу без шифрования
А: Договорились

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

Dovecot

Для безопасного подключения клиентов к своим почтовым ящикам по сети требуется сервер, который обеспечивает авторизацию пользователя, установку безопасного соединения. Как администратор вы можете организовать подключение по ssh, но это очень не удобно, особенно с мобильных устройств. Удобнее использовать графический почтовый клиент общающийся по протоколу POP3 или IMAP. Одной из широко распространённых открытых реализаций является сервера для общения с почтовыми клиентами является Dovecot.

Источники:

  1. https://habr.com/ru/articles/258279/
  2. https://github.com/vdukhovni/postfix/tree/master/postfix/README_FILES
  3. https://github.com/vdukhovni/postfix