Установка Postfix с исходных кодов


1 - Смысл этого документа

Это начальный документ который поможет получить Postfix и запустить его самостоятельно с малым числом шагов (установки и настройки). Если вы используете предварительно скомпилированную версию Postfix, вы должны будете прочитать основную документацию Postfix, которая имеет цели описать эту систему более подробно. Этот документ не будет рассматривать основную документацию Postfix.

Этот документ описывает как построить, установить и сконфигурировать систему Postfix, так что она сможет делать одно из следующего:

Этот документ охватывает следующие темы:

  1. Замысел этого документа
  2. Типографические соглашения
  3. Документация
  4. Сборка на поддерживаемую (им) системе
  5. Портирование (перенос) Postfix в систему неподдерживаемую (им)
  6. Установка программного обеспечения после удачной компиляции
  7. Конфигурирование Postfix
  8. Конфигурирование Postfix для отправки и получения почты через виртуальный интерфейс
  9. Запуск Postfix взамен Sendmail
  10. Конфигурационные файлы обязательные для редактирования
  11. Chroot или не chroot (ограничивать в определенном месте)
  12. Забота и уход за системой Postfix

2 - Типографские соглашения

В инструкции ниже, команда записанная так

# command

будет запускаться от суперпользователя.

Команда записанная так

% command

будет выполняться от непривелигированного пользователя.

3 - Документация

Документация доступна в файлах README (начинается с файла README_FILES/AAAREADME), в качестве HTML веб страниц (подскажите вашему браузеру путь до "html/index.html") и ввиде страниц руководств в стиле UNIX.

Вам необходимо смотреть файлы README с помощью пэйджера такого как more(1) или less(1), потому что файлы используют backspace знаки в определенном порядке чтобы создать bold (полужирный) шрифт. Чтобы распечатать файл README без backspace шрифтов, используйте команду col(1). Для примера:

% col -bx <file | lpr

Чтобы посмотреть страницы руководств перед установкой Postfix, укажите путь в вашей переменной окружения MANPATH к поддиректории "man"; убедитесь что используете абсолютный путь.

% export MANPATH; MANPATH="`pwd`/man:$MANPATH"
% setenv MANPATH "`pwd`/man:$MANPATH"

Особый интерес представляет postconf(5) страница руководства в которой перечислены все 400+ конфигурационных параметров. HTML версия этого текста делает ее простой для навигации с обратным возвращением.

Все исходные файлы Postfix имеют свою собственную страницу руководства. Инструменты для извлечения запакованных страниц руководства доступны в директории mantools.

4 - Сборка на поддерживаемые (Postfix) системах

В различное время, версии Postfix обеспечивались для:

AIX 3.2.5, 4.1.x, 4.2.0, 4.3.x, 5.2
BSD/OS 2.x, 3.x, 4.x
Darwin 1.x
FreeBSD 2.x, 3.x, 4.x, 5.x
HP-UX 9.x, 10.x, 11.x
IRIX 5.x, 6.x
Linux Debian 1.3.1, 2.x, 3.x
Linux RedHat 3.x (January 2004) - 9.x
Linux Slackware 3.x, 4.x, 7.x
Linux SuSE 5.x, 6.x, 7.x
Mac OS X
NEXTSTEP 3.x
NetBSD 1.x
OPENSTEP 4.x
OSF1.V3 - OSF1.V5 (Digital UNIX)
Reliant UNIX 5.x
Rhapsody 5.x
SunOS 4.1.4 (February 2005)
SunOS 5.4 - 5.9 (Solaris 2.4..9)
Ultrix 4.x (well, that was long ago)

или близко похожих на них.

4.1 - Начало работы

На Solaris, команда "make" и другие утилиты для разработки приложений находятся в /usr/ccs/bin, так что вы ДОЛЖНЫ иметь /usr/ccs/bin в вашем пути поиска команд (command search path).

Если вам необходимо построить Postfix для различных архитектур, используйте команду "lndir" для построения shadow (теневого) дерева с символическими ссылками к исходным файлам. "lndir" часть X11R6.

Если в некоторое время в процессе сборки вы получите сообщения похожие на: "make: don't know how to ..." вы должны быть способны к восстановлению запустив следующую команду с верхнего уровня директории Postfix:

% make -f Makefile.init makefiles

Если вы скопировали исходный код Postfix(а), после его сборки на другую машину, хорошая идея перейти в директорию верхнего уровня и сначала сделать это:

% make tidy

Это позволит освободить от каких-либо левых системных зависимостей, оставшихся в конце от компиляции программного обеспечения где-нибудь еще.

4.2 - Какой компилятор использовать

Для сборки с помощью GCC, или с помощью родного (для системы) компилятора в случае если люди говорят себе что это лучше для их системы, перейдите прямо в верхнюю директорию Postfix дерева исходников и напечатайте:

% make

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

% make makefiles CC=/opt/SUNWspro/bin/cc        (Solaris)
% make

% make makefiles CC="/opt/ansic/bin/cc -Ae"     (HP-UX)
% make

% make makefiles CC="purify cc"
% make

и тому подобное также. В некоторых случаях, оптимизация отключена автоматически.

4.3 - Сборка с выборочными расширениями

По умолчанию Postfix собирается как почтовая система с относительно небольшим набором программного обеспечения. Существует поддержка для сторонних баз данных, которые должны быть внесены в конфигурацию когда Postfix компилируется. Следующие документы описывают как построить Postfix с поддержкой этих расширений:
Postfix extension Document Availability
Berkeley DB database DB_README Postfix 1.0
LDAP database LDAP_README Postfix 1.0
MySQL database MYSQL_README Postfix 1.0
Perl compatible regular expression PCRE_README Postfix 1.0
PostgreSQL database PGSQL_README Postfix 2.0
SASL authentication SASL_README Postfix 1.0
STARTTLS session encryption TLS_README Postfix 2.2

Замечание: поддержка IP версии 6 компилируется в Postfix в операционных системах, которые имеют поддержку IPv6. Смотри файл IPV6_README для подробностей.

4.4 - Замена встроенных параметров установок поумолчанию

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

% make makefiles CCARGS='-DDEF_CONFIG_DIR=\"/some/where\"'
% make

Важно: Убедитесь что правильно поставили кавычки. Эти детали имеют большое значение.

Параметры которые могут быть указаны по этим путям по умолчанию:

Macro name default value for typical default
DEF_COMMAND_DIR command_directory /usr/sbin
DEF_CONFIG_DIR config_directory /etc/postfix
DEF_DAEMON_DIR daemon_directory /usr/libexec/postfix
DEF_MAILQ_PATH mailq_path /usr/bin/mailq
DEF_HTML_DIR html_directory no
DEF_MANPAGE_DIR manpage_directory /usr/local/man
DEF_NEWALIAS_PATH newaliases_path /usr/bin/newaliases
DEF_QUEUE_DIR queue_directory /var/spool/postfix
DEF_README_DIR readme_directory no
DEF_SENDMAIL_PATH sendmail_path /usr/sbin/sendmail

4.5 - Поддержка для тысячи процессов

В указании для сборки Postfix для работы с большими нагрузками, где вы ожидаете запуск более чем 1000 процессов доставки почты, вы можете нуждаться переопределении значения макроса FD_SETSIZE чтобы сделать выбранную [make select()] работу корректной:

% make makefiles CCARGS=-DFD_SETSIZE=2048

Предупреждение: вышесказанное не эффективно на некоторых версиях Linux. Очевидно что, на этих системах значение FD_SETSIZE может быть изменено только используя недокументированные интерфейсы (средств взаимодействия). Насегодня, это значит включение <bits/types.h> напрямую (что не дозволено) и переопределении макроса __FD_SETSIZE. Остерегайтесь, недокументированные интерфейсы могут менять (вероятно поведение системы) в любое время и без предупреждений.

4.6 - Компилирование Postfix, по завершении (сборки)

Если команда

% make

прошла удачно, затем вы можете произвести установку Postfix (секция 6).

Если производные команды компилятора сообщения об ошибках, может быть настало время для поиска в паутине (интернет) или запросить помощи в почтовых рассылках postfix-users@postfix.org, но вначале удостоверьтесь об этом в архивах почтовых рассылок. Некоторые архивы почтовых рассылок можно найти на http://www.postfix.org/.

5 - Портирование Postfix на неподдерживающую (им) систему

Каждый системный тип (system type) который Postfix знает идентифицируется уникальным именем. Примеры: SUNOS5, FREEBSD4, такие же похожие. Когда Postfix портируется на новую систему, первый шаг выбрать SYSTEMTYPE название для новой системы. Вы должны использовать имя которое включает минимальную мажор версию операционной системы (такой SUNOS4 или LINUX2), так что различные релизы одинаковых систем могут поддерживаться без конфуза (смущений).

Добавьте секцию "#ifdef SYSTEMTYPE" к центральному util/sys_defs.h инклуд (include) файлу. Вы можете придумать особенные macro names (имена макросов). Пожалуйста выберите практичные особенные имена макросов такие как HAS_DBM или FIONREAD_IN_SYS_FILIO_H.

Я бы не рекомендовал использование "#ifdef SYSTEMTYPE" в индивидуальных исходниках. Хотя это может показаться быстрейшим решением, он создает беспорядок когда новые версии одинаковых SYSTEMTYPE необходимо будет обеспечить. У Вас вероятно все закончится замещением "#ifdef" секций поверх всего исходного кода заново.

6 - Установка программного обеспечения после удачной компиляции

Этот текст описывает как установить Postfix из исходных кодов. Смотрите файл PACKAGE_README если вы собираете пакет для распространения в другие системы.

6.1 - Сохранение существующих исполняемых файлов Sendmail

Важно: если вы заменяете существующую инсталляцию Sendmail с помощью Postfix, вам может понадобиться сохранить старый запуск программы sendmail чтобы в некоторое (другое) время приказать освободить почтовую очередь. Как суперпользователь, выполните следующие команды (ваши sendmail, newaliases и mailq программы могут находиться в различных местах):

# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
# mv /usr/bin/mailq /usr/bin/mailq.OFF
# chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF \
    /usr/bin/mailq.OFF

6.2 - Создание аккаунта и групп

Перед вашей установкой Postfix в первое время вам необходимо создать акаунт и группу:

6.3 - Установка Postfix

Для установки или переустановки Postfix из скомпилированного исходного кода, запустите одну из следующих команд в качестве супер пользователя:

# make install       (interactive версия, установка первый раз)

# make upgrade       (non-interactive версия, для upgrades)

6.4 - Конфигурирование Postfix

Продолжая секцию на которой вы пожелали запустить Postfix на вашей отдельной машине:

7 - Конфигурирование Postfix только для отправки почты

Если вы подошли к использованию Postfix только для отправки почты, нет необходимости менять вашу существующую установку sendmail. Вместо этого, установите ваш почтовый пользовательский агент так чтобы он вызывал программу [Postfix sendmail] напрямую.

Следуйте инструкциям в "Обязательные для редактирования конфигурационные файлы" в секции 10, и посмотрите "chroot или не chroot" текст в секции 11.

Вы ДОЛЖНЫ закоментировать запись "smtp inet" в /etc/postfix/master.cf, чтобы избежать конфликтов с действующим sendmail. Вставьте знак "#" в начале строки которая определяет сервис smtpd:

/etc/postfix/master.cf:
    #smtp      inet  n       -       n       -       -       smtpd

Запустите систему Postfix:

# postfix start

или, если вы полны ностальгии, используйте команду [Postfix sendmail]

# sendmail -bd -qwhatever

и понаблюдайте за вашим файлом maillog на наличие каких либо сообщений об ошибках. Путь может указывать на /var/log/maillog, /var/log/mail, /var/log/syslog, или куда-нибудь еще. Обычно, путь определяется в файле /etc/syslog.conf.

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

Заметка: большинство важных сообщений об ошибках пишутся в лог первыми. Затем идут не такие уж важные сообщеня.

В приказе инспектировать почтовую очередь, используется одна из следующих команд:

% mailq

% sendmail -bp

% postqueue -p

Смотри также "Забота и обиход" в секции 12 ниже.

8 - Конфигурирование Postfix для отправки и получения почты через виртуальный интерфейс

Альтернативно, вы можете использовать систему Postfix для отправки и получения почты оставив на пока нетронутой установку Sendmail, запустив Postfix на виртуальном адресе интерфейса. Просто сконфигурируйте ваш почтовый пользовательский агент к запрашиванию напрямую программы Postfix(а) sendmail.

В файле /etc/postfix/main.cf file, я бы указал

/etc/postfix/main.cf:
    myhostname = virtual.host.tld
    inet_interfaces = $myhostname
    mydestination = $myhostname

Следуйте инструкциям в "Обязательные для редактирования конфигурационные файлы" в секции 10, и посмотриет "chroot или не chroot" текст в секции 11.

Запустите систему Postfix:

# postfix start

или, если вы полны ностальгии, используйте Postfix(а) sendmail команду:

# sendmail -bd -qwhatever

и понаблюдайте за вашим файлом maillog на наличие каких либо сообщений об ошибках. Путь может указывать на /var/log/maillog, /var/log/mail, /var/log/syslog, или куда-нибудь еще. Обычно, путь определяется в файле /etc/syslog.conf.

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

Заметка: большинство важных сообщений об ошибках пишутся в лог первыми. Затем идут не такие уж важные сообщеня.

В приказе инспектировать почтовую очередь, используется одна из следующих команд:

% mailq

% sendmail -bp

% postqueue -p

Смотри также "Забота и обиход" в секции 12 ниже.

9 - Запуск Postfix взамен Sendmail

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

# /usr/sbin/sendmail.OFF -q

Заметка: это старый синтаксис sendmail. Новые версии используют отдельные процессы для подачи почты и чтобы запустить очередь.

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

# postfix start

или, если вы полны ностальгии, используйте Postfix(а) sendmail команду:

# sendmail -bd -qwhatever

и понаблюдайте за вашим файлом maillog на наличие каких либо сообщений об ошибках. Путь может указывать на /var/log/maillog, /var/log/mail, /var/log/syslog, или куда-нибудь еще. Обычно, путь определяется в файле /etc/syslog.conf.

% egrep '(reject|warning|error|fatal|panic):' /some/log/file

Заметка: большинство важных сообщений об ошибках пишутся в лог первыми. Затем идут не такие уж важные сообщеня.

В приказе инспектировать почтовую очередь, используется одна из следующих команд:

% mailq

% sendmail -bp

% postqueue -p

Смотри также "Забота и обиход" в секции 12 ниже.

10 - Обязательные для редактирования конфигурационные файлы

Заметка: материал охваченный в этой секции рассмотрен подробнее в документе BASIC_CONFIGURATION_README document. Информация представленная ниже нацелена на опытных системных администраторов.

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

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

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

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

/etc/postfix/main.cf:
    parameter = value

и вы используете его вставляя знак "$" в начале его имени:

/etc/postfix/main.cf:
    other_parameter = $parameter

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

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

# postfix reload

10.2 - Домен поумолчанию для неполных адресов

В первую очередь вы должны определить домен который будет добавлен к неполному адресу (т.е. адресу без @domain.tld). "myorigin" параметр поумолчанию для локального hostname, но это вероятно хорошо только для очень маленьких сайтов (с малым количеством узлов).

Некоторые примеры (используйте только один):

/etc/postfix/main.cf:
    myorigin = $myhostname    (send mail as "user@$myhostname")
    myorigin = $mydomain      (send mail as "user@$mydomain")

10.3 - Как домены получают (почту) локально

Затем вам необходимо указать какие почтовые адреса Postfix будут получать почту локально.

Некоторые примеры (используйте только один):

/etc/postfix/main.cf:
    mydestination = $myhostname, localhost.$mydomain, localhost
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    mydestination = $myhostname

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

10.4 - Proxy/NAT интерфейс адреса

Параметр proxy_interfaces указывает все сетевые адреса которыми (или через которые) Postfix получает почту путем прокси(рования) или сетевой трансляцией адреса юнита.

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

Пример: узел после NAT box запущенный резервным узлом MX.

/etc/postfix/main.cf:
    proxy_interfaces = 1.2.3.4 (the proxy/NAT external network address)

10.5 - Какие локальные клиенты (могут) релэ(ить) почту от

Если ваша машина доступна сети, то затем вы должны указать какие клиентские IP адреса являются авторизированными для релэя (отправки через) этой почты через вашу машину в Интернет. По умолчанию установка включает все подсети к которым машина подсоединена. Это может дать релэй доступ для большого множества клиентов. Мои собственные установки:

/etc/postfix/main.cf:
    mynetworks = 168.100.189.0/28, 127.0.0.0/8

10.6 - Какие релэй цели допускаются чужим

Если ваша машина доступна сети, то затем вы должны также указать будет ли Postfix принимать (передавать) почту от чужих. По умолчанию, установка, будет принимать (передавать) почту для всех доменов (и поддоменов) которые перечислены в $mydestination. Это может дать релэй доступ для большого множества клиентов. Рекомендуемые установки (используется только один):

/etc/postfix/main.cf:
    relay_domains =            (do not forward mail from strangers)
    relay_domains = $mydomain  (my domain and subdomains)
    relay_domains = $mydomain, other.domain.tld, ...

10.7 - Необязательное: конфигурирование smart узла для удаленной доставки

Если вы находитесь за (закрыты) файрвалом, вы должны установить relayhost. Если вы можете, укажите организационное доменное имя такое которое Postfix может использовать в DNS запросах (поисках), и также которое он может уступить вторичному узлу MX когда основной узел MX упадет. Иначе говоря точно укажите жестко-заданное (по-видимому полное) имя узла (hostname).

Некоторые примеры (используйте только один):

/etc/postfix/main.cf:
    relayhost = $mydomain
    relayhost = [mail.$mydomain]

Форма закрытая с помощью [] игнорируется DNS MX поисками.

По умолчанию, SMTP клиент будет делать DNS запросы даже когда вы укажите релэй узел. Если ваша машина не имеет доступа к DNS серверу, отключите SMTP клиентские DNS поиски похожим на это:

/etc/postfix/main.cf:
    disable_dns_lookups = yes

Файл STANDARD_CONFIGURATION_README имеет множество намеков и подсказок для зафайрваленных и/или dial-up сетей.

10.8 - Создание базы данных алиасов

Postfix использует Sendmail-совместимые aliases(5) таблицы для перенаправления почты для local(8) получателей. Обычно, эта информация сохраняется в двух файлах: в текстовом файле /etc/aliases и индексированном файле /etc/aliases.db. Команда "postconf alias_maps" попросит вас сказать расположение текстового файла.

Во-первых, убедитесь в обновлении текстового файла с алиасами для root, postmaster и "postfix" что перенаправляется почта реальным персонам. Postfix имеет образец файла алиасов /etc/postfix/aliases, который вы можете адаптировать к местным условиям.

/etc/aliases:
    root: you
    postmaster: root
    postfix: root
    bin: root
    etcetera...

Заметка: здесь не должно быть пробелов (whitespace) перед ":".

В конце, постройте индексированный файл алиасов с помощью одной из следующих команд:

# newaliases
# sendmail -bi

11 - Chroot или не chroot

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

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

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

По умолчанию /etc/postfix/master.cf указывает что Postfix не запускается демоном chroot. В указании включить chroot операцию, измените файл /etc/postfix/master.cf. Инструкции находятся в файле.

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

Дополнительно, вы едва ли конечно нуждаетесь в конфигурировании syslogd так как он прослушивается на сокете внутри Postfix директории очереди. Примеры для указанных систем:

FreeBSD:
# mkdir -p /var/spool/postfix/var/run
# syslogd -l /var/spool/postfix/var/run/log
Linux, OpenBSD:
# mkdir -p /var/spool/postfix/dev
# syslogd -a /var/spool/postfix/dev/log

12 - Забота и обиход системы Postfix

Демона Postfix процессы запускаются в фоновом режиме, и журналируются проблемы и нормальная деятельность для демона syslogd. Названия логфайлов указывается в /etc/syslog.conf. Очень кратко вам необходимо нечто похожее:

/etc/syslog.conf:
    mail.err                                    /dev/console
    mail.debug                                  /var/log/maillog

ВАЖНО: syslogd не создает файлы. Вы должны создать их перед стартом (рестартом) syslogd.

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

Будем надеяться число проблем будет малым, но хорошая идея запускать каждую ночь перед ротацией файлов syslog:

# postfix check
# egrep '(reject|warning|error|fatal|panic):' /some/log/file

Документ DEBUG_README описывает значение "warning" и т.п. категорий в журналировании Postfix.

Hosted by uCoz