Настройка Postfix для блокировки отправки почты через функцию PHP mail

Необходимо запретить отправку почты с сервера/сайта на все адреса, за исключением списка разрешенных (например, есть тестовый сервер разработки и в нем присутствуют реальные адреса клиентов, которые могут получать письма от тестового сервера, что очень нежелательно)

Особенность в том, что php-функция mail использует бинарник sendmail для отправки писем.
Например, настройки sendmail для отправки почты функции mail php в режиме работы как модуль Apache может иметь следующий вид

При использовании бинарника sendmail нет возможности применить стандартные правила SMTP-ограничений в Postfix т.к. ограничения smtpd_*_restrictionsприменяютя только к письмам, полученным демоном smtpd через транзакцию SMTP

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

Как вариант, в коде необходимо использовать отправку только через smtp-соединение.
Альтернативным вариантом является использование альтернативного SMTP-клиента msmtp, который будет просто передавать полученную почту на локальный почтовый сервер Postfix, на котором уже будет настроена SMTP-ограничение на запрет отправки на любой ящик, кроме списка исключений.

 

1.Настройка Postfix

 

2.Установка msmtp
SMTP-клиент msmtp будет использоваться вместо бинарника sendmail
Установка зависимостей (пакет texinfo содержит необходимую для сборки утилиту makeinfo)

В Ubuntu14 поставляется gettext версии 0.18 (в отличии от Ubuntu16, где используется gettext версии 0.19), поэтому для Ubuntu14 выполняем

Если оставить дефолтное значение в файле po/Makefile.in.in

То при выполнении команды ./configure получаем ошибку

https://sourceforge.net/p/msmtp/mailman/message/33094733/

 

Получение базовой информации

 

3.Настройка конфигурационного файла msmtprc
В данном примере отправка происходит локально(host localhost) без аутентификации(auth off) и шифрования(tls off), с указанием адреса, который будет использоваться в заголовке From:

 

4.Настройка PHP, работающего, как модуль Apache для использования msmtp вместо sendmail

 

5.Тестирование
Проверяем с командной строки, что отправка на адрес, который не указан в файле

невозможна т.к. срабатывает правило в SMTP-ограничниях Postfix

 

При этом отправка на любой из разрешенных адресов в файле происходит успешно

 

Тестируем оправку из файла на сайте
В корне сайта создаем файл для проверки отправки с сайта

Обращаемся к скрипту в браузере

В логах виден отказ в отправке сообщения на адрес, который отсутствует в разрешенных

 

Источник:
1.https://serverfault.com/questions/586909/configure-postfix-to-block-php-sent-mail-to-certain-recipients
2.http://msmtp.sourceforge.net/download.html

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика