Настройка Postfix
🕛 03.08.2009, 19:28
Как и в сервере Exim, конфигурационный файл Postfix достаточно прост. Настроить сервер Postfix сможет каждый, кто хотя бы поверхностно знает терминологию SMTP и способен понять назначение имен. Сервер Postfix имеет модульную структуру, т. е. его функции обеспечиваются совместным выполнением нескольких программ. Postfix предоставляет приблизительно те же возможности, что и Exim. Подобно другим серверам SMTP, Postfix обеспечивает маскировку адресов, прием писем, адресованных в локальные домены, работу в режиме ретрансляции почты, а также предоставляет возможность противодействия распространению спама.Postfix по умолчанию используется в Mandrake, но также может быть установлен и в других системах, например в Debian и SuSE. Этот сервер также входит в состав Pow-erTools. RPM-пакет, предназначенный для Mandrake, может быть установлен в других дистрибутивных пакетах Linux, но сценарии SysV, содержащиеся в данном пакете, работать не будут. Поскольку Postfix чаще всего применяется совместно с Mandrake, материал данного раздела будет излагаться с учетом конфигурации Postfix, устанавливаемой по умолчанию для данной версии системы. Настройка Postfix для остальных систем отличается от конфигурации для Mandrake лишь отдельными деталями.
Конфигурационный файл Postfix
Особенности выполнения Postfix определяются содержимым конфигурационного файла main.cf, который обычно располагается в каталоге /etc/postfix. Большинство записей в этом файле представлены в следующем формате:
опция = значение
Некоторые записи main. cf определяют переменные, используемые далее в этом файле. Чтобы ссылаться на значение опции как на переменную, надо указать перед именем опции символ S и включить полученное имя в правую часть записи. В качестве примера рассмотрим следующие две записи (между которыми могут находиться другие строки):
myhostname = franklin.threeroomco.com
myorigin - $myhostname
В первой записи переменной myhostname присваивается имя узла franklin. threeroomco. com, затем это же значение присваивается переменной myorigin. Подобные цепочки определений часто используются в Postfix, поэтому, чтобы определить значение переменной, надо проследить его, перемещаясь назад по конфигурационному файлу.
Файл main. cf в основном состоит из комментариев, которые содержатся в строках, начинающихся в символа #. Комментарии подробно описывают назначение каждой опции,
поэтому вы можете достаточно подробно изучить конфигурацию Postfix, просматривая лишь содержимое конфигурационного файла.
В файле main. сf содержатся ссылки на другие файлы. Как и в сервере sendmail, некоторые из этих файлов (оканчивающиеся символами . db) представлены в двоичном формате. Они создаются на базе текстовых файлов с теми же именами, за исключением суффикса . db. В процессе использования сервера наиболее часто приходится редактировать файл aliases (который преобразуется в файл aliases. db). Как и в одноименном файле сервера sendmail, в файле aliases задаются псевдонимы, используемые при доставке писем. Например, запись root: amelia указывает на то, что все письма, адресованные root, должны быть доставлены пользователю amelia. Для того чтобы преобразовать текстовый файл aliases в двоичный файл aliases .db, надо вызвать команду postalias aliases, указав перед этим в качестве текущего каталог, в котором содержится файл aliases.
После того как вы модифицируете содержимое текстового файла и создадите файл . db, пройдет некоторое время перед тем, как Postfix учтет внесенные изменения. Для того чтобы ускорить этот процесс, необходимо задать команду postfix reload либо перезапустить Postfix, используя для этого сценарий SysV.
Маскировка адресов
Опция myorigin позволяет задать имя, под которым Postfix будет представляться при взаимодействии с другими системами. По умолчанию в качестве значения данной опции задается переменная $myhostname, которая, в свою очередь, определяет доменное имя компьютера. Конфигурация по умолчанию приемлема во многих случаях, но если вашему компьютеру соответствует несколько имен или если вы хотите вместо имени узла использовать имя домена, вам придется изменить настройку сервера. Для этого надо задать новое значение опции myorigin, например:
myorigin - threeroomco.com
При желании вы можете указать в качестве значения опции переменную, например $mydomain. По умолчанию значением переменной $mydomain является значение $myhostname, из которого исключен компонент, находящийся слева. Например, если переменная $myhostname имеет значение franklin. threeroomco. com,то значение $mydomain будет равно threeroomco. com. В файле main, conf содержится много закомментированных записей. В некоторых случаях вы можете изменить конфигурацию, выбрав подходящую для вас запись и удалив символ комментариев.
Опция myorigin определяет только базовые средства маскировки адресов. Значение данной опции используется лишь в ходе начальных переговоров с удаленным сервером, предусмотренных протоколом SMTP, и для указания доменного имени в поле From:, если соответствующие данные не были включены в это поле программой подготовки писем. Если ваш почтовый сервер выступает в качестве ретранслятора по отношению к другим системам вашего домена, которые, возможно, настроены для включения в заголовок полного адреса, вам потребуется выполнять более сложные действия по маскировке адресов. Предположим, например, что клиентская программа, использующая сервер Postfix для передачи писем, включает в поле From: адрес ben@client. threeroomco. com. Предположим также, что вы хотите удалить идентификатор client так, чтобы адрес имел вид ben@client. threeroomco. com. Учитывая, что значением переменной $mydomain
является имя домена threeroomco. com, вы можете использовать для получения требуемого результата следующую запись:
masquerade_domains = $mydomain
Данная опция указывает серверу Postfix на то, что при обработке сообщения должна быть удалена часть доменного имени, не относящаяся к имени домена, указанного посредством переменной $mydomain. В результате в поля From: и То: вместо имени узла, принадлежащего домену $mydomain, будет записано имя домена.
Postfix позволяет выполнять еще более сложные действия по маскировке адресов. В частности, вы можете указать Postfix на необходимость изменить содержимое файла базы данных. Для этого используется опция sender_canonical_maps.
sender_canonical_maps - hash:/etc/postfix/sender_canonical
В файл sender_canonical необходимо включить записи, используемые для преобразования имен. Каждая строка этого файла должна содержать адрес, который может находиться в составе заголовка, и адрес, которым он должен быть заменен. Следующие две строки заменяют имена client.threeroomco.com и localhost на threeroomco.com:
@client.threeroomco.com @threeroomco.com @localhost Sthreeroomco.com
Аналогичный подход можно использовать для преобразования пользовательских имен. Например, ваш сервер может выполнять роль посредника между сетями, в которых для представления имен применяются различные форматы. Включив в файл, предназначенный для преобразования, записи, отображающие имя каждого пользователя, вы обеспечите соответствие имен в разных форматах.
После создания файла sender_canonical его необходимо преобразовать в двоичный формат посредством команды postmap sender_canonical. Чтобы внесенные в файл изменения были учтены сервером Postfix, надо вызвать команду postfix reload либо перезапустить сервер.
Выполняя настройку сервера, необходимо ограничиваться минимально допустимым уровнем маскировки адресов. В большинстве случаев конфигурация, установленная по умолчанию, позволяет Postfix выполнять свои функции, иногда приходится лишь скорректировать значение myorigin. Опция masquerade_domains в основном применяется в тех случаях, когда сервер принимает для передачи письма, которые уже были обработаны почтовым сервером, выполняющимся в системе Linux или UNIX. Средства преобразования адресов воздействуют не только на заголовок From:, они также затрагивают содержимое заголовка Received:. Многие администраторы неохотно используют данные средства, но в ряде случаев они могут быть очень полезны, особенно если ваши программы требуют, чтобы имена и адреса в поле From: были представлены в специальном формате.
Настройка Postfix для получения почты
. Подобно другим почтовым серверам, Postfix считает локальными только адреса некоторых узлов. Чтобы определить, какой из компьютеров является локальным, Postfix использует опцию mydestination. По умолчанию для данной опции приняты значения $myhostname и localhost. $mydomain. Например, если переменная $mydomain имеет значение threeroomco.com, a $myhostname - franklin.threeroomco.
com, то Postfix будет принимать письма, направленные на компьютеры franklin. threeroomco.com иlocalhost.threeroomco.com.
При необходимости вы можете изменить или дополнить значения данной опции. Например, если почтовый сервер обслуживает домен, вам необходимо добавить переменную $mydomain. Неплохо также указать для данной опции значение localhost. Значения опции mydestination отделяются друг от друга запятыми. Например, для почтового сервера, обслуживающего один домен, в конфигурационный файл можно включить следующее выражение:
mydestination = localhost, localhost. $mydomain, $myhostname, $mydomain
Для того чтобы указать, что опция mydestination занимает несколько строк, haV^ символ \ использовать не надо. Строка считается продолжением предыдущей, если она начинается с пробела или знака табуляции.
Вы можете настроить сервер Postfix для обслуживания нескольких доменов, указав их посредством одной опции mydestination. В этом случае имена большинства доменов задаются явно.
Конфигурация Postfix для ретрансляции писем
Подобно большинству почтовых серверов, Postfix поддерживает опции, предназначенные для управления ретрансляцией писем. Эти опции, расположенные в файле main. cf, позволяют настроить сервер как для работы в режиме ретрансляции, так и для использования в качестве ретранслятора другого сервера.
Настройка Postfix для работы в режиме ретранслятора
По умолчанию Postfix передает письма, которые удовлетворяют следующим критериям.
- Отправитель находится в одной из сетей, указанных с помощью переменной $mynetworks. По умолчанию в качестве значения этой переменной заданы адреса сетей, которым принадлежат все сетевые интерфейсы компьютера, в том числе интерфейс localhost.
- Отправитель принадлежит домену, указанному в переменной $relay_domains. По умолчанию значение данной переменной равно значению переменной
$iWdestination.
- Отправитель пытается передать письмо на компьютер, принадлежащий одному из доменов, указанных в переменной $relay domains, или их поддоменов.
Конфигурация по умолчанию указывает на то, что Postfix должен обрабатывать почту из того домена, которому принадлежит сам сервер, и от компьютеров, непосредственно связанных с сервером, посредством сетевых интерфейсов. В большинстве случаев такая конфигурация вполне приемлема, но иногда приходится изменять ее. Чтобы сделать это, вам надо изменить значение $mynetworks или $relay_domains (либо модифицировать обе переменные). Предположим, например, что Postfix должен обслуживать рабочую станцию work, threeroomco. com. Для этого вам надо переопределить значения переменных следующим образом:
mynetworks = 127.0.0.0/8
relay_domains = work.threeroomco.com
Возможно, вам потребуется расширить набор компьютеров, обслуживаемых сервером. В этом случае значения переменных могут выглядеть так:
mynetworks = 192.168.99.0/24, 172.24.0.0/16, 127.0.0.0/8 relay_domains = $mydestination, pangaea.edu
Данные опции сообщают о том, что письма должны приниматься из сетей 192.168.99.0/ 24, 172.24.0.0/16 и localhost(127.0.0.0/8), а также с компьютеров, принадлежащих доменам $mydestination и pangaea.edu.
Для управления действием mynetworks, relay_domains и некоторых других опций может использоваться опция smtpd_sender_restrictions. По умолчанию эта опция отсутсвует в main.cf, но при необходимости вы можете включить ее в состав конфигурационного файла. Значение permit_mx_backup данной опции соответствует опции relay_based_on_MX сервера sendmail. Подробные сведения о smtpd sender_restrictions вы найдете в документации на сервер Postfix.
Настройка Postfix для передачи почты через ретранслятор
В простейшем случае, чтобы сконфигурировать Postfix для передачи почты посредством другого сервера, достаточно установить значение опции relayhost. Эта опция, находящаяся в файле main . cf, указывает на компьютер, выполняющий функции ретранслятора. Если в конфигурационном файле сервера имен, управляющего доменом, присутствует запись MX, указывающая на сервер-ретранслятор, то в качестве значения опции relayhost можно задать имя этого домена. Например, если в роли ретранслятора выступает сервер, расположенный на компьютере franklin .threeroomco. com, в файл main. cf необходимо включить следующую запись:
relayhost = franklin.threeroomco.com
Если ваш сервер находится в том же домене, что и сервер-ретранслятор, и если на ретранслятор, указывает запись MX, то вместо имени franklin.threeroomco.com вы можете использовать переменную $mydomain. Такой подход предпочтительнее тем, что переносе почтового сервера, обслуживающего домен, на другой компьютер перенастраивать Postfix не приходится.
В обычных условиях при передаче почты Postfix обращается к серверу DNS. Если же сервер имен в вашей сети отсутствует (например, если преобразование имен осуществляется с помощью файлов /etc/hosts), вам необходимо включить в конфигурационный файл следующую запись:
disable_dns_lookups = yes
Эта опция указывает серверу Postfix на то, что он не должен обращаться к серверу DNS для преобразования имен. В этом случае Postfix определяет адрес ретранслятора с помощью записи в файле /etc/hosts.
Настройка Postfix для противодействия распространению спама
Подобно sendmail и Exim, Postfix содержит средства, позволяющие бороться с распространением спама. Вы можете блокировать рекламные сообщения, сравнивая информацию в заголовках писем с шаблонами, либо использовать списки IP-адресов.
Инструменты для сравнения с шаблонами, предоставляемые сервером Postfix, достаточно сложны, в частности, они позволяют использовать для анализа содержимого заголовков регулярные выражения. Регулярные выражения часто указываются в отдельном файле, но при желании вы можете задавать их непосредственно в конфигурационном файле main.cf. Пример опции, предназначенной для проверки заголовков, приведен ниже.
header_checks = regexp:/etc/postfix/bad_headers
В файле bad_headers указываются регулярные выражения, подобные приведенным в листинге 19.2. Если заголовки почтового сообщения соответствуют регулярным выражениям, содержащимся в файле, и если в файле указано, что письмо должно быть отвергнуто, оно возвращается отправителю. Регулярные выражения могут задаваться либо в стиле POSIX (regexp: описание), либо в стиле PCRE (рсге: описание).
Регулярные выражения будут подобно рассматриваться далее в этой главе. ДОполнительную информацию о них вы можете получить, обратившись к страницам справочной системы, посвященным программе egrep.
Опция header_checks предоставляет большие возможности, но она сложна в использовании. Более простое решение проблемы спама состоит в применении списков IP-адресов. Для работы с такими списками предназначены две приведенные ниже опции.
maps_rbl_domains = relays.mail-abuse.org, dialups.mail-abuse.org smtpd_client_restrictions = reject_maps_rbl
Опция mapsrbldomains позволяет задавать адреса серверов, управляющих списками IP-адресов (эти серверы описаны в табл. 19.1). В качестве значения данной опции можно указать несколько доменных имен, разделенных запятыми или пробелами. Опция, содержащаяся во второй из приведенных выше строк, указывает на то, что информация, предоставляемая серверами, должна использоваться как основание для блокирования писем. Кроме reject_maps_rbl, опция smtpd_client_restrictions может также принимать другие значения. Например, значение reject_unknown_client сообщает Postfix, что если для адреса отправителя не может быть выполнено обратное DNS-преобразование, письма не должны обрабатываться. Подробнее эти опции описаны в документации на Postfix.
Помимо описанных выше опций, Postfix предоставляет также опции, имеющие лишь косвенное отношение к борьбе со спамом. Некоторые из таких опций описаны ниже.
- smtpd_helo_required По умолчанию для данной опции задается значение по. Если вы измените его на yes, Postfix будет обрабатывать письмо только в том случае, если при обмене по протоколу SMTP отправитель передаст команду HELO или EHLO. Этот подход позволяет блокировать действия некорректно написанных программ, часто используемых для распространения спама, но также отвергает обычные письма, отправляемые посредством неправильно сконфигурированного сервера SMTP.
- smtpd_helo_restrictions. Данная опция позволяет Postfix более строго контролировать использование команды HELO или EHLO при SMTP-взаимодействии. Для опции smtpd_helo_restrictions предусмотрено несколько значений. Например, reject_unknown_hostname означает, что Postfix должен прекратить взаимодействие, если для указанного доменного имени не может быть обнаружена запись А или MX. Значение reject_non_fqdn_hostnameтребует, чтобы отправитель указал полное доменное имя узла. Более подробное описание опции smtpd_helo_restrictions приведено в документации на сервер Postfix.
- smtpd_sender_restrictions. Если в конфигурационном файле Postfix указана данная опция, это означает, что информация в поле From: заголовка должна соответствовать определенным критериям. Например, значение reject_unknown_ senderdomain указывает на то, что если в поле From: не задано имя узла, письмо должно быть отвергнуто, а значение reject_non_fqdn_senderтребует, чтобы отправитель включал в адрес полностью определенное доменное имя.
В конфигурационном файле сервера Postfix предусмотрены различные опции, позволяющие настроить сервер для решения разнообразных задач. В большинстве случаев работоспособность Postfix обеспечивает конфигурация, установленная по умолчанию. Задавая слишком строгие ограничения, вы рискуете потерять нужные вам письма.
Меры, предотвращающие использование Postfix для распространения спама, немногим отличаются от соответствующих мер для других серверов. Следует лишь заметить, что конфигурация Postfix по умолчанию предоставляет более свободный доступ к серверу по сравнению с последними версиями sendmail, так как Postfix обрабатывает письма из своего домена, а также из сетей, к которым подключен компьютер. Средства, позволяющие ограничить доступ к серверу, рассматривались выше.