Postfix MTA состоит из нескольких компонентов / служб, которые работают вместе для выполнения различных этапов доставки и получения почты; к ним относятся демон smtp, процессы сбора и очистки, администратор очередей, служба smtp, pipe / spawn / virtual / rewrite ... и другие (включая возможность настраиваемых компонентов).
Postfix также предоставляет несколько типов перехватчиков, которые позволяют ему интегрироваться с внешним программным обеспечением, таким как серверы политик, фильтры, обработчики отказов, регистраторы и механизмы аутентификации; эти перехватчики могут быть связаны с различными компонентами / этапами процесса доставки и могут обмениваться данными (как минимум) через IPC, сеть, базу данных, несколько типов плоских файлов или предопределенный протокол (например, milter).
Старый и очень ограниченный пример этого показан на этот страница.
Мой вопрос:
Есть ли у кого-нибудь доступ к ресурсу, который описывает эти хуки, компоненты / этапы доставки, с которыми может взаимодействовать ловушка, и поддерживаемые методы связи? Или, что более вероятно, документация по различным компонентам Postfix и поддерживаемым ими хукам / методам?
Например:
Учитывая требование "если первичный MX-сервер получателя совпадает с 'shadysmtpd', проверьте адрес получателя по списку; если есть совпадение, разорвать SMTP-соединение без уведомления".
Моему программному обеспечению необходимо: 1) интегрироваться в соответствующую часть процесса SMTP, 2) использовать какой-либо метод для проверки адреса (сервер карты TCP? Регулярные выражения? Mysql?) И 3) реализовать необходимое действие (завершение соединения) .
Кроме того, для этого, вероятно, будет несколько методов, и еще одним требованием будет найти тот, который лучше всего подходит (например: сетевой сервер может быть быстрее, чем поиск плоских файлов; или, если может быть затронут большой объем почты Эта проверка должна выполняться как можно раньше в процессе отправки почты).
Пример из реальной жизни:
В политика сервер политики (выполняет проверки адресов в соответствии с определенными пользователем правилами) разработан как автономный TCP-сервер, который подключается к Postfix внутри smtpd
компонент через директиву 'check_policy_service inet:127.0.0.1:10001
' в 'smtpd_client_restrictions
'вариант конфигурации.
Это означает, что, когда Postfix впервые получает элемент почты для доставки, он создает TCP-соединение с адресом сервера политики: порт с целью определения, разрешено ли клиенту отправлять почту с этого сервера (помимо любых другие ограничения / методы поиска ограничений определены в этой опции); правильные действия будут предприняты на основе ответа сервера.
Ноты:
1)Страница архитектуры Postfix описывает часть этой информации в ascii art; Я надеюсь на дистиллированный, сжатый справочный материал.
2) Пожалуйста, поправьте меня, если я ошибаюсь на каком-либо уровне; там гора материала, а я всего лишь один человек;)
Спасибо!
Вот очень старая картина потока: http://www.postfix.org/big-picture.gif
http://www.postfix.org/documentation.html Вы ищете документацию в разделах SMTP Relay / access control и Content Inspection (все эти документы).
Я буду рад дать конкретный совет, но документация представляет собой довольно хорошее резюме.
Для примера запроса, который вы указали выше, вы должны реализовать собственный сервер политики. Видеть http://www.postfix.org/SMTPD_POLICY_README.html Например.