Базовая конфигурация Postfix



У Postfix несколько сотен конфигурационных параметров, устанавливаемых в файле main.cf. К счастью, все параметры имеют осмысленные значения по умолчанию. В большинстве случаев Вам придется задать всего два или три параметра перед тем, как Вы сможете начать "играть" с почтовой системой. Здесь краткое введение в синтаксис:

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

Дальнейший текст подразумевает, что Вы уже установили Postfix, самостоятельно скомпиллировав его из исходного кода (как описано в файле INSTALL), либо установив из готовых бинарников.

Этот документ описывает базовую конфигурацию Postfix. Информация о том, как настраивать Postfix для работы в специфических условиях, как то: на почтовом узле, за файрволлом, на dial-up клиенте может быть найдена в файле STANDARD_CONFIGURATION_README. Но не следует переходить по ссылке, пока Вы не освоили материал, предоставленный ниже.

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

Какое имя домена использовать в уходящей почте

Для каких доменов принимать почту

От каких клиентов пересылать(relay) письма

Куда пересылать(relay) письма

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

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

Следующий интересный параметр контроллирует количество почты, отсылаемой локальному postmaster-у:

О каких проблемах сообщать postmaster-у

Следует установить следующий параметр корректно, если Вы находитесь за proxy-сервером или за NAT-ом (NAT - network address translator, транслятор сетевых адресов) и работаете в качестве резервного MX хоста для чужого домена:

Внешние сетевые адреса Proxy/NAT

Процессы Postfix-а - это демоны, работающие в фоновом режиме. Они регистрируют информацию о проблемах и нормальной активности в системе syslog. Здесь несколько моментов, которые следует учесть:

Что вы должны знать о журналировании (logging) Postfix-а

Если на Вашу машину возложены особые требования безопасности, то Вы, вероятно, пожелаете, чтобы Postfix работал в chroot-среде (от CHange ROOT - среда с измененным корнем файловой системы).

Запуск демонов Postfix в chroot-окружении

Если Вы запускаете Postfix на виртуальном сетевом интерфейсе, или на Вашей машине функционируют другие почтовые сервера(mailers) на виртуальных интерфейсах, то Вам также следует обратить внимание на следующие параметры:

Мое имя хоста (hostname)

Мое имя домена (domain name)

Мои сетевые адреса
Конфигурационные файлы Postfix

По умолчанию конфигурационные файлы Postfix располагаются в /etc/postfix (во FreeBSD - в /usr/local/etc/postfix -- прим. перев.). Два самых важных файла - это main.cf и master.cf. Эти файлы должны принадлежать root-у. Выдача какому-либо другому пользователю разрешений на запись в main.cf и master.cf (или в их родительские папки) означает выдачу ему полномочий суперпользователя.

В /etc/postfix/main.cf Вам нужно установить значения ряда конфигурационных параметров. Эти параметры напоминают переменные оболочки (shell), но есть два важных отличия. Первое: Postfix не знает о кавычках (quotes) в понимании оболочки UNIX.

Вы присваиваете значение конфигурационному параметру таким образом:
/etc/postfix/main.cf:
parameter = value

и используете значение параметра, добавляя символ "$" перед его именем:
/etc/postfix/main.cf:
other_parameter = $parameter

Вы можете использовать $параметр ($parameter) перед тем, как присвоите ему значение (это второе основное отличие от переменных оболочки UNIX). Конфигурационный язык Postfix использует ленивую обработку (lazy evaluation) и не смотрит на значения параметров, пока они не понадобятся во время работы (runtime).

Postfix использует базы данных для управления доступом, переписывания адресов и других целей. В файле DATABASE_README Вы найдете вводную информацию о работе Postfix-а c Berkeley DB, LDAP, SQL и другими типами баз данных. Это общий пример того, как Postfix обращается к базе данных:
/etc/postfix/main.cf:
virtual_alias_maps = hash:/etc/postfix/virtual

Если Вы внесли изменения в файлы main.cf или master.cf, выполните команду
# postfix reload

Это нужно делать от имени root-а, чтобы работающий Postfix "подхватил" изменения конфигурации:
Какое имя домена использовать в уходящей почте

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

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

Примеры (укажите лишь один вариант из следующих):
/etc/postfix/main.cf:
myorigin = $myhostname (по умолчанию: слать письма от "user@$myhostname")
myorigin = $mydomain (возможно, предпочтительней: "user@$mydomain")
Для каких доменов принимать почту

Параметр mydestination указывает, для каких доменов почта будет доставляться локально вместо пересылки на другой хост. По умолчанию, Postfix принимает почту только для локальной машины. Смотрите файл VIRTUAL_README для того, чтобы настроить Postfix для виртуального хостинга доменов (hosted domains).

Вы можете указать один и более доменов, "/имя/файла" и/или таблицы поиска "тип:таблица (type:table)" (такие, как hash:, btree:, nis:, ldap:, или mysql:), разделенные пробелами и/или запятыми. "/имя/файла" заменяется содержимым файла; "тип:таблица (type:table)" производит запрос к базе данных, просто проверяя наличие домена, результат поиска игнорируется.

ВАЖНО: Если Ваш хост является почтовым сервером для всего домена, Вам следует также включить $mydomain в mydestination.

Пример 1: значение по умолчанию.
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost

Пример 2: почтовый сервер для всего домена.
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost $mydomain

Пример 3: хост с несколькими записями DNS A.
/etc/postfix/main.cf:
mydestination = $myhostname localhost.$mydomain localhost
www.$mydomain ftp.$mydomain

Предупреждение: чтобы избежать зацикливания доставки почты (mail delivery loops), Вам следует указать все имена машины, включая $myhostname и localhost.$mydomain.
От каких клиентов пересылать(relay) письма

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

ВАЖНО: если Ваша машина подключена к глобальной сети (wide area network), то настройки параметра mynetworks, по умолчанию, могут быть небезопасными.

Примеры (укажите лишь один из следующих вариантов):
/etc/postfix/main.cf:
mynetworks_style = subnet (по умолчанию: авторизовать подсети)
mynetworks_style = host (безопасно: авторизовать только локальную машину)
mynetworks = 127.0.0.0/8 (безопасно: авторизовать только локальную машину)
mynetworks = 127.0.0.0/8 168.100.189.2/32 (авторизовать только локальную машину)

Вы можете указать сети, которым доверяете, в файле main.cf или предоставить Postfix-у возможность сделать эту работу. По умолчанию, Postfix делает работу за Вас. Результат зависит от значения параметра mynetworks_style.

Укажите "mynetworks_style = host", если Postfix должен пересылать почту только от локального хоста.

Укажите "mynetworks_style = subnet" (по умолчанию), если Postfix должен пересылать почту от SMTP клиентов из IP подсетей, к которым принадлежит локальная машина. На Linux-е это работает корректно только для интерфейсов, сконфигурированных командой "ifconfig".

Укажите "mynetworks_style = class", если Postfix должен пересылать почту от SMTP клиентов, находящихся в одной и той же IP сети класса A/B/C с локальной машиной. Не стоит настраивать Postfix таким образом при работе на машине с dialup соединением, так как Postfix будет "доверять" всей сети Вашего провайдера. Вместо этого явно укажите список mynetworks, как описано ниже.

В качестве альтернативы, Вы можете указать список mynetworks вручную, что заставит Postfix игнорировать параметр mynetworks_style. Чтобы указать список доверенных сетей, укажите сетевые блоки в формате CIDR (сеть/маска), например:
/etc/postfix/main.cf:
mynetworks = 168.100.189.0/28, 127.0.0.0/8

Вы также можете указать абсолютный путь файла со списком доверенных сетей вместо непосредственного перечисления их в файле main.cf.
Куда пересылать(relay) письма

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

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

По умолчанию, Postfix пытается посылать почту в Internet напрямую. В зависимости от окружения, в котором функционирует Ваш почтовый сервер, это может быть невозможно или нежелательно. Например, Ваша машина может быть отключена от Internet-а в нерабочее время, она может быть закрыта файрволлом, Ваш провайдер может запрещать пересылку почты в Internet напрямую. В таких случаях Вам необходимо настроить Postfix на пересылку писем через другой почтовый сервер (relay host).

Примеры (укажите только один вариант из следующих):
/etc/postfix/main.cf:
relayhost = (по умолчанию: посылать в Internet напрямую)
relayhost = $mydomain (пересылать через локальный почтовый сервер)
relayhost = [mail.$mydomain] (пересылать через локальный почтовый сервер)
relayhost = [mail.isp.tld] (пересылать через почтовый сервер провайдера)

Вариант, заключенный в квадратные скобки [], заставляет Postfix не предпринимать поиск записей DNS MX. Не беспокойтесь, если Вы не понимаете, что это означает (либо почитайте о DNS, либо забейте на настройку MTA - ваша жизнь станет спокойнее - прим.перев.). Просто убедитесь в том, что имя хоста пересылки (relay host), полученное у провайдера, Вы указали в скобках [].

В файле STANDARD_CONFIGURATION_README Вы можете найти больше примеров и подсказок для конфигурации Postfix "за файрволлом" и/или в dial-up сети.
О каких проблемах сообщать postmaster-у

Вы должны указать псевдоним (alias) для postmaster-а в таблице алиасов (alias table) aliases(5), который перенаправит почту реальному человеку. Адрес postmaster должен существовать для того, чтобы пользователи могли сообщить о проблемах с доставкой почты. Во время редактирования таблицы алиасов aliases(5) не забудьте также перенаправить почту суперпользователя (root-a) реальному человеку.
/etc/aliases:
postmaster: you
root: you

Выполните команду "newaliases" после изменения файла алиасов. Ваш файл алиасов может располагаться в отличном, чем /etc/aliases, месте. Используйте команду "postconf alias_maps", чтобы найти его.

Postfix сообщает о проблемах псевдониму postmaster-а. Возможно, вы захотите ограничить спектр неприятностей, о которых Вас информируют. Механизм оповещения postmaster-а конфигурируемый. По умолчанию, Вам будет доложено только о серьезных (ресурсы, программное обеспечение) проблемах:

Настройки по умолчанию:
/etc/postfix/main.cf:
notify_classes = resource, software

Значения классов оповещения следующие:
bounce
Информировать postmaster-а о почте, которая не может быть доставлена (undeliverable mail). Либо посылать postmaster-у копию письма, которое не может быть доставлено (undeliverable mail), возвращаемую отправителю. Или же копию SMTP сессии, во время которой Postfix принял решение о невозможности доставки. Из соображений приватности копия письма, которое невозможно доставить, отсылается postmaster-у, обрезанной сразу после заголовков (headers). Также обратите внимание на параметр luser_relay . Сообщение о проблеме класса "bounce" высылается адресату, указанному в параметре bounce_notice_recipient (по умолчанию: postmaster).
2bounce
Когда Postfix не может вернуть недоставленное (undeliverable) письмо отправителю, отослать его postmaster-у (без обрезания сообщения после основных заголовков). Сообщение о проблеме класса "2bounce" высылается адресату, указанному в параметре 2bounce_notice_recipient (по умолчанию: postmaster).
delay
Информировать postmaster-а о задержавшейся (delayed) почте. В этом случае postmaster получает только заголовки письма. Сообщение о проблеме класса "delay" высылается адресату, указанному в параметре delay_notice_recipient (по умолчанию: postmaster).
policy
Информировать postmaster-а о клиентских запросах, которые были отклонены в связи с политикой борьбы со спамом (спам - UCE - Unsolicited Commercial E-mail). Postmaster получает копию SMTP сессии. Сообщение о проблеме класса "policy" высылается адресату, указанному в параметре error_notice_recipient (по умолчанию: postmaster).
protocol
Информировать postmaster-а об ошибках протокола (с клиентской или серверной стороны) или попытках клиентов выполнить нереализованные команды. Postmaster получает копию SMTP сессии. Сообщение о проблеме класса "protocol" высылается адресату, указанному в параметре error_notice_recipient (по умолчанию: postmaster).
resource
Информировать postmaster-а о невозможности доставки писем из-за проблем с ресурсами системы (например, проблемы записи файла очереди). Сообщение о проблеме класса "resource" высылается адресату, указанному в параметре error_notice_recipient. (по умолчанию: postmaster).
software
Информировать postmaster-а о невозможности доставки писем в связи с проблемами программного обеспечения. Сообщение о проблеме класса "software" высылается адресату, указанному в параметре error_notice_recipient. (по умолчанию: postmaster).
Внешние сетевые адреса Proxy/NAT

Некоторые почтовые сервера подключены к Internet через NAT (Network Adress Translator) или прокси-сервер (proxy). Это означает, что системы в Интернет открывают соединение с прокси или NAT, а не напрямую соединяются с почтовым сервером. Прокси или NAT, в свою очередь, соединяется с целевым почтовым сервером, но Postfix об этом не знает.

Если Postfix работает за прокси-сервером или за NAT-ом, Вам следует указать все внешние адреса прокси или NAT-а, с которых Postfix получает почту, в параметре proxy_interfaces. Вы можете указать символьные имена хостов (hostnames) вместо сетевых адресов.

ВАЖНО: Вы должны указать Ваши внешние прокси/NAT адреса, когда Ваша система функционирует в качестве резервного MX хоста для других доменов, иначе при падении основного MX сервера произойдет зацикливание доставки почты.

Пример: система за NAT-ом, функционирующая в качестве запасного MX хоста.
/etc/postfix/main.cf:
proxy_interfaces = 1.2.3.4 (внешний сетевой адрес прокси/NAT)
Что вы должны знать о журналировании (logging) Postfix-а

Процессы Postfix-а - это демоны, работающие в фоновом режиме. Они регистрируют информацию о проблемах и нормальной активности в системе syslog. Процесс syslogd сортирует сообщения по типу и важности и добавляет их в файлы журнала (logfiles). Типы регистрируемых событий, уровни серьезности и имена журнальных файлов обычно указываются в файле /etc/syslog.conf. Как минимум Вам необходимо что-то вроде этого:
/etc/syslog.conf:
mail.err /dev/console
mail.debug /var/log/maillog

После изменения файла syslog.conf отправьте сигнал "HUP" процессу syslogd.

ВАЖНО: многие реализации syslogd не создают самостоятельно журнальные файлы, Вы должны создать необходимые файлы вручную перед (пере)запуском syslogd.

ВАЖНО: на Linux-е Вам следует указать символ "-" перед именем файла, т.е. -/var/log/maillog, иначе процесс syslogd будет потреблять больше ресурсов, чем Postfix.

Проблем будет немного, но хорошей практикой является запуск каждой ночью (перед ротацией log-файлов):
# postfix check
# egrep '(reject|warning|error|fatal|panic):' /some/log/file

Первая строка (postfix check) заставляет Postfix доложить о некорректных владельцах/разрешениях файлов.

Вторая строка производит поиск отчетов о проблемах в почтовой системе, а также сообщает, насколько эффективно работает пересылка почты и блокировка ненужной (junk) корреспонденции. Это операция может породить достаточно объемный вывод информации, поэтому может понадобиться дополнительная обработка, чтобы исключить лишнее.

Файл DEBUG_README описывает значение уровня "warning" и т.п. в журналах Postfix.
Запуск демонов Postfix в chroot-окружении

Демоны Postfix-а могут быть сконфигурированы (с помощью файла master.cf) для запуска в chroot-окружении. Процессы работают с фиксированными низкими привилегиями, их доступ к файловой системе ограничен директориями очередей Postfix-a (/var/spool/postfix). Это создает серьезный барьер против вторжений. Барьер не является "абсолютным" (chroot-окружение ограничивает лишь доступ к файловой системе), но каждый элемент защиты полезен.

За исключением демонов Postfix, которые доставляют почту локально, каждый процесс Postfix может работать в chroot-среде.

Машины с высокими требованиями безопасности должны рассмотреть вариант запуска в chroot-окружении всех демонов, которые общаются с сетью: smtp(8) и smtpd(8) процессы, и, возможно, lmtp(8) клиент. На "родном" почтовом сервере автора (porcupine.org) все демоны работают в chroot-среде.

По умолчанию, файл /etc/postfix/master.cf указывает Postfix не запускать процессы в chroot-окружении. Чтобы запустить демоны Postfix в chroot-среде, редактируйте /etc/postfix/master.cf, следуя инструкциям в файле. Когда закончите, выполните команду "postfix reload", чтобы изменения вступили в силу.

Вы должны помнить, что демоны в chroot-окружении определяют все пути относительно директории очередей Postfix (/var/spool/postfix). Для успешной работы chroot-среды большинство UNIX систем требуют от Вас переноса в chroot некоторых файлов или устройств. В директории examples/chroot-setup дистрибутива исходного кода есть ряд скриптов, которые помогут настроить chroot-окружение Postfix на различных операционных системах.

В дополнение, Вам практически в любом случае понадобится настроить syslogd, чтобы он слушал сокет (socket) внутри директории очередей Postfix. Примеры опций командной строки для syslogd, которые позволяют добиться этого в некоторых системах:

FreeBSD: syslogd -l /var/spool/postfix/var/run/log

Linux, OpenBSD: syslogd -a /var/spool/postfix/dev/log
Мое имя хоста (hostname)

Параметр myhostname указывает полное доменное имя машины (fully-qualified domain name - FQDN), на которой функционирует Postfix. $myhostname присутствует во многих других конфигурационных параметрах Postfix, как значение по умолчанию.

По умолчанию, myhostname устанавливается в имя локальной машины. Если имя Вашей машины не указано в полной доменной форме (FQDN), или Вы запускаете postfix на виртуальном интерфейсе, Вам необходимо указать полное доменное имя (FQDN), которое должна использовать почтовая система.

Альтернативно, если Вы укажете значение mydomain в файле main.cf, то Postfix использует это значение, чтобы сгенерировать полное доменное имя машины (FQDN) для параметра myhostname.

Примеры (укажите лишь один вариант из следующих):
/etc/postfix/main.cf:
myhostname = host.local.domain (имя машины не является FQDN)
myhostname = host.virtual.domain (виртуальный интерфейс)
myhostname = virtual.domain (виртуальный интерфейс)
Мое имя домена (domain name)

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

И наоборот, если Вы укажете значение mydomain в main.cf, то Postfix будет использовать его, чтобы сгенерировать полное доменное имя машины (FQDN) для параметра myhostname.

Примеры (укажите лишь один вариант из следующих):
/etc/postfix/main.cf:
mydomain = local.domain
mydomain = virtual.domain (виртуальный интерфейс)
Мои сетевые адреса

Параметр inet_interfaces указывает все адреса сетевых интерфейсов, на которых Postfix должен ждать соединений. Письма, адресованные на "пользователь@[сетевой адрес]" будут доставлены локально, как если бы они были адресованы домену, перечисленному в $mydestination.

Вы можете переопределить значение inet_interfaces в конфигурационном файле master.cf, добавив IP-адрес перед именем сервера.

По умолчанию, Postfix слушает на всех активных интерфейсах. Если Вы запускаете почтовые сервера на виртуальных интерфейсах, Вам необходимо указать, на каких интерфейсах ждать соединений.

ВАЖНО: Если Вы запускаете почтовый сервер на виртуальных интерфейсах, то должны указать точные значения inet_interfaces для MTA (Mail Transfer Agent - агент почтовой пересылки), который принимает почту для локальной машины: этот MTA никогда не должен слушать виртуальные интерфейсы, иначе в случае его падения произойдет зацикливание почты.

Пример: настройки по умолчанию.
/etc/postfix/main.cf:
inet_interfaces = all

Пример: хост с одним или более почтовым сервером. Для каждого экземпляра Postfix укажите лишь один вариант из следующих:
/etc/postfix/main.cf:
inet_interfaces = virtual.host.tld (виртуальный Postfix)
inet_interfaces = $myhostname localhost... (невиртуальный Postfix)

Примечание: вы должны остановить и запустить Postfix после изменения этого параметра.

Обновлено: 13.03.2015