Простейший relay на Postfix для Exchange Server

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


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


Простейший relay на Postfix

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

В качестве бэкэнда будет выступать Exchange Server 2016 в связке с Active Directory, как наиболее распространенный и совершенный корпоративный почтовый сервис, но, к удивительному сожалению, не имеющий собственного продвинутого антиспама.

Подготовка

Начинать развертывание любого почтового сервера (даже релэя), нужно с покупки домена и создания необходимых DNS-записей. Конечно если почта в вашей организации уже есть, этот этап вы уверенно пропускаете. А всем остальным я советую создать у вашего регистратора записи A, MX и TXT, а также PTR — у провайдера интернет (или поставщика выделенных серверов, которые идут вместе с публичными адресами).

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

Если нужна помощь — обращайтесь в комментариях.

Настройка Exchange

По умолчанию Exchange не имеет соединителей отправки, то есть отправить почту в интернет не сможет (но локальным получателем вполне). Обычно админы создают соединитель с областью, обозначенной знаком * (означает все существующие домены), а значит вся исходящая почта наружу идет именно через этот соединитель.

Итого, чтобы заставить всю почту идти наружу через наш релэй, в большинстве случаев надо всего лишь прописать промежуточный узел для этого соединителя:

Через powershell это сделать ещё проще (адрес 172.16.0.64, как вы догадались, принадлежит релэю Postfix):

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

Установка Postfix

Postfix доступен из стандартных репозиториев как на Debian, так и на CentOS, оттуда и советую его ставить.

Конфигурация по умолчанию нам не подходит, а потому нужно будет кое-что подкрутить и об этом вы сможете прочитать в статье Установка Postfix на Debian.

Забегая вперед скажу, что нам понадобится ещё один пакет, установим его командой:

На этом все, можно двигаться дальше.

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

Мой домен, купленный специально для этого цикла статей — bq-srv.ru, на его примере и разберем конфигурацию. Если вы пропустили раздел Подготовка выше, то продублирую ещё раз основную мысль. Основная и обязательная часть настройки Postfix — это указание следующих параметров:

  • mydomain — публичное имя вашего почтового сервиса;
  • myhostname — имя хоста;
  • mydestination — список DNS-имен, которые обслуживает данный почтовый сервер (для которых он будет принимать почту).

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

  • relay_domains — список доменов, для которых сервер пересылает почту;
  • mynetworks — список доверенных сетей или хостов, которые обычно имеют более высокие привилегии. Например по умолчанию в ограниченияхsmtpd_relay_restrictions указан ключ permit_mynetworks, а это значит, что всем хостам в mynetworks разрешена пересылка сообщений через сервер;
  • transport_maps — транспортная карта, по которой сервер будет определять почту для каких доменов (или получателей) куда отправлять.

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

172.16.0.20 — адрес сервера Exchange.

Файл /etc/postfix/conf.d/transport имеет содержимое:

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

А теперь проверим как все работает.

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

Как видно, Postfix успешно принимает почту на адрес tratata@bq-srv.ru и отправляет на Exchange. Но такого ящика в организации не существует и эксч отправляет отчет о недоставке через Postfix:

А отправителю приходит сообщение:

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

Расширенная настройка

Необходимо добавить дополнительный источник почтовых алиасов, чтобы Postfix знал где их искать. Для этого допишите после запятой путь к конфигурации подключения к AD с ключом ldap:

Создайте файл ldap-aliases.cf и пропишите настройки для подключения:

Небольшие пояснения:

  • server_host — КД для подключения, можно указать несколько;
  • search_base — OU, с которого идет поиск вниз по иерархии;
  • bind_dn — полное имя (distinguishedName) и пароль к нему в поле bind_pw;
  • query_filter — фильтр для поиска ldap. В моем случае поиск идет только среди объектов пользователь и группа по полю proxyAddresses, которое может иметь враз несколько алиасов разных типов, например (нам нужны только типы smtp:, а ключ %s соответствует искомому адресу):

На этом все, перезапускаем Postfix:

И снова отправляем почту на несуществующий ящик:

Ответ теперь совсем другой — Recipient address rejected: User unknown in local recipient table — и он означает, что Postfix сначала обратился к AD и, не обнаружив там пользователя, вернул ошибку. Письмо до Exchange не дошло. Это и нужно.

Владельцу сообщения вернулся ответ, в этот раз от Postfix:

Базовая настройка на этом завершена, но это только первый этап. Об остальных моментах я планирую рассказать в следующих статьях.

 

comments powered by HyperComments
Яндекс.Метрика