Postfix отправка письма smtp gmail centos. Postfix: настройка отправки почты в Asterisk

19.03.2019

Письма, отправленные с сайта через функцию 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 - это бесплатное программное обеспечение почтового сервера, разработанное для использования в операционных системах семейства Unix. Оно относится к классу агентов пересылки сообщений (message transport agent, MTA), которые осуществляют передачу электронных писем между почтовыми клиентами пользователей. Для организации серверов подобной почты крайне популярна связка Ubuntu Linux + Postfix. Настройка их будет рассмотрена в приведенной ниже статье.

Подготовка к инсталляции Postfix

Перед началом установки Postfix требуется выполнить несколько процедур по корректной настройке ресурса. Предполагается, что на сервере уже установлена и готова к работе операционная система Ubuntu Linux.

Устанавливаем корректное имя хоста

По умолчанию, Postfix использует имя хоста почтового сервера для того, чтобы идентифицировать себя при коммуникации с другими агентами пересылки сообщений. Имя хоста может быть двух видов: простое слово или полностью определенное имя домена (Fully Qualified Domain Name, FQDN). Когда что применяется?

Имя хоста в виде простого слова обычно используется для персональных компьютеров. Если вы используете Linux на домашнем ПК, то вы можете назвать его, к примеру, linux, debian, ubuntu. FQDN состоит из двух частей: имя узла и имя домена. Например, mail.yourdomain.co.

Здесь mail - имя узла, yourdomain.com - доменное имя. FQDN, как правило, используется для интернет-серверов, и именно его следует использовать при настройке Postfix для отправки почты. Приведенная выше форма FQDN является стандартной для email-серверов.

Для того чтобы узнать FQDN вашего сервера, введите в терминале Ubuntu следующую команду: hostname -f.

Если у сервера еще нет FQDN, его можно задать при помощи утилиты hostnamectl . sudo hostnamectl set - hostname your - fqdn .

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

Проверяем системное время

Проходя через Postfix, почта получает отметку о времени пересылки. Для этого сервер проверяет свое системное время. Эта отметка также записывается в его лог Postfix (/ var/log/mail.log). Поэтому перед тем как устанавливать Postfix, настройку системного времени необходимо произвести корректно.

Используйте команду date, чтобы узнать временную зону и текущее системное время на сервере Ubuntu: user@mail:~$ date. Sun Dec 31 06:37:19 BST 2017.

Задаем записи DNS для почтового сервера

  • Запись MX. MX-запись (от английского “mail exchanger”) сообщает другим агентам пересылки сообщений, что ваш сервер mail.yourdomain.com отвечает за отправку почты в вашем домене. Запись MX @ mail.yourdomain.com.
  • Запись A. А-запись устанавливает связь между FQDN и IP-адресом: mail.yourdomain.com .
  • Запись PTR. PTR-запись (от английского “pointer record”) устанавливает обратную связь между IP-адресом и FQDN. Она является противоположностью записи A и используется для обратных запросов DNS. mail.yourdomain.com

Все 3 записи задаются на стороне вашего хостинг-провайдера. Как правило, поставщик услуг задает их автоматически, но при необходимости их можно указать вручную, используя интерфейс управления вашим хостингом.

Обратная связь между записью A и записью PTR используется при блокировке спама. Многие агенты передачи сообщений принимают почту, только если сервер действительно связан с определенным доменом. Задать запись PTR необходимо, чтобы письма с вашего сервера не попадали у отправителей в папку со спамом.

Для того чтобы узнать запись PTR для определенного IP-адреса, выполните в консоли следующую команду: dig - x < IP > + short или host < IP > .

После того как подготовка завершена, начнем инсталляцию Postfix.

Установка Postfix и настройка

Чтобы скачать Postfix, выполните следующие две команды в терминале на вашем сервере Ubuntu:

  • sudo apt-get update;
  • sudo apt-get install postfix -y.

Для вновь установленного Postfix настройка начинается с выбора типа почтовой конфигурации:

  • No configuration - в процессе установки не будут настраиваться какие-либо параметры.
  • Internet Site - Postfix будет настроен для отправки электронной почты другим почтовым серверам и приема сообщений от них.
  • Internet with smarthost - сервер Postfix будет использоваться для получения электронных сообщений от других почтовых серверов, но отправка писем будет осуществляться через сервер-ретранслятор.
  • Satellite system - ретранслятор будет использоваться и для получения, и для отсылки почты.
  • Local only - электронная почта будет пересылаться только внутри локальной учетной записи.

Далее введите ваше доменное имя в качестве имени почтовой системы, то есть того, что идет в почтовом адресе после символа @. Например, если ваш адрес электронной почты - [email protected] , то в качестве имени почтовой системы следует ввести yourdomain.com .

Настройка Postfix в Ubuntu завершена.

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

user@mail:~$ sudo postconf mail_version

mail_version = 2.11.0

Мы также можем выяснить при помощи утилиты netstat, что основной процесс Postfix «слушает» TCP-порт 25: sudo netstat -lnpt.

Перед тем как отправлять первое тестовое письмо, не лишним будет проверить, блокируется ли порт 25 сетевым экраном. Для сканирования открытых портов можно использовать утилиту nmap . Выполните следующую команду в терминале на каком-нибудь другом компьютере под Linux (например, на вашем ПК), подставив в нее реальный IP вашего почтового сервера: sudo nmap .

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

Отправка тестового письма

Собственно говоря, теперь мы можем отправлять и получать письма в консоли Ubuntu. Если ваш пользовательский аккаунт на сервере называется user , вашим почтовым адресом будет [email protected] . В качестве теста вы можете отправить письмо администратору ресурса (пользователь root) или на любой почтовый адрес Gmail, "Яндекс" и так далее.

При установке Postfix в каталог /usr/sbin/sendmail записывается бинарный файл агента пересылки сообщений sendmail. Мы можем использовать его для того, чтобы отправить пробное письмо на почтовый адрес Gmail, например: echo «тест» | sendmail youraccount @ gmail . com

Эта несложная команда сообщает sendmail, что нужно считать сообщение из стандартного ввода и создать тело электронного письма с текстом «тест», а потом отправить его на указанный почтовый адрес Gmail. Письмо с данным текстом должно прийти на ваш почтовый ящик Google. Обратите внимание, что адрес отправителя указывать не нужно: его автоматически вставит в метаданные письма Postfix, при настройке которого мы задали имя почтовой системы.

Теперь попробуем ответить на это сообщение, чтобы проверить, как Postfix принимает сообщения. Входящие письма, приходящие на ваш почтовый сервер, хранятся в каталоге /var/spool/mail/ и /var/mail/ . Также расположение входящих писем можно узнать командой: postconf ail_spool_directory.

Журнал сообщений Postfix находится в файле /var/log/mail.log .

Установка и настройка спам-фильтра

В Postfix для настройки спам-фильтра выполните установку spamassassin и spamc: apt-get install spamassassin spamc

SpamAssassin - это спам-фильтр, который будет отсеивать нежелательную почту на вашем сервере в соответствии с заданными настройками. Рассмотрим их.

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

report_safe 0

required_score 8.0

rewrite_header Subject

  1. Параметр report_safe рекомендуется установить равным 0. В этом случае входящий спам будет получать в заголовке отметку, заданную параметром rewrite_header . Если задать значение параметра равным 1, то сообщения будут удаляться.
  2. Параметр required_score отвечает за чувствительность спам-фильтра. Чем меньше его значение, тем строже фильтруется почта. Для крупных почтовых серверов, обслуживающих более сотни аккаунтов, значение required_score рекомендуется устанавливать в промежутке между 8.0 и 10.0.

Сохраните конфигурационный файл, а затем включите и запустите спам-фильтр и обновите его конфигурацию:

# systemctl enable spamassassin

# systemctl start spamassassin

# sa-update

Интеграция Postfix и SpamAssassin

Для того чтобы эффективно интегрировать Postfix со спам-фильтром, необходимо создать отдельного пользователя и группу для процесса спам-фильтра:

# useradd spamd -s /bin/false -d /var/log/spamassassin

spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

После этого в начале файла укажем, что spamassassin будет работать в качестве фильтра контента (параметр content_filter ):

-o content_filter=spamassassin

Наконец, перезапустите Postfix, чтобы применить изменения:

# systemctl restart postfix

Настройка спам-фильтра завершена.

Для того чтобы проверить работоспособность SpamAssassin, можно выполнить следующий тест. Отправьте электронное письмо с другого почтового сервера (к примеру, Gmail или Яндекс) на адрес электронной почты на вашем сервере. Задайте ему любой заголовок, а в теле сообщения введите:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

При отправке вышеприведенного текста на ваш сервер, к примеру, с аккаунта Gmail, будет получен следующий ответ:

Verify SpamAssassin Detecting Spam Mails

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

# journalctl | grep spam

Сообщение лога содержит текст: Monitor SpamAssassin Mail Logs

Дополнительно, вы можете проверить spamassassin прямо из консоли: # spamassassin - D < / usr / share / doc / spamassassin -3.4.0/ sample - spam . txt

Вышеприведенная команда выдает достаточно подробный результат, который должен включать в себя нижеприведенную строку: Test SpamAssassin Spam from Commandline.

Заключение

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

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

| |

Postfix – это агент пересылки сообщений (англ. Mail Transfer Agent, или MTA), приложение для отправки и получения электронной почты. В данном руководстве показано, как установить и настроить Postfix только для отправки сообщений локальных приложений (то есть, приложений, установленных на одном сервере с Postfix).

Зачем это нужно?

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

Отличным примером приложения для отправки оповещений является OSSEC; эта система может отправлять предупреждения на любой указанный адрес электронной почты. Как и многие другие приложения такого рода, OSSEC может использовать для отправки уведомлений как SMTP-сервер стороннего поставщика, так и локальный SMTP-сервер передачи сообщений.

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

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

Требования

Для выполнения данного руководства нужны:

  • и учетная запись пользователя с расширенными привилегиями sudo;
  • Валидное доменное имя (в данном руководстве используется условный домен example.com).

Имя хоста сервера должно соответствовать этому домену или поддомену. Чтобы проверить имя хоста сервера, введите в командную строку hostname. Вывод должен совпадать с именем сервера, которое он получил при создании (например, example.com).

1: Установка Postfix

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

sudo apt-get install mailutils

Вместе с пакетом mailutils будет установлен Postfix и его зависимости. Вывод команды выглядит примерно так:

The following NEW packages will be installed:
guile-2.0-libs libgsasl7 libkyotocabinet16 libltdl7 liblzo2-2 libmailutils4 libmysqlclient18 libntlm0 libunistring0 mailutils mailutils-common mysql-common postfix ssl-cert
0 upgraded, 14 newly installed, 0 to remove and 3 not upgraded.
Need to get 5,481 kB of archives.
After this operation, 26.9 MB of additional disk space will be used.
Do you want to continue?

Чтобы установить все вышеперечисленные пакеты, нажмите ENTER. В конце установки появится окно настройки Postfix, в котором нужно выбрать тип почтовой настройки; опция по умолчанию – Internet Site, что полнее удовлетворяет требования данного руководства (чтобы подтвердить, нажмите TAB и ENTER).

После этого появится новое окно настройки Postfix с полем System mail name. Это поле должно совпадать с именем сервера, которое вы выбрали при его создании. Укажите имя, а затем нажмите TAB и ENTER.

Примечание : Если в строке появляется поддомен вроде first.example.com, сократите его до example.com.

2: Настройка Postfix

Данный раздел покажет, как настроить Postfix для отправки сообщений с сервера, на котором он установлен (то есть, с локального хоста).

Для этого Postfix должен быть настроен на прослушивание только интерфейса внутренней петли (loopback interface) – это виртуальный сетевой интерфейс, который используется сервером для внутреннего взаимодействия. Откройте конфигурационный файл Postfix с помощью редактора nano:

sudo nano /etc/postfix/main.cf

Найдите в нем следующий блок кода:

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Замените строку inet_interfaces = all строкой inet_interfaces = loopback-only. Теперь этот блок выглядит так:

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

Вместо loopback-only можно также использовать localhost:

mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = localhost

Завершив редактирование файла, сохраните изменения и закройте его (CTRL+X, затем Y и ENTER). После этого перезапустите Postfix:

sudo service postfix restart

3: Тестирование SMTP-сервера

Теперь необходимо проверить, может ли Postfix отправлять сообщения на внешний электронный адрес. Для этого используется команда mail, которая также входит в пакет mailutils.

Итак, чтобы отправить тестовое сообщение, наберите:

echo "This is the body of the email" | mail -s "This is the subject line" [email protected]

Примечание : Вместо [email protected] используйте валидный адрес электронной почты.

Проверьте почтовый ящик, на который было отправлено сообщение. Если отправленное сообщение не появилось, проверьте папку спама.

Примечание : В данном руководстве используется условный адрес [email protected], где gunter – имя пользователя Linux, а домен – имя хоста сервера (эту строку нужно указать в поле From).

4: Форвардинг почты

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

Чтобы Postfix отправлял сгенерированные системой сообщения на ваш почтовый адрес, отредактируйте файл /etc/aliases.

sudo nano /etc/aliases

В стандартной установке Ubuntu 14.04 этот файл выглядит так:


postmaster: root

Эта настройка передает сообщения системы пользователю root. Теперь нужно сделать так, чтобы сообщения перенаправлялись на ваш адрес электронной почты. Для этого внесите в файл строку:

# See man 5 aliases for format
postmaster: root
root: [email protected]

Замените [email protected] своим личным адресом электронной почты. Сохраните и закройте файл. Чтобы изменения вступили в силу, выполните следующую команду:

Теперь протестируйте форвардинг, отправив сообщение пользователю root:

echo "This is the body of the email" | mail -s "This is the subject line" root

Это сообщение должно появиться в вашем почтовом ящике (если нет – проверьте папку спама).

Tags: ,
Июнь 9, 2016 12:29 пп 12 208 views | 3 Comments

Postfix – это агент пересылки сообщений (англ. Mail Transfer Agent, или MTA), приложение для отправки и получения электронной почты. Данное руководство поможет установить и настроить Postfix только для отправки сообщений локальных приложений (то есть, приложений, установленных на одном сервере с Postfix).

Зачем это нужно?

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

Требования

  • Настроенный сервер Ubuntu 16.04 (инструкции по настройке можно найти ).
  • Не-root пользователь с доступом к sudo.
  • Валидный домен (в руководстве используется условный домен example.com).

Примечание : Имя хоста сервера должно соответствовать этому домену или поддомену. Чтобы проверить имя хоста сервера, введите в командную строку hostname. Вывод должен совпадать с именем сервера, которое он получил при создании.

1: Установка Postfix

Чтобы установить Postfix, а заодно и ряд других программ, необходимых для настройки почты, просто установите пакет mailutils.

Обновите индекс пакетов:

sudo apt-get update

Пакет mailtuils установит Postfix и несколько дополнительных программ:

sudo apt install mailutils

В конце установки программа предложит выбрать тип настройки. Рекомендуется выбрать стандартную опцию Internet Site. Для этого нажмите TAB и ENTER.

Please select the mail configuration type that best meets your needs.
[…]
General type of mail configuration:
No configuration
Internet site
Internet with smarthost
Satellite system
Local only

После этого программа предложит выбрать имя почты, System mail name. Это поле должно совпадать с именем сервера, которое вы выбрали при его создании. Укажите имя, а затем нажмите TAB и ENTER. Если в поле автоматически введён поддомен типа subdomain.example.com, замените его на домен example.com.

The ‘mail name’ is the domain name used to ‘qualify’ _ALL_ mail addresses without a domain name.
[…]
System mail name:

2: Настройка Postfix

Теперь нужно настроить Postfix для отправки сообщений с локального хоста.

Для этого Postfix должен быть настроен на прослушивание только интерфейса внутренней петли (loopback interface) – это виртуальный сетевой интерфейс, который используется сервером для внутреннего взаимодействия. Откройте конфигурационный файл Postfix в текстовом редакторе:

sudo nano /etc/postfix/main.cf

Найдите раздел:

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

Измените значение строки inet_interfaces = all на loopback-only.

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

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

/etc/postfix/main.cf
. . .
mydestination = $myhostname, example.com, localhost.com, localhost
. . .

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

Сохраните и закройте файл.

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

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

sudo systemctl restart postfix

3: Тестирование SMTP-сервера

Теперь необходимо проверить, может ли Postfix отправлять сообщения на внешний электронный адрес. Для этого используется команда mail, которая также входит в пакет mailutils.

Чтобы отправить тестовое сообщение, введите:

echo "This is the body of the email" | mail -s "This is the subject line" your_email_address

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

Проверьте почтовый ящик, на который было отправлено сообщение. Если отправленное сообщение не появилось, проверьте папку спама.

При такой настройке в поле From будет указан адрес [email protected], где user – имя пользователя системы Linux, а example.com – имя хоста. Если вы измените имя пользователя, адрес в поле From тоже изменится.

4: Почтовый форвардинг

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

Чтобы Postfix отправлял сгенерированные системой сообщения на ваш почтовый адрес, отредактируйте файл /etc/aliases.

sudo nano /etc/aliases

В стандартной установке Ubuntu 16.04 этот файл выглядит так:

# See man 5 aliases for format
postmaster: root

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