Ограничения на отправку почты в Postfix

Задача

На локальном сервере разрешить отправку почты на адреса *@domain.com, на все остальные - запретить.

Проблема

Для отправки по smtp-протоколу можно было бы ограничиться правилом:

smtpd_client_restrictions = check_recipient_access hash:/your-map

Но, так как отправка осуществляется локальными пользователями, выше указанное правило не сработает в случае отправки по nonsmtp-протоколу, которая напрямую кладет письмо в почтовую очередь. Таким образом работают PHP-функция mail() и пакет mailx.

FreeBSD - настройка OpenDKIM + Postfix

Теория

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

  1. почтовый сервер отправителя генерирует пару ключей - закрытый и открытый. Открытый ключ помещается в TXT-запись домена отправителя и доступен всем. Закрытый ключ остается на сервере и должен храниться в тайне
  2. почтовый сервер отправителя подписывает сообщение - берет хэш (RSA-SHA256 или RSA-SHA1) определенных заголовков сообщения и зашифровывает хэш закрытым ключом
  3. полученную ЭЦП (Электронную Цифровую Подпись) почтовый сервер отправителя добавляет в заголовок почтового сообщения и отсылает получателю
  4. Почтовый сервер получателя принимает сообщение и выполняет проверку целостности и аутентичности: берет хэш определенных заголовков сообщения и расшифровывает хэш открытым ключом. Если полученная последовательность данных совпадает с ЭЦП, которая была в сообщении - значит проверка прошла успешно. Т.к. асимметричное шифрование гарантирует однозначность расшифрованных данных.

Задача

В рамках технологии DKIM настроить подписывание ключом исходящих почтовых сообщений для домена, например, test.com

Установка OpenDKIM

Будем считать, что postfix уже установлен и запущен.

portmaster mail/opendkim

Postfix - отправка почты через внешний релей по заголовку письма "MAIL FROM"

Дано: VPS-ка с несколькими сайтами + postfix в качестве MTA.
Требуется: настроить отправку почты для определенных отправителей (определяем по заголовку «MAIL FROM:») через внешний релей SendGrid, для остальных, по-умолчанию, отправлять через локальный MTA. Приступим к настройке Postfix.

Установка postfix и модуля аутентификации

yum install postfix cyrus-sasl-plain

Настройка postfix

Добавим в /etc/postfix/main.cf

## Relay
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

Создадим файл /etc/postfix/relayhost_map

## Per-sender provider
sender@host       [smtp.sendgrid.net]:587

Создадим файл /etc/postfix/sasl_passwd

## Per-sender authentication
sender@host       saslusername:saslpassword

Создадим хжш-карты файлов, зададим права доступа и перезапустим Postfix

postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/relayhost_map

chmod 400 /etc/postfix/sasl_passwd
chmod 400 /etc/postfix/relayhost_map

service postfix restart

Ссылки

Postfix - 2 ip (реализация задачи)

Порыскав в сети, нашел решение моей задачи. В postfix > 2.7 появился новый функционал.

Postfix - 2 ip (постановка задачи)

У нас есть почтовый сервер. Сервер открыт для регистрации и использования отправки/приема почты. Этот же почтовый сервер используют наши корпоративные клиенты (это те, которые платят). Проблема состоит в том, что по причине открытой регистрации, ip-адрес почтового сервера часто попадает в черные почтовые списки. От этого страдают в том числе и корпоративные клиенты. Задача - оградить корпоративщиков от блокировки IP почтового сервера.

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

Решение опишу в следующей части.

 
blog.txt · Последние изменения: 2013/01/23 14:51 — Антон Бугреев · []