Почтовая система Postfix
Категория: Электронная почта | Автор: admin | 1-06-2010, 03:57 | Просмотров: 6828

Проект Postfix начался в научно-исследовательском центре компании IBM T.J.Watson Research Center с легкой руки Витса Венема. Postfix является альтернативой программе sendmail, характеризуясь такими качествами, как надежность, простота администрирования и (есть надежда) безопасность. Postfix — прямой конкурент программы qmail, разработанной Дэном Бернстайном (Dan Bernstein). Целями создания системы Postfix были политика открытого распространения, высокая производительность, надежность, гибкость и безопасность.

Вероятно, наиболее важным в системе Postfix является то, что она функционирует практически автономно (простейший файл конфигурации содержит всего одну или две строки). Кроме того, с целью эффективной фильтрации почты используются регулярные выражения, синтаксис которых основан на библиотеке PCRE (Perl Compatible Regular Expression). Это очень мощное средство, но усложненные регулярные выражения напоминают синтаксис низкоуровневого файла конфигурации программы sendmail. Система Postfix совместима с программой sendmail в том смысле, что файлы aliases и .forward системы Postfix имеют тот же формат и ту же семантику, что и аналогичные файлы программы sendmail.

Система Postfix понимает протокол ESMTP и имеет ограниченную поддержку протокола UUCP. Поддерживаются также виртуальные домены и средства фильтрация спама. Postfix не имеет собственных средств переписывания адресов, в отличие от программы sendmail. Вместо этого используется табличный поиск в обычных файлах, библиотеках DB и dbm, а также службах LDAP, NIS и Netlnfo.

 

Архитектура системы Postfix

 

Система Postfix состоит из нескольких небольших, взаимодействующих друг с другом процессов, каждый из которых осуществляет свою функцию: отправляет сообщения в сеть, принимает сообщения, доставляет почту по локальным адресам и т.д. Взаимодействие между процессами осуществляется через UNIX-сокеты или через очереди. Такая архитектура существенно отличается от архитектуры программы sendmail, в которой один большой процесс выполняет все операции.

Система Postfix использует четыре разные очереди для осуществления почтовых операций:

  • Maildrop — сюда пользовательский агент помещает исходящие сообщения;
  • Incoming — для входящей почты;
  • Active — резидентная очередь сообщений, находящихся в процессе доставки;
  • Deferred — почта, доставка которой была отложена.

Менеджер очередей перемещает сообщения между очередями. При этом используется алгоритм кругового обслуживания, заключающийся в балансировке очередей Incoming и Deferred и принятии решения относительно того, какое сообщение в данный момент попадет в очередь Active. Сообщения в очереди Active перед началом обработки сортируются по пунктам назначения, так что, если несколько сообщений имеют общего получателя, они могут быть переданы через одно ТСР-соединение.

Чтобы не перегружать узел, принимающий сообщения, система Postfix использует алгоритм медленного старта для контроля того, как быстро доставляется почта. Отложенные сообщения получают отметку о времени повторной попытки доставки, причем интервал между попытками экспоненциально увеличивается, чтобы ресурсы системы не тратились на сообщения, которые, возможно, не удастся доставить. Наличие кэша недоступных адресатов позволяет избежать ненужных попыток доставки сообщений (это аналогично опции HOST_STATUS_DIRECTORY программы sendmail).

Безопасность контролируется на нескольких уровнях. Большинство демонов системы Postfix может запускаться в среде с измененным корневым каталогом. Демоны — это отдельные программы, не имеющие отношений типа предок/потомок. Ни один из них не имеет установленного бита SUID. Память для строк и буферов выделяется динамически; длинные строки предварительно разбиваются на части, а затем снова объединяются. Разбивка необходима, чтобы не возникало переполнение буфера. Очередь Maildrop доступна для записи (но не для чтения) всем пользователям, поэтому система Postfix не нуждается в помощи доверенных пользовательских агентов.

Наличие каталога, открытого для записи, дает определенные шансы хакерам, но система Postfix предотвращает большинство связанных с этим проблем, используя специальный формат файлов, находящихся в очереди Система не пытается обрабатывать неправильные файлы. Если у программы postdrop будет установлен бит SGID, каталог очереди Maildrop окажется доступен для записи только группе. Такая возможность была добавлена под давлением Дэна Бернстайна, активно отстаивавшего свою точку зрения в списке рассылки "bugtraq".

Центральными частями системы Postfix являются главный демон, запускающий остальных демонов, и файл master.cf. содержащий управляющие настройки и ограничения. Стандартные установки файла master.cf приемлемы для любых ситуаций, кроме очень медленных или очень быстрых компьютеров или сетей. Особой необходимости в модификации этого файла нет. Другой файл конфигурации, main.cf, содержит параметры маршрутизации и фильтрации сообщения. Файл main.cf немного напоминает файл sendmail.cf; файл master.cf не имеет аналога в программе sendmail, так как последняя состоит из единичного демона.

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

  • postfix — запускает и останавливает почтовую систему (должна выполняться от имени пользователя root);
  • postalias — эквивалент команды newaliases;
  • postcat — отображает содержимое файлов находящихся в очереди;
  • postconf — отображает и редактирует содержимое файла main.cf;
  • postdrop — добавляет сообщения в очередь Maildrop;
  • postkick, postlock, postlog — вызываются из командных сценариев выполняя функции блокировки и журнальной регистрации;
  • postmap — строит таблицы базы данных (аналогична команде makemap);
  • postsuper — управляет очередями (вызывается при запуске системы).

 

Конфигурирование системы Postfix

 

В файле mail.cf можно задавать около сотни параметров. Большинство из них имеет логичные установки по умолчанию. Язык конфигурирования немного напоминает последовательность операторов присваивания интерпретатора Bourne shell. В приведенных ниже примерах мы иногда сопровождаем операторы комментариями, в которых указывается эквивалентная конструкция программы sendmail. Эти комментарии расположены в конце строк конфигурации и не являются частью операторов.

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

myhostname = имя.ххх.ууу

 

Переменная mydomain содержит имя родительского домена для переменной myhostname; система Postfix вычисляет его путем удаления имени компьютера. Если результат получился неправильным, задайте домен самостоятельно:

mydomain = локальная_часть.домен

 

Обе переменные, myhostname и mydomain, могут задавать виртуальные домены.

Переменная mynetworks содержит список всех сетей, к которым подключен компьютер, включая интерфейс обратной связи. Например:

mynetworks = 128.138.243.64/26,  127.0.0.0/8

 

Система Postfix понимает сетевые адреса в CIDR-нотации. Переменная inet_interfaces определяет интерфейсы, прослушиваемые системой Postfix (по умолчанию это все активные интерфейсы). Необходимо изменить стандартное значение данной переменной, если используются виртуальные домены.

В случае самой простой конфигурации требуется сконфигурировать только три переменные: myorigin, mydestination и notify_classes.

Переменная myorigin определяет, какой домен будет использоваться для исходящей почты. Она задается следующим образом:

 

myorigin = $myhostname

myorigin = $mydomain    # напоминает маскирование в программе sendmail

 

 

Переменная mydestination определяет домены, для которых будет приниматься входящая почта. Она аналогична средству use_cw_file программы sendmail и может содержать список имен компьютеров, имя домена, имя файла или спецификацию табличного поиска. Например:

 

mydestination = $myhostname localhost.$mydomain

mydestination = $myhostname localhost.$mydomain $mydomain

mydestination = /etc/mail/local-host-names

 

 

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

notify_classes = resource, software

 

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

Таблица 19.21. Возможные значения переменной notify_classes

Класс

Тип ошибок

bounce

Недоставленные сообщения (только заголовок)

2bounce

Двойной отказ (сообщение об отказе тоже не может быть доставлено)

delay

Сообщение задержано в очереди (только заголовок)

policy

Отказ от спама (включает SMTP-расшифровку)

protocol

Ошибки протокола (включает SMTP-расшифровку)

resource

Проблемы с ресурсами (например, сбой при записи в очередь, переполнение файловой системы)

software

Внутренние ошибки Postfix

 

 

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

Система Postfix имеет ограниченные возможности перезаписи адресов. Например, она может

  • преобразовывать регистрационные имена в адреса формата имя.фамилия.
  • запрещать направленную маршрутизацию;
  • преобразовывать UUCP-адреса в доменный формат;
  • запрещать "процентные" адреса;
  • добавлять к адресам локальные домены для получения полностью определенных имен.

 

Маскирование адресов тоже поддерживается, но не в столь многих формах, как в программе sendmail. Соответствие виртуальным адресам ищется путем табличного поиска, подобно программе sendmail. Переадресация осуществляется с помощью специальной таблицы (переменная relocated_maps). Поддерживаются файлы aliases и .forward такого же формата, как и в sendmail. Имеется даже аналог средства luser_relay для обработки сообщений типа "user unknown".

Ретрансляция отключена по умолчанию, но начальное поведение системы немного отличается от такового в программе sendmail. Последняя по умолчанию вообще не выполняет ретрансляцию, тогда как система Postfix осуществляет ретрансляцию почты для локальных доменов, подчиненных доменов и сетей класса А, В или С.

 

Борьба со спамом

 

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

Если для сообщения найдено соответствие в таблице поиска и запись таблицы содержит значение REJECT, то сообщение отклоняется и выдается соответствующее уведомление об ошибке. Если среди наших читателей есть Perl-хакеры, приведем для них пример регулярного выражения, используемого в спам-фильтрах одного Web-узла:

/^friend@.*$/          550 Stick this in your pipe $0

 

Если в домене действительно имеется пользователь friend, можно исключить его из проверки:

/^triend@(?!mysite.com).*$/   550 Stick this in your pipe $0

 

Таблица 19.22. Переменные системы Postfix, связанные с фильтрацией спама

Переменная

Назначение

header_cnecks

Фильтрация заголовков

smtpd_client_restrictions

Фильтрация клиентских соединений,  "черных" списков и т.д.

smtpd_sender restrictions

Фильтрация адресов отправителей

smtpd_recipient restrictions

Фильтрация адресов получателей

smtpd_helo_required

Для идентификации имени компьютера требуется SMTP-команда HELO

smtpd_helo_restrictions

Требуется обратный DNS-поиск

smtpd_etrn_restrictions

Содержит список компьютеров, имеющих доступ к очереди

 

Чтобы подключить «черные» списки проэкта MAPS, добавьте в свой файл main.cf следующие строки:

 

maps_rbl_domains =

   rbl.maps.vix.com

   dul.maps.vix.com

   relays.mail-abuse.org

 

smtpd_client_restrictions = reject_maps_rbl

 

 

Примеры конфигурирования системы Postfix

 

Поскольку наш опыт работы с системой Postfix гораздо более скромен, чем с программой sendmail, мы попросили Витса Венема предоставить нам примеры. Каталог conf дистрибутива Postfix также содержит ряд примеров.

В среде "почтовый концентратор — клиенты" все системы посылают почту от имени пользователь@домен и принимают почту на имя пользователь@компьютер. Концентратор принимает почту на имя пользователь@домен.

На клиентском компьютере файл /etc/postfix/main.cf будет содержать следующее:

myorigin = $mydomain

 

На почтовом концентраторе файл /etc/postfix/main.cf выглядит так:

 

myorigin = $mydomain

mydestination = $myhostname,localhost.$mydomain,$mydomain

 

 

Эту конфигурацию можно модифицировать таким образом, чтобы рабочая станция не принимала почту из сети, а ретранслировала ее через почтовый концентратор. Для этого следует изменить как файл main.cf, так и файл master.cf.

В случае клиента файл /etc/postfix/main.cf будет таким:

 

myorigin = $mydomain

relayhost = $mydomain

 

 

На клиентской системе необходимо также превратить в комментарий строку вызова SMTP-сервера в файле /etc/postfix/master.cf:

#smtp     inet   n    -    -    n    smtpd

 

Если каталог очереди экспортируется через NFS к клиентам, им будет нужен только почтовый агент системы Postfix и файлы main.cf и master.cf нулевой длины.

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

Конфигурация почтового концентратора такова:

 

myorigin = $mydomain

mydestination = $myhostname, localhost.$mydomain,$mydomain

transport_maps = hash:/etc/postfix/transport

 

 

Клиенты используют приведенную ниже конфигурацию:

 

myorigin = $mydomain

transport_maps = hash:/etc/postfix/transport

 

 

Как на главном компьютере, так и на компьютерах клиентов файл /etc/postfix/transport должен содержать следующее:

 

.bitnet      smtp:master

.uucp        smtp:master

 



 (голосов: 0)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page