Сведения о документе

Электронная почта (postfix)

Михаил Забалуев


Сервер электронной почты postfix позволяет организовать обмен электронной почтой с Интернет и внутри локальной сети. postfix рекомендуется к установке в любой конфигурации ALT Linux. Это объясняется тем, что в UNIX-подобных системах возможность отправлять почту с помощью вызова команды из командой оболочки практически обязательна. Некоторые программы (например, служба исполнения заданий по расписанию crond) пользуются этим для отправки сообщений пользователям.

Рекомендуется настраивать систему таким образом, чтобы доставкой всей электронной почты, проходящей через машину, занималась служба MTA (Mail Transport Agent), в нашем случае  — postfix. Хотя многие почтовые программы способны отправлять сообщения на удалённый SMTP-сервер, имеет смысл поручить и эту задачу системному серверу электронной почты, чтобы не было необходимости следить за отсылкой отправленных писем.

Помимо postfix существуют и другие популярные реализации MTA, например, qmail, exim и даже ветеран Интернета Sendmail, хотя последний сейчас используется всё реже, поскольку неоправданно сложен в настройке. Однако по разным причинам, включая соображения безопасности, в любом дистрибутиве ALT Linux по умолчанию в качестве MTA предлагается postfix.

В данном руководстве мы ограничимся рекомендациями по настройке postfix для нескольких типичных ситуаций. Более полные сведения можно получить из превосходной документации на английском языке, которая входит в состав пакета postfix, документация в формате HTML размещена в отдельном пакете — postfix-html.

Работа в режиме SMTP-сервера

Обратите внимание, что по умолчанию после установки postfix не работает в режиме SMTP-сервера. Для того, чтобы принимать сообщения по протоколу SMTP или ESMTP, как извне так и локально, необходимо переключить службу postfix в режим работы server командой control postfix server. По умолчанию после установки служба postfix находится в режиме local, в котором postfix не принимает соединений из сети, ограничиваясь приёмом локальных соединений посредством сокетов семейства UNIX (UNIX-domain socket). Для большинства рабочих станций работа в режиме SMTP-сервера не требуется (и нежелательна с точки зрения безопасности), а в качестве SMTP-сервера должен использоваться какой-то внешний узел сети.

Пакеты postfix

Базовый RPM-пакет для установки сервера postfix в ALT Linux носит, как нетрудно догадаться, имя postfix. Ряд дополнений, расширяющих возможности postfix, выделены в отдельные пакеты, полный список которых можно получить командой apt-cache search ^postfix-.

Конфигурационные файлы

Файлы настройки postfix располагаются в каталоге /etc/postfix. Основные параметры определяются в файле main.cf; в частности, все параметры, о которых говорится далее в этом разделе, устанавливаются именно в этом файле, остальные случаи оговариваются специально.

Для простоты ориентации в настройке postfix в файле main.cf указываются только параметры, выставленные администратором системы, плюс некоторые из значений по умолчанию, которые администратору с большой вероятностью нужно будет изменить. Значения по умолчанию для всех остальных параметров перечислены в файле main.cf.default (этот файл не следует редактировать, он служит только для справок). Довольно полный список параметров с развёрнутыми комментариями и примерами приведён в файле main.cf.dist, а наиболее полную информацию по всем возможным параметрам следует искать в руководстве postconf(5).

Обратите внимание, что если вы изменили конфигурацию при запущенной службе postfix, новые настройки нужно активизировать командой service postfix reload.

Доменная информация

Имя хоста и домена, которые считаются локальными при обработке email-адресов, необходимы для функционирования почтового сервера. Если эти имена для postfix должны отличаться от того, что выдаёт команда hostname, установите их с помощью параметров myhostname и mydomain.

Postfix на узлах с удалённым доступом к сети

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

defer_transports = smtp

Доставка активизируется командой /usr/sbin/sendmail -q, которая в ALT Linux исполняется автоматически при установке PPP-соединения.

Как любой полноценный MTA, postfix позволяет доставлять сообщения, связываясь напрямую с сервером, обслуживающим получателя письма. Тем не менее, для dialup-машин непосредственная доставка сообщений нежелательна, поскольку время соединения ограничено. К тому же это излюбленная тактика распространителей спама, поэтому многие почтовые серверы сверяют IP-адрес отправителя с базой известных адресов провайдерских пулов, после чего сообщения с таких адресов отвергаются. Поэтому целесообразно доверить доставку исходящей почты SMTP-серверу провайдера. Этим управляет параметр relayhost, например:

relayhost = [smtp.provider.net]

Postfix на клиентской машине локальной сети

Рабочие станции в локальной сети или машины в провайдерской сети, отделённой от Интернета с помощью межсетевого экрана/NAT, должны переправлять исходящую почту на почтовый сервер, обслуживающий данную сеть. Для этого также используется параметр relayhost, описанный выше. Если сервер задан IP-адресом, можно отключить использование DNS для ускорения работы:

disable_dns_lookups = yes

Для того чтобы в доменной части адреса отправителя фигурировал домен сети, а не имя конкретной машины в этой сети, установите параметр myorigin равным имени домена:

myorigin = $mydomain

Почтовый сервер для небольших доменов и сетей

Домены, для которых сервер получает почту, отличные от значения mydomain и не сконфигурированные как виртуальные домены postfix (см. ниже), нужно перечислить с помощью параметра mydestination, либо в дополнительном файле, на который ссылается этот параметр. Аналогичным образом параметр mynetworks описывает блоки IP-адресов, которые считаются внутренними и с которых разрешён приём исходящих сообщений. Не следует записывать в mynetworks блоки адресов, не принадлежащих сети, которую обслуживает сервер, поскольку этим могут воспользоваться распространители спама.

Для пользователей, желающих отправлять сообщения через данный сервер, когда они находятся вне пределов локальной сети, следует организовать SMTP-аутентификацию. В postfix для этой задачи следует использовать библиотеку SASL (начиная с версии 2.3 в postfix появилась возможность использовать разные реализации SASL). На текущий момент доступно две реализации: Cyrus (пакет postfix-cyrus) или Dovecot (пакет postfix-dovecot). Cyrus, кроме того, можно использовать в postfix для аутентификации в качестве клиента на удалённых SMTP-серверах.

Для шифрования соединений в этой схеме используется протокол SSL/TLS, для включения поддержки которого в postfix необходимо установить пакет postfix-tls. Используя postfix-tls cледует принимать во внимание, что это расширение включает в postfix значительный объём исходных текстов, в меньшей степени проверенного в плане безопасности. Настройка аутентификации посредством TLS/SASL описана в файлах TSL_README и SASL_README в документации postfix.

Преобразование глобальных почтовых адресов в локальные адреса назначения устанавливается с помощью таблиц типа virtual (см. virtual(5)):

virtual_alias_maps = cdb:/etc/postfix/virtual

Пример содержимого /etc/postfix/virtual:

      domain1.ru # Домен в стиле postfix (текст здесь игнорируется)
      name1@domain1.ru user1
      name2@domain2.ru user2@otherbox
      @domain2.ru user3

После редактирования не забудьте активизировать изменения командой service postfix reload.

Если каким-либо пользователям сети почта должна доставляться по SMTP на их рабочие станции (это предполагает, что на их машинах работают MTA), подставляйте в доменной части их адресов имена машин в таблицах virtual либо aliases (см. ниже).

Алиасы и преобразования адресов

Имена локальных адресатов либо совпадают с именами учётных записей пользователей системы, либо подставляются из таблицы aliases (см. aliases(5)):

      alias_maps = cdb:/etc/postfix/aliases
      alias_database = cdb:/etc/postfix/aliases 

При установке postfix «с нуля» в этой таблице создаётся алиас на имя root: вся корреспонденция, предназначенная администратору и поступающая на другие системные адреса, будет доставляться на имя реального пользователя, который осуществляет функции администратора. Изначально им становится первый зарегистрированный в системе реальный пользователь. Таблица алиасов отличается от остальных таблиц, используемых postfix; имена в поле слева (псевдонимы) отделяются от значений в поле справа (адреса доставки) двоеточиями. Адресаты в списке перечисляются через запятую. В качестве способа доставки можно использовать почтовые адреса, команды (обозначаются символом | в начале правой части; сообщение подаётся на стандартный поток ввода команды) и имена файлов:

      John.Smith: john
      chief: chief@bosscomputer
      trio: stock, hausen, walkman
      robot: | /usr/bin/robot --process-mail
      filebox: /dir/file

Рабочий образ таблицы строится с помощью команды newaliases, а также при актуализации всех изменений посредством команды service postfix reload.

При отправке сообщения postfix формирует адрес отправителя автоматически из имени учётной записи пользователя и значения собственного домена (или значения myorigin, если этот параметр выставлен). Даже если почтовый клиент выставил заголовок From:, этот адрес попадает в служебные заголовки сообщения и может быть использован получателем, что не всегда желательно. Преобразование адресов отправителей к глобальным адресам можно задать в таблице типа canonical (см. canonical(5)):

      sender_canonical_maps = cdb:/etc/postfix/sender_canonical

Аналогичная таблица recipient_canonical и соответствующий параметр recipient_canonical_maps могут быть использованы для преобразования адресов назначения. Для актуализации изменений таблиц используйте команду service postfix reload.

Защита от нежелательной корреспонденции

Противодействие спаму (массовым рассылкам непрошеной корреспонденции) — отдельная большая тема, которую невозможно полностью раскрыть в этом руководстве; здесь даны лишь несколько практических советов применительно к конфигурации postfix. По умолчанию сервер сконфигурирован так, что отвергает попытки переслать сообщения извне на другие удалённые серверы. Со спамом, адресованным локальным получателям, дело обстоит сложнее.

В postfix предусмотрены возможности передачи почтовых сообщений на проверку на спам как внутренним фильтрам, так и внешним программам. Подробности о фильтрации почты см. в FILTER_README в документации postfix Режим фильтрации почты включается в ALT Linux командой control postfix filter.

Один из возможных способов  — опираться на данные служб, организованных по принципу «чёрного списка» IP-адресов (MAPS RBL и ей подобные). Чтобы задействовать эти сервисы, предварительно ознакомившись с условиями их использования, занесите имена доменов, работающих по принципу RBL, в конфигурацию:

      smtpd_client_restrictions = permit_mynetworks, reject_maps_rbl
      maps_rbl_domains = relays.ordb.org, blackholes.mail-abuse.org

В некоторых случаях требуется адресная работа с отдельными нарушителями почтового этикета. Адресная работа заключается в блокировании SMTP-соединений с их адресов, сетей либо доменов. Для этого предусмотрены таблицы типа access (см. access(5)):

      smtpd_client_restrictions = permit_mynetworks, cdb:/etc/postfix/access

Пример таблицы:

      1.2.3.4 550 No more canned meat, please
      1.2.5 REJECT
      goodguy.generallybad.com OK
      .generallybad.com REJECT

Как и с другими таблицами, закончив редактирование, приведите новые настройки в действие командой service postfix reload.

Прочие настройки

По умолчанию размер файла почтового ящика при локальной доставке ограничен 51200000 байтами. Это ограничение можно изменить с помощью параметра mailbox_size_limit. Установка параметра в 0 снимает ограничение.

Использование Postfix

После того, как postfix настроен и запущен как cлужба с предсказуемым именем postfix, в настройках почтовых клиентов можно указывать имя или адрес машины (например, localhost) в качестве SMTP-сервера. Для получения почты с удалённых серверов можно использовать программу fetchmail, которая работает в связке с postfix, опрашивая внешние почтовые ящики пользователей по протоколам POP3 или IMAP и передавая полученные сообщения системному MTA для локальной доставки. Подробнее о работе с fetchmail см. в документации соответствующего пакета. Файлы журналов postfix находятся в каталоге /var/log/mail.

Сведения о документе