Postfix: настройка отправки почты в Asterisk. Отказ от режима chroot. Почтовый стек доставки

Postfix является агентом передачи почты (MTA) в Ubuntu по умолчанию. Он разработан чтобы быть быстрым, простым в администрировании и безопасным. Он совместим с MTA sendmail . Этот раздел описывает как установить и настроить postfix. Здесь также разъясняется как сделать его SMTP сервером, использующим безопасные соединения (для безопасной передачи сообщений).

Установка

Для установки postfix выполните следующую команду:

Sudo apt-get install postfix

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

Базовая настройка

Для настройки postfix , выполните следующую команду:

Sudo dpkg-reconfigure postfix

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

    mail.example.com

    steve

    mail.example.com , localhost.localdomain, localhost

    127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24

Замените mail.example.com на домен, для которого вы настраиваете email, 192.168.0.0/24 на актуальную подсеть и маску для вашего почтового сервера и steve на соответствующее имя пользователя.

Теперь самое время решить какой формат почтового ящика вы хотите использовать. По умолчанию postfix использует формат mbox . Вместо непосредственного редактирования файла конфигурации вы можете использовать команду postconf для настройки параметров postfix. Параметры будут сохранены в файле /etc/postfix/main.cf. В дальнейшем если вы решите переконфигурировать отдельные параметры вы можете как запустить команду, так и вручную поправить файл.

Для настройки формата почтового ящика для Maildir :

Sudo postconf -e "home_mailbox = Maildir/"

Аутентификация 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.

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:

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

Настройка SASL

Postfix поддерживает две реализации SASL: Cyrus SASL и Dovecot SASL . Чтобы разрешить Dovecot SASL , требуется установить пакет dovecot-common . Для этого из терминала введите следующее:

Sudo apt-get install dovecot-common

Socket listen { #master { # Master socket provides access to userdb information. It"s typically # used to give Dovecot"s local delivery agent access to userdb so it # can find mailbox locations. #path = /var/run/dovecot/auth-master #mode = 0600 # Default user/group is the one who started dovecot-auth (root) #user = #group = #} client { # The client socket is generally safe to export to everyone. Typical use # is to export it to your SMTP server so it can do SMTP AUTH lookups # using it. path = /var/spool/postfix/private/auth-client mode = 0660 user = postfix group = postfix } }

Чтобы позволить использовать SMTP -AUTH клиентам Outlook, в секции auth default файла /etc/dovecot/dovecot.conf добавьте "login":

Mechanisms = plain login

После того, как Dovecot настроен, перезапустите его:

Sudo /etc/init.d/dovecot restart

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

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

Вы можете захотеть или не захотеть использовать IMAP , IMAPS, POP3 , или POP3S на вашем почтовом сервере. Например, если вы настраиваете свой сервер в качестве почтового шлюза, фильтра спама и вирусов и т.п. В этом случае возможно будет проще использовать вышеприведенные команды для настройки Postfix на SMTP _AUTH.

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

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

Тестирование

Настройка SMTP -AUTH завершена. Теперь самое время проверить настройки.

Чтобы убедиться, что SMTP -AUTH и TLS работают правильно, выполните следующую команду:

Telnet mail.example.com 25

После установления соединения с почтовым сервером postfix введите:

Ehlo mail.example.com

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

250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME

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

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

Отказ от режима chroot

Пакет postfix в Ubuntu по умолчанию устанавливается в окружении chroot из соображений безопасности. Это может дополнительно усложнить процесс поиска решения проблем.

Для отключения функционирования chroot, найдите следующую строку в файле настроек /etc/postfix/master.cf:

Smtp inet n - - - - smtpd

И замените на следующее:

Smtp inet n - n - - smtpd

После этого вам придется перезапустить Postfix для использования новых настроек. Из терминал введите следующее:

Sudo /etc/init.d/postfix restart

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

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

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

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

Auth_debug=yes auth_debug_passwords=yes

Как и в случае с Postfix, если вы изменяете настройки Dovecot, процесс требуется перезапустить: sudo /etc/init.d/dovecot reload

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

Ссылки

Администрирование сервера Postfix может быть очень сложной задачей. В какой-то момент вам может потребоваться обратиться к сообществу Ubuntu для более квалифицированной помощи.

Для погружения в информацию по Postfix очень рекомендуется прочитать The Book of Postfix .

Наконец сайт Postfix также содержит много информации по всем возможным опциям настройки.

Кроме того страница Ubuntu Wiki Postfix содержит дополнительную информацию.

Письма, отправленные с сайта через функцию mail() в 99% случаев попадают в спам, если ваш SMTP сервер не настроен профессионально. Зачастую острой необходимости в установке и тонкой настройке SMTP у вебмастера нет, а ещё чаще тупо лень. Во многих CMS есть опция, или сторонние плагины, позволяющие обойти эту проблему, используя внешние SMTP сервисы. Но что если CMS не имеет такой опции, или выполнена она коряво и работает с ограничениями по портам или ещё с какими-нибудь сюрпризами? Особенно досадно, если это коммерческий проект, а разработчик движка, за который заплачено не мало денег и который, по большому счёту всем устраивает, говорит, что «опция планируется, но приоритет низкий, т.к. запросов на фичу очень мало»? И совсем уж печально, если узнаёте вы это из архива форума поддержки, где обсуждалась сия «неприоритетная» задача несколько лет назад, а воз и ныне там. Я не знаю почему низкий приоритет… Возможно в Рунете никого не напрягает, что письма с подтверждениями, счетами и прочие валятся в спам. Меня напрягает.
И так, если нельзя заставить движок работать с внешним SMTP, то нужно заставить работать с ним стандартную функцию mail(). Заворачивать почту мы будем через SMTP сервер Google. В примере у меня домен, подключенный к Google Apps, но то же самое можно сделать и с обычным аккаунтом Gmail.
Имеем: Сервер под Ubuntu 12.04 с хостом host.domain.name, доменное имя domain.name, подключенное к Google Apps и CMS, отправляющую почту только через mail(). Последнее не важно, так как CMS мы не будет трогать совсем.
Устанавливаем Postfix. При установке на вопрос об использовании отвечаем «интернет сайт».
aptitude install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
Далее редактируем конфигурационный файл /etc/postfix/main.cf. Удаляем из него всё, вместо это пишем следующее:
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no append_dot_mydomain = no readme_directory = no myhostname = host.domain.name alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = host.domain.name, localhost.net, localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all relayhost= :587 smtp_connection_cache_destinations = :587 smtp_use_tls = yes smtp_tls_security_level = encrypt smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/mailpass smtp_sasl_security_options = noanonymous smtp_sender_dependent_authentication = yes sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay smtp_generic_maps = hash:/etc/postfix/generic smtp_tls_CAfile = /etc/postfix/cacert.pem soft_bounce = yes default_destination_concurrency_limit = 1 smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
Где поля "myhostname = host.domain.name" и "mydestination = host.domain.name" указывают на имя вашего хоста. То есть надо заменить.
Сохраняем. Копируем сертификат.
cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | tee -a /etc/postfix/cacert.pem
Далее, всё там же, в /etc/postfix создаём файл mailpass и пишем в нём следующее:
:587 [email protected]:password
Где [email protected] у нас почтовый аккаунт, а password, соответственно пароль от него.
Сохраняем и запрещаем к нему доступ всем, кроме супер пользователя.
chmod 600 /etc/postfix/mailpass
А лучше 400, так как и root’у там править ничего больше не понадобится.
Сохраняем и создаём файл generic следующего содержания:
www-data [email protected]
«www-data» - это у нас пользователь, под которым работает apache на виртуальном хосте и от имени которого CMS генерирует контент. Если apache у вас настроен грамотно и работает от имени пользователя, которому принадлежит директория, в которой размещается CMS, то вместо «www-data» следует указать его. Вторая часть – это соответственно e-mail, с которого будет приходить почта от пользователя www-data.
Сохраняем и создаём файл sender_relay следующего содержания:
[email protected] :587 [email protected] :587
Тут я думаю, всё понятно. В системе два пользователя (root и user) и почта обоих идёт через внешний SMTP.
Сохраняем и создаём файл tls_policy. Пишем в нём следующее:
:587 encrypt
На самом деле, возня с файлом «tls_policy» не обязательна. Говорят, работает и без него, но у меня не завелось. Если не создавать этот файл, то и строку «smtp_tls_policy_maps = hash:/etc/postfix/tls_policy» из конфигурации следует удалить.
После выполняем следующие команды:
postmap /etc/postfix/tls_policy
(Без надобности, если «tls_policy» не используется).
postmap /etc/postfix/generic postmap /etc/postfix/mailpass postmap /etc/postfix/sender_relay
После чего перезагружаем Postfix.
/etc/init.d/postfix restart
Всё. Можно проверить следующей командой:
echo "Test mail from postfix" | mail -s "Test Postfix" [email protected]
Где [email protected] у нас почта, на которую мы только что отправили письмо.
Логи у нас в /var/log/mail.log. Если всё сделано правильно, то там отчёт об операции. Если накосорезили, то там сведения об ошибке.
Если у вас и в Google Apps настроено всё грамотно и за доменом закреплена цифровая подпись, то письма, отправленные через стандартную функцию mail() никогда не попадут в спам.
Ну и на последок ложка дёгтя. Я не знаю, как сейчас, но на аккаунтах Gmail раньше был лимит в 500 исходящих писем в сутки. Борьба со спамом. Не знаю, действуют ли эти лимиты в Google Apps (никогда их не превышала), но обратить на это внимание стоит. Но если лимиты и есть, то по этой схеме всегда можно завернуть почту через более безалаберные сервисы, если у вас большая аудитория и все подписаны на каждый чих, раздающийся на сайте.

На данном этапе конфигурации сторонние наблюдатели могут предположить куда и сколько писем мы отправляем, однако, они не могут узнать содержимое посланий. Но что будет, если они установят на пути прохождения соединения «блок-пост», подобный описанному в предисловии, или будут совершать «набеги» время от времени? Вариантов не много:

  • Показать содержимое послания и пройти дальше - именно этот сценарий будет реализован на базе настроек из предыдущего раздела (параметр smtp_tls_security_level установлен в значение may )
  • Вернуться назад с сообщением об ошибке - этот сценарий будет реализован для домена gmail.com на базе настроек из предыдущего раздела
  • Использовать обходную «секретную» дорогу

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

Использование обходных путей возможно только до тех пор, пока они не будут раскрыты и перекрыты противником (т.н. security through obscurity или «безопасность через сокрытие»), однако, в случае наличия постоянного блок-поста, эта мера является единственно возможной альтернативой полному раскрытию содержимого сообщения

Начальная настройка

В простейшем случае, пересылка всей почты доверенному (на сколько в данном контексте вообще можно говорить о доверии) посреднику конфигурируется на клиенте следующим образом:

relayhost = :8025

Здесь relayhost задает имя (или IP адрес) сервера-релея и номер порта на который пересылается вся корреспонденция. Указание имени или адреса в квадратных скобках используется для того, чтобы пересылка велась напрямую на указанный хост. В противном случае, Postfix будет пересылать почту на MX запись указанного хоста. Нестандартный номер порта используется для упрощения конфигурации релея и для обхода фильтров, установленных на стандартных портах (хотя обычно альтернативным портом для SMTP является 587). Конфигурацию релея-посредника можно представить как:

mynetworks = 127.0.0.1, [::1], 1.2.4.5 smtpd_client_restrictions = permit_mynetworks, reject
  • mynetworks - список доверенных сетей в который добавлен IP адрес пересылающего хоста
  • smtpd_client_restrictions - список проверок на этапе установки соединения.В данном случае разрешаются соединения из доверенных сетей, а остальные соединения отвергаются. Более подробно списки проверок описаны в документе SMTPD_ACCESS_README, часть из которых будет рассмотрена далее

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

8025 inet n - - - - smtpd

Пересылка с использованием TLS

Использование релея не отменяет необходимости передавать содержимое сообщений по защищенному каналу на случай, если нестандартный порт будет обнаружен. Для этого на пересылающем сервере необходимо настроить работу TLS. Настройка TLS сервера очень похожа на настройку TLS клиента:

tls_high_cipherlist = HIGH:@STRENGTH smtpd_tls_loglevel = 1 smtpd_tls_security_level = may smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_cache smtpd_tls_cert_file = /etc/ssl/example.com.crt smtpd_tls_key_file = /etc/ssl/example.com.key smtpd_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_ciphers = high smtpd_tls_exclude_ciphers = aNULL, MD5, CAMELLIA

Здесь имеем два новых параметра - smtpd_tls_cert_file и smtpd_tls_key_file , которые, соответственно, являются именами файлов сертификата и приватного ключа

Предполагается, что сертификат был приобретен в доверенном центре сертификации, а о самоподписанных сертификатах будет рассказано далее. Следует обратить внимание, что обычно владельцем сертификата и приватного ключа является пользователь root, права на приватный ключ обычно выставляются в значение 0400 или 0600, на сертификат 0444 или 0644

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

smtp_tls_security_level = fingerprint smtp_tls_fingerprint_digest = sha1 smtp_tls_fingerprint_cert_match = XX:XX:XX:...
  • fingerprint - повышение уровня безопасности при установке TLS соединения - явное указание, что требуется проверка отпечатка сертификата
  • smtp_tls_fingerprint_digest
  • - список отпечатков сертификатов доверенных серверов

Для получения отпечатка сертификата сервера необходимо выполнить команду:

SHA1 Fingerprint=XX:XX:XX:…

Полученная последовательность знаков после SHA1 Fingerprint= и будет являться необходимым значением для smtp_tls_fingerprint_cert_match

Авторизация с использованием TLS

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

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

smtp_tls_cert_file = /etc/ssl/example.com.crt smtp_tls_key_file = /etc/ssl/example.com.key

Здесь smtp_tls_cert_file и smtp_tls_key_file имя файла сертификата и приватного ключа клиента соответственно

Т.к. пересылка почты осуществляется на нестандартном порту, включение проверки клиентского сертификата на релее рекомендуется осуществлять в конфигурации транспорта (master.cf), чтобы не влиять на обычную входящую почту (если таковая предполагается):

8025 inet n - - - - smtpd -o smtpd_tls_req_ccert=yes -o smtpd_tls_security_level=encrypt -o smtpd_tls_CAfile=/etc/ssl/certs/ca-certificates.crt -o smtpd_tls_fingerprint_digest=sha1 -o relay_clientcerts=hash:/etc/postfix/relay_clientcerts
  • smtpd_tls_req_ccert - обязательный запрос клиентского сертификата
  • smtpd_tls_security_level - максимальный уровень проверки сертификата
  • smtpd_tls_CAfile - файл со списком сертификатов доверенных центров сертификации (для FreeBSD обычно /usr/local/share/certs/ca-root-nss.crt)
  • smtpd_tls_fingerprint_digest - проверка SHA1 отпечатка вместо MD5, установленного по умолчанию
  • relay_clientcerts - карта со списком отпечатков разрешенных клиентских сертификатов (ключ/значение), где проверяется только ключ (отпечаток)

Таблица отпечатков клиентских сертификатов /etc/postfix/relay_clientcerts задается в виде:

XX:XX:XX:... example.com

Где XX:XX:XX:… - SHA1 отпечаток сертификата, получаемый выполнением коман-
ды:

# openssl x509 -noout -fingerprint -in example.com.crt

SHA1 Fingerprint=XX:XX:XX:…

Полученная последовательность знаков после SHA1 Fingerprint= и будет являться необходимым значением, а example.com - любое имя клиента (оно не проверяется сервером). После изменения текстового варианта карты, необходимо создать саму базу данных выполнив команду:

# postmap /etc/postfix/relay_clientcerts

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

smtpd_recipient_restrictions = permit_mynetworks, permit_tls_clientcerts, reject

В данном случае разрешаются соединения из доверенных сетей и соединения от клиентов, авторизованных по сертификату (permit_tls_clientcerts ), а остальные соединения отвергаются. Более подробно списки проверок описаны в документе SMTPD_ACCESS_README

Авторизация с использованием логина и пароля

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

smtp_sasl_security_options = smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
  • smtp_sasl_security_options - опции авторизации. Пустое значение предполагает использование любого возможного способа авторизации, т.к. опции по умолчанию могут быть несовместимы с настройками релея (например, gmail.com)
  • smtp_sasl_auth_enable - включение авторизации по логину и паролю
  • smtp_sasl_password_maps - карта авторизации
:587 gmail_user:gmail_password :587 yandex_user:yandex_password ...

Ключом для карты авторизации является имя релея (в том виде, в котором оно будет использоваться) и порт релея (порт 587 - альтернативный порт для SMTP). Имя пользователя и пароль указываются через двоеточие для соответствующего релея. После изменения текстового варианта карты, необходимо создать саму базу данных и установить права доступа выполнив команды:

# postmap /etc/postfix/sasl_passwd # chmod 0600 /etc/postfix/sasl_passwd # chmod 0600 /etc/postfix/sasl_passwd.db

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

relayhost = :587

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

transport_maps = hash:/etc/postfix/transport

Где задать соответствие домена получателя транспорту и релею получателя (подробнее с форматом карты можно ознакомиться по ссылке Postfix transport table format):

gmail.com smtp::587 yandex.ru smtp::587 ... * error:Transport not found

После изменения текстового варианта карты, необходимо создать саму базу данных:

# postmap /etc/postfix/transport

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

Для перезаписи адреса отправителя используется параметр smtp_generic_maps :

smtp_generic_maps = hash:/etc/postfix/generic

Где карта перезаписи адресов /etc/postfix/generic выглядит как:

@example.com [email protected]

Здесь все адреса из домена @example.com (например, [email protected]) будут
перезаписаны адресом [email protected]. После изменения текстового варианта карты, необходимо создать саму базу данных:

# postmap /etc/postfix/generic

Для работы с несколькими релеями, когда требуется изменять адрес отправителя в зависимости от домена получателя, требуется «расщепить» транспорт smtp на несколько виртуальных транспортов для каждого из которых задать свой параметр smtp_generic_maps . В этом случае карту транспортов /etc/postfix/transport можно представить как:

gmail.com gmail: yandex.ru yandex: ... * error:Transport not found

Здесь различным доменам получателя соответствуют различные виртуальные транспорты. Сами же виртуальные транспорты конфигурируются в master.cf:

gmail unix - - n - - smtp -o transport_maps= -o relayhost=:587 -o smtp_generic_maps=hash:/etc/postfix/generic_gmail yandex unix - - n - - smtp -o transport_maps= -o relayhost=:587 -o smtp_generic_maps=hash:/etc/postfix/generic_yandex

В приведенном примере для каждого виртуального транспорта отключается карта транспортов (чтобы избежать бесконечной рекурсии), устанавливается хост-порт соответствующего релея и уникальная виртуальная карта в каждой их которых можно (нужно) перезаписать все адреса из домена @example.com на адрес пользователя в доменах @gmail.com и @yandex.ru соответственно

Проксирование через TOR

Одним из способов обхода постоянного блок-поста является использование TOR - «сети луковой маршрутизации». TOR может использоваться только в паре с доверенным релеем - собственным или публичным почтовым сервером, т.к. попытка прямой отправки почты через TOR, скорее всего, окончится неудачей - подавляющее большинство выходов SMTP из сети TOR находится под санкциями крупных почтовых систем. Так же, использование сети TOR не дает никаких гарантий отно сительно наличия или отсутствия дополнительных блок-постов в точке выхода, но периодическая смена маршрутов дает шанс на нахождение неконтролируемой точки выхода

Для запуска SOCKS-прокси достаточно в файле конфигурации TOR (/etc/tor/torrc или /usr/local/etc/tor/torrc для FreeBSD) установить адрес и порт для принятия входящих соединений (документация по опциям):

SocksPort 9050 SocksListenAddress 127.0.0.1

Для проксирования трафика Postfix в SOCKS-прокси потребуется ввести дополнительный транспорт, который бы поддерживал данный тип проксирования. Наиболее простым способом является загрузка приложения с библиотекой, которая прозрачно перенаправляет все TCP соединения в прокси. Такой библиотекой, например, является tsocks

Конфигурация параметров работы библиотеки tsocks задается в файле /etc/tsocks.conf (или /usr/local/etc/tsocks.conf для FreeBSD):

local = 127.0.0.1/255.255.255.255 server = 127.0.0.1 server_ENGINE= 5 server_port = 9050

Здесь параметр local является списком хостов, которые достижимы без использования прокси, остальные параметры указывают на адрес и порт SOCKS-5 прокси TOR

Для создания транспорта Postfix необходимо создать скрипт с именем /usr/lib/postfix/smtp_socks вида:

#!/bin/sh export LD_PRELOAD=/usr/lib/libtsocks.so exec /usr/lib/postfix/smtp $@

и дать ему права на выполнение (chmod 0755 smtp_socks). Во FreeBSD исполняемые файлы транспортов находятся в директории /usr/local/libexec/postfix, а библиотека в /usr/local/lib

smtp unix - - n - - smtp_socks

Здесь следует обратить внимание на значение n в поле chroot - в Debian оно по умолчанию установлено в значение — (или yes), что будет препятствовать загрузке библиотеки libtsocks.so без дополнительных настроек chroot-окружения

Postfix is the default Mail Transfer Agent (MTA) in Ubuntu. It attempts to be fast and easy to administer and secure. It is compatible with the MTA sendmail . This section explains how to install and configure postfix . It also explains how to set it up as an SMTP server using a secure connection (for sending emails securely).

Installation

To install postfix run the following command:

sudo apt install postfix

Simply press return when the installation process asks questions, the configuration will be done in greater detail in the next stage.

Basic Configuration

To configure postfix , run the following command:

sudo dpkg-reconfigure postfix

The user interface will be displayed. On each screen, select the following values:

  • mail.example.com

    mail.example.com, localhost.localdomain, localhost

    127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24

Replace mail.example.com with the domain for which you"ll accept email, 192.168.0.0/24 with the actual network and class range of your mail server, and steve with the appropriate username.

Now is a good time to decide which mailbox format you want to use. By default Postfix will use mbox for the mailbox format. Rather than editing the configuration file directly, you can use the postconf command to configure all postfix parameters. The configuration parameters will be stored in /etc/postfix/main.cf file. Later if you wish to re-configure a particular parameter, you can either run the command or change it manually in the file.

To configure the mailbox format for Maildir:

sudo postconf -e "home_mailbox = Maildir/"

This will place new mail in /home/username /Maildir so you will need to configure your Mail Delivery Agent (MDA) to use the same path.

SMTP Authentication

SMTP-AUTH allows a client to identify itself through an authentication mechanism (SASL). Transport Layer Security (TLS) should be used to encrypt the authentication process. Once authenticated the SMTP server will allow the client to relay mail.

    Configure Postfix for SMTP-AUTH using SASL (Dovecot SASL):

    sudo postconf -e "smtpd_sasl_type = dovecot" sudo postconf -e "smtpd_sasl_path = private/auth" 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"

    The smtpd_sasl_path configuration is a path relative to the Postfix queue directory.

    Next, generate or obtain a digital certificate for TLS. See Certificates for details. This example also uses a Certificate Authority (CA). For information on generating a CA certificate see Certification Authority .

    MUAs connecting to your mail server via TLS will need to recognize the certificate used for TLS. This can either be done using a certificate from a commercial CA or with a self-signed certificate that users manually install/accept. For MTA to MTA TLS certficates are never validated without advance agreement from the affected organizations. For MTA to MTA TLS, unless local policy requires it, there is no reason not to use a self-signed certificate. Refer to Creating a Self-Signed Certificate for more details.

    Once you have a certificate, configure Postfix to provide TLS encryption for both incoming and outgoing mail:

    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"

    If you are using your own Certificate Authority to sign the certificate enter:

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

After running all the commands, Postfix is configured for SMTP-AUTH and a self-signed certificate has been created for TLS encryption.

Now, the file /etc/postfix/main.cf should look like this:

# See /usr/share/postfix/main.cf.dist for a commented, more complete # version smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA"s job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h myhostname = server1.example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = server1.example.com, localhost.example.com, localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject _unauth_destination smtpd_tls_auth_only = no smtp_tls_security_level = may smtpd_tls_security_level = may smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/ssl/private/smtpd.key smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom

The postfix initial configuration is complete. Run the following command to restart the postfix daemon:

Postfix supports SMTP-AUTH as defined in RFC2554 . It is based on SASL . However it is still necessary to set up SASL authentication before you can use SMTP-AUTH.

Configuring SASL

Postfix supports two SASL implementations Cyrus SASL and Dovecot SASL. To enable Dovecot SASL the dovecot-core package will need to be installed. From a terminal prompt enter the following:

sudo apt install dovecot-core

Next you will need to edit /etc/dovecot/conf.d/10-master.conf . Change the following:

service auth { # auth_socket_path points to this userdb socket by default. It"s typically # used by dovecot-lda, doveadm, possibly imap process, etc. Its default # permissions make it readable only by root, but you may need to relax these # permissions. Users that have access to this socket are able to get a list # of all usernames and get results of everyone"s userdb lookups. unix_listener auth-userdb { #mode = 0600 #user = #group = } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }

In order to let Outlook clients use SMTP-AUTH, in the authentication mechanisms section of /etc/dovecot/conf.d/10-auth.conf change this line:

auth_mechanisms = plain

auth_mechanisms = plain login

Once you have Dovecot configured restart it with:

sudo systemctl restart dovecot.service

Mail-Stack Delivery

Another option for configuring Postfix for SMTP-AUTH is using the mail-stack-delivery package (previously packaged as dovecot-postfix). This package will install Dovecot and configure Postfix to use it for both SASL authentication and as a Mail Delivery Agent (MDA).

You may or may not want to run IMAP, IMAPS, POP3, or POP3S on your mail server. For example, if you are configuring your server to be a mail gateway, spam/virus filter, etc. If this is the case it may be easier to use the above commands to configure Postfix for SMTP-AUTH than using mail-stack-delivery .

To install the package, from a terminal prompt enter:

sudo apt install mail-stack-delivery

You should now have a working mail server, but there are a few options that you may wish to further customize. For example, the package uses the certificate and key from the ssl-cert (self signed) package, and in a production environment you should use a certificate and key generated for the host. See Certificates for more details.

Once you have a customized certificate and key for the host, change the following options for postfix in /etc/postfix/main.cf to match your new keys:

smtpd_tls_cert_file = #yourcertfile# smtpd_tls_key_file = #yourkeyfile#

And for Dovecot in /etc/dovecot/conf.d/10-ssl.conf :

ssl_cert = <#yourcertfile# ssl_key = <#yourkeyfile#

Then restart Postfix:

sudo systemctl restart postfix.service

Testing

SMTP-AUTH configuration is complete. Now it is time to test the setup.

To see if SMTP-AUTH and TLS work properly, run the following command:

telnet mail.example.com 25

After you have established the connection to the postfix mail server, type:

ehlo mail.example.com

If you see the following lines among others, then everything is working perfectly. Type quit to exit.

250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME

Troubleshooting

This section introduces some common ways to determine the cause if problems arise.

Escaping chroot

The Ubuntu postfix package will by default install into a chroot environment for security reasons. This can add greater complexity when troubleshooting problems.

To turn off the chroot operation locate for the following line in the /etc/postfix/master.cf configuration file:

smtp inet n - - - - smtpd

and modify it as follows:

smtp inet n - n - - smtpd

You will then need to restart Postfix to use the new configuration. From a terminal prompt enter:

sudo systemctl restart postfix.service

If you need smtps, edit /etc/postfix/master.cf and uncomment the following line:

smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING

Log Files

Postfix sends all log messages to /var/log/mail.log . However error and warning messages can sometimes get lost in the normal log output so they are also logged to /var/log/mail.err and /var/log/mail.warn respectively.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то