Это мой второй блог :) Буду тут тоже что-то размещать :)

понедельник, 10 декабря 2007 г.

Перевод на русский Postfix Basic Configuration

Введение

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

Ниже предлагается краткое введение в синтаксис:

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

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

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

Первые параметры которые следует указать – имя машины и ее роли в сети:
  • какое доменное имя используется для исходящей почты
  • для каких доменов принимается почта
  • какие клиенты могут пересылать почту
  • кто получатель для проходящей почты
  • какой метод доставки: прямой или непрямой
Значения по умолчанию для многих других конфигурационных параметров устанавливаются на основе этих.

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

  • Какие виды сообщений отправляются postmast’у
Не забудьте правильно установить следующие, если вы за прокси или NAT, или вы резервный MX для других доменов:
  • Прокси /NAT адреса внешней сети

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

  • Что нужно знать о логировании Postfix

Если ваша машина имеет необычные требования к безопасности Postfix можно запускать в изолированной среде.

  • Запуск Postfix в изолированной среде
Если вы запускаете Postfix на виртуальном сетевом интерфейсе или, если вашей машины запущены другие почтовики на виртуальных интерфейсах, вам надо посмотреть на другие параметры перечисленных здесь также:
  • Собственное имя хоста
  • Собственный домен хоста
  • Собственная сеть хоста

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

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


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

Вы указать параметр конфигурации, как:

/etc/postfix/main.cf:
  • параметр = значение
и можете использовать символ "$" поставив перед именем:

/etc/postfix/main.cf:
  • другой_параметр = $параметр
Вы можете использовать $параметр, прежде чем он получит значение (что является вторым основным отличием переменных оболочки UNIX). В конфигурации язык Postfix использует ленивую оценку, и не смотрит на значение параметра до тех пор, пока это не требуется во время выполнения.Postfix использует файлы баз данных для управления доступом,
переписывания адресов и других целей. В файл DATABASE_README даст представление о том, как Postfix работает с Berkeley DB, LDAP или SQL и другими. Вот общий пример того, как Postfix ссылается базу данных:

/etc/postfix/main.cf:

  • virtual_alias_maps = hash:/etc/postfix/virtual

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

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

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

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


Примеры (укажите лишь один из следующих):

/etc/postfix/main.cf:

  • myorigin = $myhostname (по умолчанию: отправлять почту как"пользователь@$myhostname" )
  • myorigin = $mydomain (возможно, желательно: "пользователь@$mydomain")

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


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

Вы можете указать один или несколько доменных имен, "/путь/файл" и/или "тип: таблица" таблица поиска (например: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.

/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

Куда пересылать(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. Не беспокойтесь, если Вы не понимаете, что это означает. Просто убедитесь в том, что имя хоста пересылки (relay host), полученное у провайдера, Вы указали в скобках [].

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

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

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

/etc/aliases:

  • postmaster: you-email
  • root: you-email
После изменения файла алиасов выполните команду "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-а о клиентских запросах, которые были отклонены в связи с политикой борьбы со спамом. 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 в изолированной среде

Демоны 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 (виртуальный интерфейс)
Cетевые адреса

Параметр 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 после изменения этого параметра.