Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 9. Сетевые сервисы

Настройка почтового сервера Postfix

Возможно, вас удивит то, что сервер передачи электронной почты (MTA) Postfix рекомендуется к установке в любой конфигурации ALT Linux. Это объясняется тем, что в Unix-подобных системах способность отправлять почту с помощью простого вызова команды из командой оболочки практически обязательна. Некоторые программы (например, сервис cron) пользуются этим для отправки сообщений пользователям. Пересылкой всей электронной почты, проходящей через машину, занимается MTA (Mail Transport Agent), в данном случае это Postfix. Хотя многие почтовые клиенты способны отправлять сообщения на удалённый SMTP-сервер, имеет смысл поручить и эту задачу системному процессу, чтобы достигнуть эффекта “отправил и забыл”. Существуют и другие популярные MTA (например qmail, exim), но они по разным причинам не вошли в данную версию дистрибутива; Sendmail, ветеран Интернет, проигрывает Postfix по ряду параметров – в том числе безопасности – и к тому же неоправданно сложен в настройке. В данном руководстве мы ограничимся рекомендациями по настройке Postfix для нескольких типичных конфигураций. Более полные сведения можно получить из превосходной документации на английском языке, которая входит в состав пакета postfix.

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

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

В изначальном виде этот файл содержит конфигурацию, позволяющую серверу работать в пределах машины, а также развернутые комментарии с примерами. После редактирования конфигурации при работающем Postfix её нужно активизировать командой servicepostfixreload или просто postfixreload.

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

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

Postfix на dialup-машине

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

defer_transports = smtp

Доставка активизируется командой /usr/sbin/sendmail -q, которая в ALT Linux исполняется автоматически при установке PPP-соединения. Будучи полноценным MTA, Postfix способен находить серверы, обслуживающие получателей сообщений, при помощи DNS. Тем не менее, для dialup-машин непосредственная доставка сообщений нежелательна, поскольку время соединения ограничено. К тому же это излюбленная тактика распространителей спама, поэтому многие серверы сверяют IP-адрес отправителя с базой известных адресов провайдерских пулов, после чего сообщения с таких адресов отвергаются.

Лучше доверить доставку исходящей почты SMTP-серверу провайдера – этим управляет параметр relayhost, например:

relayhost = [smtp.provider.net]

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

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

disable_dns_lookups = yes

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

myorigin = $mydomain

Если почтовые ящики пользователей монтируются с сервера по NFS, Postfix на клиентских машинах служит лишь для отправки почты. В такой конфигурации следует отключить агенты local и smtp в файле /etc/postfix/master.cf.

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

Домены, для которых сервер получает почту, отличные от mydomain и не сконфигурированные как виртуальные домены Postfix (см. ниже), нужно перечислить с помощью параметра mydestination либо в дополнительном файле, на который ссылается этот параметр. Аналогичным образом параметр mynetworks описывает блоки IP-адресов, которые считаются внутренними и с которых разрешён приём исходящих сообщений. Не следует записывать в mynetworks блоки адресов, не принадлежащих сети, которую обслуживает сервер, поскольку этим могут воспользоваться распространители спама. Для SMTP-аутентификации внешних пользователей можно использовать поддержку SASL; см. файл SASL_README в документации Postfix. Преобразование глобальных адресов в локальные адреса назначения устанавливается с помощью таблиц типа virtual (см. virtual(5)):

virtual_maps = hash:/etc/postfix/virtual

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

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

После редактирования оттранслируйте таблицу в рабочий образ командой:

# postmap /etc/postfix/virtual

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

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

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

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/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

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

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Аналогичная таблица recipient_canonical может быть использована для преобразования адресов назначения. Для актуализации изменений таблиц используйте команду postmap.

Борьба со спамом и почтовыми вредителями

Противодействие спаму (массовым рассылкам непрошеной коррес­пон­денции) – отдельная большая тема, которую невоз­можно полностью раскрыть в этом руководстве; здесь даётся лишь несколько практических советов применительно к конфи­гу­рации Postfix. По умолчанию сервер сконфигурирован так, что отвергает попытки переслать сообщения извне на другие удалён­ные серверы. Со спамом, адресованным локальным получате­лям, дело обстоит сложнее. Хорошо зарекомендовали себя служба MAPS RBL и ей подобные, организованные по принципу “чёрного списка” IP-адресов; чтобы задействовать эти сервисы, предварительно ознакомившись с условиями их использования, занесите имена доменов, работающих по принципу 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, hash:/etc/postfix/access 

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

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

Как и с другими таблицами, после редактирования приведите кары в действие командой postmap.

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

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