Я запускаю сервер cPanel. Этот сервер был недавно взломан, и рассылался спам, поэтому я хотел бы отслеживать каждое электронное письмо, которое отправляет Exim.
Можно ли заставить exim запускать скрипт перед помещением электронного письма в очередь?
Я хочу, чтобы Exim отправлял заголовок «From:» скрипту Python. Этот скрипт будет отслеживать, сколько писем отправил этот домен за 1 час, и либо разрешить отправку письма, либо заблокировать учетную запись cPanel.
Я пробовал делать это с transport_filter
и system_filter
, но мне это не удалось.
Как я могу заставить Exim отправлять исходящую электронную почту скрипту Python для обработки?
Самый простой способ - создать роутер, проверяющий заголовки отправляемого сообщения. Если там НЕТ какого-то специального заголовка (например, X-Spam-My-Approval), сообщение направляется на транспорт с прикрепленным к нему конвейером. Сценарий на другой стороне канала выполнит всю магию и добавит секретный заголовок в сообщение, а затем отправит его снова. Теперь маршрутизаторы передают его транспорту с драйвером SMTP.
begin routers
pass2script:
driver = accept
transport = myscript
domains = !+local_domains
condition = ${if ! eq{$header_X-Spam-My-Approval:}{YES}} # header is absent or not "YES"
passaway:
driver = accept
transport = relay
domains = !+local_domains
condition = ${if eq{$header_X-Spam-My-Approval:}{YES}}
Соответствующие транспорты должны быть такими:
begin transports
myscript:
driver = pipe
command = /path/to/script --option1 --option2
relay:
driver = smtp
headers_remove = X-Spam-My-Approval
. . . . . .
Имейте в виду, что exim должен иметь достаточно прав для запуска сценария, а сценарий должен иметь соответствующий EUID, указанный в файле exim. trusted_users
config, чтобы иметь возможность отправить сообщение от имени произвольного отправителя.