Postfix | Русскоязычная документация по Ubuntu

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

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

Вводная часть и настройка Dovecot.

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

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

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

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

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

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

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

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

    Update. В руководстве есть предупреждение о возможности зацикливания доставки почты.

    Caution: in order to avoid mail delivery loops, you must list all hostnames of the machine, including $myhostname, and localhost.$mydomain. На мой взгляд, не совсем понятно, почему нужно прописывать ВСЕ имена хоста в список. Поясню, о чем идет речь на примере.
    Предположим, что в файле /etc/hosts есть запись – «127.0.0.1 localhost4» и кто-то или что-то c нашего сервера, специально или случайно, отправляет письмо по адресу root@localhost4.
    1. Postfix берется за доставку, т.к. отправитель находится в доверенной сети.
    2. Наш сервер не является конечным получателем, т.к. мы не указали домен localhost4 в mydestination.
    3. Postfix пересылает письмо для домена localhost4 по адресу, 127.0.0.1 и переходит к шагу 1.

  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@localhost.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» указываем список обслуживаемых нашей системой доменов.

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

Разрешите откланяться.

Аутентификация smtp

SMTP-AUTH позволяет клиенту идентифицировать себя через механизм аутентификации (SASL). Транспортный уровень безопасности (TLS) будет использоваться для шифрования процесса аутентификации. После аутентификации SMTP сервер позволит клиенту передавать почту.

1. Настройте Postfix на SMTP-AUTH с использованием SASL (Dovecot SASL):

sudo postconf -e 'smtpd_sasl_type = dovecot'
sudo postconf -e 'smtpd_sasl_path = private/auth-client'
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_recipient_restrictions = 
permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Настройка smtpd_sasl_path является путем, относительным к каталогу запросов Postfix.

2. Далее создайте или получите цифровой сертификат для TLS. Смотрите подробности в разделе Сертификаты. Этот пример также использует Центр сертификации (CA). Для информации по созданию сертификатов CA смотрите раздел Центр сертификации.

3. Как только у вас появился сертификат, настройте Postfix на использование TLS шифрования как для входящей, так и для исходящей почты:

sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'myhostname = mail.example.com'

4. Если вы используете собственный Центр сертификации, для подписи сертификата введите:

sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'

Опять же, для подробностей смотрите раздел Сертификаты.

После выполнения всех команд Postfix настроен на SMTP-AUTH и самоподписанный сертификат создан для TLS шифрования.

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

sudo /etc/init.d/postfix restart

Postfix поддерживает SMTP-AUTH как описано в RFC2554. Он основан на SASL. Однако все-таки необходимо настроить аутентификацию перед тем, как вы сможете использовать SMTP-AUTH.

============= openvpn =============

OpenVPN IPv4 не работает без iptables.

У меня iptables вот такие для VPN:

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
##iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

YY.YY.YY.YY — это мой статический IPv4 адрес локальной машины.

10.8.0.0/24 — IPv4 сеть openvpn. IPv4 адреса для клиентов openvpn.


Последовательность правил важна.

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
...
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

Это ограничение, чтобы только я со своего статического IP мог бы воспользоваться OpenVPN.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
  -- или --
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE

Для пробрасывания IPv4 пакетов между клиентами OpenVPN и интернетом — нужно прописать одну из этих команд.

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

Чтобы все настройки iptables подхватывались после reboot — надо сохранить их куда-то.

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

Такие имена выбраны не случайно. Их использует пакет «iptables-persistent».

apt-get install iptables-persistent

Установка основного пакета OpenVPN:

apt-get install openvpn easy-rsa

Настроим шаблон для сертификатов (подставить свои значения):

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
ln -s openssl-1.0.0.cnf openssl.cnf


Отредактируем настройки шаблона сертификатов:

mcedit vars

============= multi-interfaces =============

Для настройки интерфейсов надо прописать вот такое в “/etc/network/interfaces”.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eno1
iface eno1 inet static
        address XX.XX.XX.X0/24
        gateway XX.XX.XX.1
        dns-nameservers 127.0.0.1 213.248.1.6
        post-up ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1t
        post-up ip route add default via XX.XX.XX.1 table eno1t
        post-up ip rule add table eno1t from XX.XX.XX.X0
        post-up ip rule add table eno1t to XX.XX.XX.X0

auto eno1:1
iface eno1:1 inet static
address XX.XX.XX.X1
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X1
        post-up ip rule add table eno1t to XX.XX.XX.X1
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t

auto eno1:2
iface eno1:2 inet static
address XX.XX.XX.X2
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X2
        post-up ip rule add table eno1t to XX.XX.XX.X2

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
        gateway XXXX:XXXX:XXXX:XXXX::1
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE

# The secondary network interface
allow-hotplug eno2
iface eno2 inet static
        address XX.XX.XX.X5
        netmask 255.255.255.0
        post-up   ip route add XX.XX.XX.0/24 dev eno2 src XX.XX.XX.X5 table eno2t
        post-up   ip route add default via XX.XX.XX.1 table eno2t
        post-up   ip rule add table eno2t from XX.XX.XX.X5
        post-up   ip rule add table eno2t to XX.XX.XX.X5
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t

iface eno2 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:2::/96
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE

# OpenVPN network
iface tun0 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:3::/80

Установка postfix

Установим из пакетов сам Postfix и коннектор к базе данных MySQL:

sudo apt install postfix postfix-mysql -y

После окончания установки в консоли откроется графический интерфейс первоначальной настройки.

На первом экране настройки выбираем Internet Site:

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

На этом настройка почтового сервера окончена и можно переходить к работе с остальными инструментами для почтового обмена. Если позже появится необходимость внести изменения в выполненные настройки, можно воспользоваться утилитой dpkg-reconfigure:

sudo dpkg-reconfigure postfix

Для настройки Postfix, закомментируем в файле /etc/postfix/main.cf следующие строки символом #:

sudo nano /etc/postfix/main.cf
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_tls_security_level=may
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

Затем добавляем следующее:

virtual_transport=lmtp:unix:private/dovecot-lmtp
relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base=/var/mail/vmail/
local_recipient_maps=$virtual_mailbox_maps

smtpd_sasl_auth_enable=yes
smtpd_sasl_type=dovecot
smtpd_sasl_path=private/auth
broken_sasl_auth_clients=yes
smtpd_sasl_security_options=noanonymous

smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/postfix/certs/cert.pem
smtpd_tls_key_file=/etc/postfix/certs/key.pem
smtpd_sasl_tls_security_options=noanonymous
smtpd_tls_auth_only=yes

smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain

smtpd_banner=$myhostname ESMTP

strict_rfc821_envelopes=yes
disable_vrfy_command=yes
smtpd_helo_required=yes

Открываем файл конфигурации /etc/postfix/master.cf на редактирование:

sudo nano /etc/postfix/master.cf

Добавляем в конец файла следующие строки:

============= обращение к сообществу =============

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

Чтобы пользователь мог бы у себя на клиенте (outlook, thunderbird, browser-plugin, …) создать пару ключей. Публичный и приватный. Публичный — отправить в DNS. Приватный — сохранять на клиенте. Почтовые сервера бы умели применять публичный ключ для отправки конкретному адресату.

И для защиты от спама при таких письмах (да, почтовый сервер жи не сможет посмотреть контент) — надо будет ввести 3 правила:

  1. Обязательная настоящая подпись DKIM, обязательный SPF, обязательный rDNS.
  2. Нейронная сеть на тему обучения антиспама БД к ней на стороне клиента.
  3. Алгоритм шифрования должен быть таким, что отправляющая сторона должна потратить на шифрования в 100 раз больше мощностей CPU, чем принимающая сторона.

Кроме публичных писем — разработать стандарт письма-предложения «начать защищённую переписку». Один из пользователей (почтовый ящик) шлёт другому почтовому ящику письмо с аттачем. В письме текст-предложение начать защищённый канал связи для переписки и публичный ключ владельца почтового ящика (при этом приватный ключ на стороне клиента).

Можно даже пару ключей делать специально для каждой переписки. Пользователь-получатель может принять это предложение и отправить свой публичный ключ (тоже сделанный специально для данной переписки). Далее первый пользователь отправляет служебное контрольное письмо (зашифрованное публичным ключом второго пользователя) — при получении которого второй пользователь может считать сформированный канал связи надёжным.

Для борьбы с перехватом ключей по дороге — надо в протоколе предусмотреть возможность передачи хотя-бы одного публичного ключа при помощи флэшки.

И самое главное — чтобы это всё работало (вопрос «а кто за это заплатит?»):Ввести почтовые сертификаты стоимостью от 10$ за 3 года. Которые будут позволять отправителю указать в dns, что «мои публичные ключи находятся вон-там». И будут давать возможность начинать защищённое соединение.

Безопасность

Если установка Postfix прошла по стандартному сценарию, то как минимум дефолтные сертификаты должны присутствовать. В том или ином виде конфиг будет содержать параметры:

Где первые два параметра — пути к файлу сертификата и закрытому ключу, следующие два — пути к кэшу. Менять эти значения по умолчанию не нужно.

Примечание: В этом куске конфига вы можете встретить параметр smtpd_use_tls=yes. Его можно безболезненно убрать, поскольку он устарел и предназначен для совместимости устаревших версий Postfix. Вместо него используется smtpd_tls_security_level, значение которого имеет приоритет.

Следующую секцию параметров, относящуюся к SASL, вам нужно добавить вручную:

Ключ smtpd_sasl_auth_enable по умолчанию имеет значение no, то есть аутентификация не требуется. Именно поэтому нужно задать yes в явном виде. По умолчанию Postfix использует Cyrus SASL и чтобы он обратил свой взор в сторону Dovecot, нужно изменить параметр smtpd_sasl_type и указать путь до сокета в параметре smtpd_sasl_path.

Примечание: полный путь до сокета будет /var/spool/postfix/private/auth, просто параметр smtpd_sasl_path является составным и по умолчанию включает в себя  путь до очереди — queue_directory = /var/spool/postfix .

Советую к прочтению официальные мануалы34.

Ну и последний момент: проследите, чтобы в конфиге был определен параметр smtpd_relay_restrictions (иначе почта отправляться не будет). По умолчанию для только что установленного Postfix он будет иметь значения permit_mynetworks permit_sasl_authenticated defer_unauth_destination.

С настройками TLS и SASL разобрались, двигаемся дальше.

Файлы журналов

Postfix посылает все сообщения в журнал /var/log/mail.log. Однако сообщения об ошибках и предупреждения могут иногда теряться в нормальном журнале, поэтому они отдельно сохраняются в /var/log/mail.err и /var/log/mail.warn соответственно.

Для просмотра сообщений журнала в режиме реального времени вы можете использовать команду tail -f:

tail -f /var/log/mail.err

Количество деталей, записываемых в журнал, может быть увеличено. Ниже приведено несколько опций настройки для увеличения уровня детализации некоторых областей, описанных выше.

1. Для увеличения TLS активности журнала, установите опции smtpd_tls_loglevel значение от 1 до 4.

sudo postconf -e 'smtpd_tls_loglevel = 4'

2. Если вы испытываете трудности с отправкой или приемом почты отдельного домена, вы можете включить его в параметр debug_peer_list.

sudo postconf -e 'debug_peer_list = problem.domain'

3. Вы можете увеличить детализацию любого сервиса Postfix редактированием /etc/postfix/master.cf, добавив -v после соответствующей записи. Для примера изменим запись smtp:

smtp      unix  -       -       -       -       -       smtp -v

4. Для увеличения количества информации в журнале при поиске проблем с SASL, вы можете установить следующие опции в /etc/dovecot/dovecot.conf:

auth_debug=yes
auth_debug_passwords=yes

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

Настройка dns

К этому моменту уже должны быть созданы все основные записи у вашего DNS-провайдера. Как минимум вам необходимы:

А также второстепенные (но от этого не менее важные):

  • PTR. Это обратная запись, которая ставит в соответствие ip-адресу какое-либо DNS-имя. Создать эту запись должен ваш интернет-провайдер, ведь он является владельцем публичных ip-адресов, которые вы используете;

Примечание: очень много серверов настроены таким образом, что проверяют наличие этой записи. Сначала они смотрят имя, на которое указывает MX-запись, а потом сравнивают его с именем, которое возвращает PTR-запись и если эти имена отличаются (или PTR вообще отсутствует), то вся почта отклоняется как спам.

В логах своего сервера вы увидите что-то подобное:450 4.7.1 Client host rejected: cannot find your reverse hostnameТакие жесткие настройки особенно любят устанавливать владельцы Postfix, указав в конфиге ограничения reject_unknown_reverse_client_hostname (для проверки просто существования PTR) или reject_unknown_client_hostname (а эта опция уже требует зеркального разрешения имен/адресов — name>address, address>name).

  • SPF. На самом деле указывается внутри другой — TXT-записи — и помогает перечислить серверы, имеющие право отправлять почту от имени вашего домена.

Ну а теперь приступаем к развертыванию Postfix.

Postfix — main.cf

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

Открываем основной конфиг и добавляем туда параметры:

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

Итак, ключевыми параметрами, влияющими на связку Dovecot-lda Postfix, являются:

  • virtual_transport — транспорт, используемый Postfix для конечной доставки сообщений. Параметр используется вместе с virtual_mailbox_domains;
  • dovecot_destination_recipient_limit — максимальное количество получателей для каждого сообщения, отправленное Dovecot’у. При работе с виртуальными пользователями требуется установка значения в 1, иначе получите в логах ошибку warning: pipe flag ‘D’ requires dovecot_destination_recipient_limit = 1. Ограничение не означает, что вам придется каждому виртуальному пользователю отправлять одно и то же сообщение персонально, просто на этапе обработки оно будет разбиваться и отправляться каждому пользователю отдельно.

Почтовый стек доставки

Другой опцией настройки Postfix для SMTP-AUTH является использование пакета mail-stack-delivery (ранее он назывался dovecot-postfix). Этот пакет установит Dovecot и настроит Postfix для его использования совместно с SASL аутентификацией и как агента доставки почты (MDA). Пакет также настроит Dovecot для IMAP, IMAPS, POP3 и POP3S.

Чтобы установить пакет, введите в терминале:

sudo apt-get install mail-stack-delivery

У вас теперь рабочий почтовый сервер, но существует несколько опций, которые вы, возможно, захотите изменить в дальнейшем. Например, пакет использует сертификат и ключ от ssl-cert пакета, и в рабочей среде, вы должны использовать сертификат и ключ, сгенерированный для хоста. Смотрите радел Сертификаты для дополнительных деталей.

После того, как вы получили заказанный сертификат для сервера, замените следующую опцию в /etc/postfix/main.cf:

smtpd_tls_cert_file = /etc/ssl/certs/ssl-mail.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.key

Перезапустите Postfix:

sudo /etc/init.d/postfix restart

Настройка dkim

Для чего нужен DKIM? Этот инструментарий добавляет к заголовкам письма цифровую электронную подпись, что по задумке должно гарантировать подлинность того, что письмо отправлено именно от указанного в заголовках домена. Для генерации DKIM-ключа мы будем использовать утилиту opendkim. Установим утилиту, запустим ее и добавим в автозапуск.

sudo apt install opendkim opendkim-tools -y
sudo systemctl start opendkim
sudo systemctl enable opendkim

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

sudo mkdir -p /etc/opendkim/keys/<ваш домен>
sudo opendkim-genkey --directory /etc/opendkim/keys/<ваш домен>/ --domain <ваш домен> --selector dkim
sudo chown -R opendkim:opendkim /etc/opendkim/keys/<ваш домен>
sudo nano /etc/opendkim.conf

Настройка брандмауэра для dovecot

Аналогично Postfix, для настроек будем использовать утилиту ufw. Проверим текущее правило для сервисов Dovecot (их два):

sudo cat /etc/ufw/applications.d/dovecot-imapd
[Dovecot IMAP]
title=Secure mail server (IMAP)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=143/tcp

[Dovecot Secure IMAP]
title=Secure mail server (IMAPS)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=993/tcp

# sudo cat /etc/ufw/applications.d/dovecot-pop3d
[Dovecot POP3]
title=Secure mail server (POP3)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=110/tcp

[Dovecot Secure POP3]
title=Secure mail server (POP3S)
description=Dovecot is a mail server whose major goals are security and extreme
 reliability.
ports=995/tcp

Разрешаем сетевое взаимодействие с Dovecot при помощи следующей команды:

sudo ufw allow 'Dovecot IMAP'
sudo ufw allow 'Dovecot POP3'

Настройка брандмауэра для postfix

Для внесения изменений изменений в правила брандмауэра воспользуемся специальной утилитой ufw (расшифровывается как uncomplicated firewall). По сравнению с известным iptables, у ufw проще синтаксис. Установим и запустим ufw:

sudo apt install ufw
sudo ufw enable

Проверим текущее правило для Postfix:

cat /etc/ufw/applications.d/postfix
[Postfix]
title=Mail server (SMTP)
description=Postfix is a high-performance mail transport agent
ports=25/tcp

[Postfix SMTPS]
title=Mail server (SMTPS)
description=Postfix is a high-performance mail transport agent
ports=465/tcp

[Postfix Submission]
title=Mail server (Submission)
description=Postfix is a high-performance mail transport agent
ports=587/tcp

Разрешаем сетевое взаимодействие с Postfix при помощи следующей команды:

sudo ufw allow Postfix

============= заключение =============

Для тестирования всей статьи я собирался арендовать выделенный сервер на месяц и купить домен с ssl сертификатом.

Но жизненные обстоятельства сложились так этот вопрос затянулся на 2 месяца.И вот когда появилось снова свободное время — решил публиковать статью как есть, а не рисковать тем, что публикация затянется ещё на год.

Если будет достаточно много вопросов типа «а вот тут не достаточно подробно описано» — тогда наверное найдутся силы таки взять выделенный сервер с новым доменом и новым SSL сертификатом и ещё подробнее описать и главное — выявить все упущенные важные детали.

Также хотелось бы получить отзывы на тему идеи про почтовые сертификаты. Если идея понравится — постараюсь найти силы написать черновик для rfc.

При копировании больших кусков статьи — указывать ссылку на эту статью.При переводе на любой другой язык — указывать ссылку на эту статью.На английский язык я сам постараюсь перевести и оставлю перекрёстные ссылки.

Установка и настройка mysql для postfix и roundcube

Базу данных MySQL мы будем использовать сразу для двух целей: хранение учетных данных пользователей Postfix и хранение конфигурации и данных Roundcube.

Установим базу данных MySQL, PHP и веб-сервер Apache:

sudo apt install mysql-server mysql-client apache2 libapache2-mod-php php php-imap php-mysql php-mbstring

Запускаем MySQL, веб-сервер и добавим их в автозагрузку:

sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl start mysql
sudo systemctl enable mysql

После установки базы данных, зададим пароль для учетной записи root и создадим базы данных для Postfix и Roundcube:

sudo mysql -u root -p

В консоли mysql> выполняем следующие команды, подтверждая каждую нажатием Enter:

Необязательные настройки

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

В более ранних версиях Dovecot (2.0 и старше) использовался плагин Autocreate12, теперь же он устарел и рекомендуют использовать директиву namespace inbox13. Вот один из вариантов конфигурации:

Теперь можно объединить все настройки в один работающий конфиг.

Хранилище

Настройка хранилища в упрощенной конфигурации с локальными учетками упирается всего лишь в один параметр:

Запись означает, что почта будет храниться в формате maildir9 (maildir:) в домашнем каталоге текущего пользователя (~/) внутри папки Maildir (Maildir), используя иерархию каталогов (:LAYOUT=fs), а не в плоском виде как то подразумевает формат Maildir 10.

На этом настройка хранилища завершена.

Dovecot — 10-master.conf

Первым делом нужно указать путь до сокета, а также пользователя и группу, под которыми будет выполняться процесс. Сделать это нужно в конфигурационном файле 10-master.conf, который мы редактировали ранее в этой статье. Поскольку его бэкап уже сделан, сразу открываем для редактирования:

Добавляем в директиву auth вот такие параметры:

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

Сохраняем изменения, закрываем файл. Напоминаю, что аналогичные действия для любого конфига в conf.d/ вы можете проделать в файле dovecot.conf, чтобы держать всю конфигурацию в одном единственном файле.

Вывод

Помимо агента доступа к почте (MAA), Dovecot может использоваться как агент локальной доставки (MDA или LDA, что одно и то же), а также как отдельный фреймворк SASL вместо традиционного Cyrus SASL. Это значительно упрощает общую конфигурацию и уменьшает количество необходимых компонентов.

Если у Postfix вся конфигурация упирается в файлы main.cf и master.cf, то ситуация с Dovecot несколько сложнее — он имеет множество конфигов в каталоге conf.d/. Вы можете раскидывать настройки по этим файлам, а можете сосредоточить в одном dovecot.conf, выбор за вами.

Связка postfix и dovecot — sasl

В ранних версиях Postfix (до 2.3) допускалось использование для аутентификации6 только библиотеки Cyrus SASL. На данный момент доступен также Dovecot SASL7. Чтобы проверить совместимость, выполните команду:

Процесс настройки Dovecot SASL значительно проще и доступнее, им и займемся, начав с настроек Postfix.

Связка postfix и dovecot — lda

Я подразумеваю, что Dovecot у вас уже установлен, но если нет, то выполните команду:

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

Стоит отметить, что задать необходимые настройки Dovecot вы можете в одном конфигурационном файле dovecot.conf, а не растаскивать их по конфигам в директории /etc/dovecot/conf.d/. На мой взгляд вариант со всеми настройками в одном файле выглядит гораздо более удобным и простым.

Аутентификация

Также как и Postfix Dovecot будет использовать обычные учетные записи пользователей, созданные в системе (хоть и реально поддерживаются разные варианты5). Для этого необходимо настроить секцию passdb6.

Dovecot — auth-sql.conf.ext

Теперь остается только немного подкорректировать файл auth-sql.conf.ext, ведь по умолчанию он указывает на конфиг SQL /etc/dovecot/dovecot-sql.conf.ext, вместо созданного в предыдущем разделе файла /etc/dovecot/dovecot-sql.conf, но сначала бэкап:

Итоговое содержимое файла должно выглядеть так:

Сохраняем изменения и закрываем файл.

На этом настройки связки Dovecot-SASL Postfix завершены, не забудьте перезапустить Dovecot:

Тестируйте конфигурацию, анализируйте логи.

Установка веб-интерфейса roundcube

Веб-сервис Roundcube представляет из себя почтовый клиент, который предназначен для получения и отправки электронной почты. Работает на основе сервера приложений Apache и базы данных MySQL, которые мы уже подготовили к работе.

Начнем с создания конфигурации для Apache:

sudo mkdir /var/www/html/sites
sudo mkdir /var/www/html/sites/roundcube
sudo nano /etc/apache2/sites-available/roundcube.conf

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

Перед началом работы с Dovecot, установим пакеты самого приложения и коннектор для работы с базой данных MySQL. Сразу же активируем службу и добавим в автозапуск.

sudo apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql -y
sudo systemctl start dovecot
sudo systemctl enable dovecot

Создадим специализированную учетную запись для работы с Dovecot и добавим права sudo:

Настройка dmarc

DMARC позволяет настроить указание для других сервисов что делать с теми письмами, которые не были одобрены по итогу проверок DKIM и SPF. Самый оптимальный способ — это ничего не делать и отправить уведомление администратору домена. Именно такую настройку мы и произведем в консоли управления доменом. Для этого также создаем новую TXT-запись.

v=DMARC1; p=none; rua=mailto:dmarc-test@<ваш домен>

Postfix — master.cf

Дальше нужно сообщить Postfixкому передавать почтовые данные и с какими параметрами. В нашем случае это будет разумеется Dovecot. Сделать это можно через файл master.cf, добавив соответствующие записи. Для начала забэкапим файл:

Открываем для редактирования:

Добавляем строчки (перед второй строкой нужно два пробела):

Заключение

В статье мы рассмотрели целую группу инструментов для создания полноценного сервиса электронной почты. Самое сложное при реализации подобной задачи — это настройка корректного взаимодействия всех компонентов друг с другом.

Еще одна важная задача при эксплуатации этих инструментов — следить за выходом обновлений для каждого из них и своевременно их применять.

Настройка spf

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

v=spf1 ip4:<ip-адрес почтового сервера> a mx ~all

============= postfix =============


Установка основного пакета:

apt-get install postfix

При установке выбрать «internet-site».

Мой “/etc/postfix/main.cf” выглядит так:

Итоговый конфиг postfix

А вот и итоговый конфиг:

Уникальными для вашего окружения будут параметры myhostname и mydestination. Их вы можете задать соответственно командами:

И после этого выполнить:

После этого настройки вступят в силу и вы можете протестировать отправку почты командой:

Dovecot — 10-mail.conf

Поскольку у меня все почтовые данные сохраняются под одним пользователем, в моем случае логично задать статические uid и gid. Делается это в файле 10-mail.conf. Открываем его для редактирования (сначала как всегда бэкап):

Устанавливаем параметры:

Dovecot — 10-auth.conf

Следующий этап — установить механизмы проверки подлинности. Откроем для редактирования конфиг:

В конфиге необходимо задать механизм аутентификации:

Из названия параметров в принципе должно быть понятно их назначение:

Сохраняем изменения, закрываем файл.

Подготовительные действия

Перед началом установки пакетов, подготовим учетную запись postfix, от имени которой будем в дальнейшем выполнять все действия. Дополнительно выдадим учетной записи права sudo:

Итоговый конфиг dovecot

Итоговый вариант конфигурации не подразумевает использования доп. конфигов из директории conf.d.

Ну и не забываем перезапустить демона:

На этом настройка завершена.

Конфигурация dovecot

Для начала забэкапим текущий конфиг командой:

Все необходимые параметры я буду задавать в /etc/dovecot/dovecot.conf, полностью минуя конфиги из /etc/dovecot/conf.d/.

Конфигурация postfix

Первым делом необходимо вычистить из системы MTA, используемый по умолчанию:

И удалить его конфигурацию:

Ну а далее ставим Postfix:

Решение проблем


Эта секция описывает несколько общих способов определения причин возникающих проблем.

Похожее:  Как создать ключ для авторизации по SSH и добавить его на сервер? |
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

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

Ваш адрес email не будет опубликован.

Adblock
detector