Минимальный почтовый сервер на основе Postfix и Dovecot. Часть 2: Postfix

от автора

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

В обязанности Postfix входит:

  1. Принимать почту от других серверов для обслуживаемых нами пользователей и переплавлять ее в почтовые ящики c помощью Dovecot.
  2. Принимать почту от аутентифицированных пользователей и доставлять ее по назначению.
  3. Принимать и доставлять по назначению почту от локальных служб и сервисов, запущенных на нашем сервере. Как правило, она адресована пользователю root, но возможны и другие получатели, в том числе и внешние.

Для определенности обозначим:

  • Основной домен (example1.com) – домен в котором находится наш почтовый сервер.
  • Имя нашего почтового сервера – mail.example1.com.
  • Главный администратор (user1@example1.com) – пользователь почтовой системы, которому будет перенаправлена вся локальная почта, в том числе адресованная root.
  • Все пользователи почтовой системы являются виртуальными, и никак не связаны с локальными пользователями. Место и способ хранения почты описаны в первой части.
  • Локальные пользователи не являются пользователями почтовой системы и не могут ею пользоваться, пока для них не будет создана учетная запись в файле /etc/dovecot/users.

Изменения, внесенные в файл main.cf

 alias_database = hash:/etc/aliases  alias_maps = hash:/etc/aliases +append_dot_mydomain = no +biff = no  command_directory = /usr/sbin  config_directory = /etc/postfix  daemon_directory = /usr/libexec/postfix  data_directory = /var/lib/postfix  debug_peer_level = 2 +disable_vrfy_command = yes  html_directory = no -inet_interfaces = localhost +inet_interfaces = all  inet_protocols = all +local_recipient_maps = $alias_maps  mail_owner = postfix +mailbox_size_limit = 409600000  mailq_path = /usr/bin/mailq.postfix  manpage_directory = /usr/share/man +message_size_limit = 8192000  mydestination = $myhostname, localhost.$mydomain, localhost +myhostname = mail.example1.com +mynetworks = 127.0.0.1/32 [::1]/128 +mynetworks_style = host  newaliases_path = /usr/bin/newaliases.postfix  queue_directory = /var/spool/postfix  readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES  sample_directory = /usr/share/doc/postfix-2.6.6/samples  sendmail_path = /usr/sbin/sendmail.postfix  setgid_group = postdrop +smtp_tls_security_level = may +smtpd_banner = $myhostname ESMTP +smtpd_helo_required = yes +smtpd_recipient_restrictions = reject_unknown_recipient_domain,    permit_mynetworks,    reject_non_fqdn_recipient,    reject_unauth_destination,    reject_unverified_recipient,   permit +smtpd_sasl_path = private/auth +smtpd_sasl_type = dovecot +smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem +smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem +smtpd_tls_security_level = may +smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache +strict_rfc821_envelopes = yes  unknown_local_recipient_reject_code = 550 +virtual_alias_domains = example2.com ... +virtual_alias_maps = hash:/etc/postfix/virtual +virtual_mailbox_domains = example1.com, example3.com .... +virtual_transport = lmtp:unix:private/dovecot-lmtp 

  1. Основной параметр, это конечно:
    myhostname = mail.example1.com

    Это даст нам следующие значения для других важных настроек:

    mydomain = example1.com mydestination =  mail.example1.com, localhost.example1.com, localhost myorigin = mail.example1.com

    нас это устраивает, так что оставим все по умолчанию.
    Желательно, чтобы PTR-запись нашего сервера указывала на mail.example1.com.

  2. По умолчанию, Postfix ищет получателей локальной почты в файле /etc/passwd. Или перенаправляет почту используя файл псевдонимов — /etc/aliases. Список локальных пользователей мы использовать не будем, а вот /etc/aliases нам еще пригодится.
    local_recipient_maps = $alias_maps

    Добавим в файле /etc/aliases:

    root:           user1@example1.com

    Тем самым перенаправив почту (получателем которой является псевдоним из файла /etc/aliases) главному администратору. Файл /etc/aliases требует переиндексации, с помощью команды newaliases, после внесения изменений.
    К сожалению, я не нашел простого способа как запретить прием почты для получателей указанных в файле /etc/aliases из Интернета. Для рассматриваемой системы, из Интернета будут доступны адреса: alias@mail.example1.com, alias@local.example1.com, alias@[ip.address], где alias – это псевдоним из файла /etc/aliases. Вся почта, отправленная на эти адреса, не только с локальной машины, но и из Интернета, будет попадать по адресу user1@example1.com. Напомню, что псевдоним для postmaster должен быть обязательно.

  3. Настроим возможность отправки почты без аутентификации, только со своего компьютера.
    mynetworks_style = host mynetworks = 127.0.0.1/32 [::1]/128

  4. Настроим прием почты для наших доменов.
    virtual_mailbox_domains = example1.com, example3.com … virtual_alias_domains = example2.com …

    Для доменов-псевдонимов, Postfix ищет получателей только в файле /etc/postfix/virtual и если не находит, отклоняет почту. Для доменов из «virtual_mailbox_domains», будет также запрошен список обслуживаемых пользователей у Dovecot.

    virtual_transport = lmtp:unix:private/dovecot-lmtp virtual_alias_maps = hash:/etc/postfix/virtual

    Файл /etc/postfix/virtual требует переиндексации, с помощью команды postmap, после внесения изменений. Как минимум, для каждого обслуживаемого домена, желательно, завести в нем запись для пользователя postmaster, если у вас нет пользователя с таким именем.

  5. Основная директива, которая ограничивает прием почты из Интернета, в наши почтовые ящики. Порядок указания опций имеет значение. Будем принимать почту из Интернета, только для обслуживаемых нашим сервером пользователей или с локальной машины для кого угодно.
    smtpd_recipient_restrictions =      reject_unknown_recipient_domain,      permit_mynetworks,      reject_non_fqdn_recipient,      reject_unauth_destination,      reject_unverified_recipient,      permit

  6. Настроим аутентификацию.
    Postfix использует общий файл настроек main.cf, но при запуске служб, из файла master.cf, можно переопределить некоторые из них, или указать недостающие. По умолчанию мы не будем разрешать аутентификацию, но внесем необходимые настройки, для уменьшения количества параметров в файле master.cf.
    smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth

  7. Настроим TLS, упрощенно, воспользовавшись временным сертификатом Dovecot.
    smtpd_tls_cert_file=/etc/pki/dovecot/certs/dovecot.pem smtpd_tls_key_file=/etc/pki/dovecot/private/dovecot.pem smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache smtpd_tls_security_level = may smtp_tls_security_level = may

  8. Напоследок немного опциональных украшательств.
    smtpd_banner = $myhostname ESMTP biff = no strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_helo_required = yes

  9. Для того чтобы запустить smtp сервер на 587 порту, с возможностью аутентификации, нам необходимо добавить в файл master.cf следующие строки:
    submission inet n       -       n       -       -       smtpd   -o smtpd_tls_security_level=encrypt   -o smtpd_sasl_auth_enable=yes   -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Полный перечень параметров main.cf доступен здесь.

Для управления нашей системой используются следующие файлы:
/etc/dovecot/users – список пользователей и паролей,
/etc/aliases – список псевдонимов, используется для перенаправления почтовых уведомлений от локальных служб, выполняемых на нашей машине, системному администратору,
/etc/postfix/virtual – список псевдонимов, используется для перенаправления почтовых сообщений, предназначенных для наших доменов,
/etc/postfix/main.cf – с помощью параметров «virtual_mailbox_domains», «virtual_alias_domains» указываем список обслуживаемых нашей системой доменов.

Настройка почтовой системы, на мой взгляд, является наисложнейшей задачей в системном администрировании. По этому поводу написаны книги. Я хотел описать каждый параметр более подробно, но, к сожалению, получался просто плохой пересказ руководства. Поэтому, я старался оставить комментарии только к наиболее важным моментам, но еще больше осталось за рамками статьи. В любом случае, прочтение и понимание документации необходимо для настройки системы. А эта статья, как и множество подобных, написана для того, чтобы помочь сделать первый шажок в освоение сложной системы.
Разрешите откланяться.

ссылка на оригинал статьи http://habrahabr.ru/post/258407/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *