Назад | Перейти на главную страницу

postfix smtp relay скрипт

У меня есть сервер Postfix, и я использую его с Outlook (POP / SMTP).

У меня разные адреса отправителя в аккаунте. Теперь я хочу настроить реле для определенного адреса отправителя. Например, у меня есть постфикс для моего основного домена domain1.com. Теперь у меня есть адрес отправителя domain2.com.

Для этого адреса отправителя я хочу, чтобы этот постфикс перенаправлял почту на второй SMTP-сервер. Я думаю, это должно быть возможно без проблем.

Но проблема в том, что мне нужно создать SSH-туннель ко второму серверу, чтобы подключиться к SMTP-серверу. Но я не могу использовать постоянное соединение SSH, поэтому я хочу знать, возможно ли, что postfix выполнит какой-то скрипт перед пересылкой почты на второй SMTP-сервер.

Я уже нашел некоторую информацию для выполнения сценария при отправке писем, но я хочу только установить SSH-туннель до того, как postfix отправит почту на второй SMTP-сервер.

Postfix не поддерживает перехват сценария при доставке. Чтобы обойти это, вы можете настроить crontab выполнить специальный скрипт. Этот сценарий будет:

  1. Настройка SSH-туннеля
  2. Очистить очередь.

Во-первых, определите sender_dependent_relayhost_maps с правым значением, которое является вашим туннельным портом (например, порт 2525).

#/etc/main.cf
sender_dependent_relayhost_maps = hash:/etc/postfix/sshtunnel

#/etc/postfix/sshtunnel
domain2.com smtp:[127.0.0.1]:2525

Когда туннель не был подключен, postfix будет временный отложить электронное письмо из-за Connection refused-ошибка. Так что вам не нужно беспокоиться о потере электронного письма.

Затем настройте crontab для выполнения вышеуказанного скрипта. Вот псевдоскрипт для достижения этих целей. Небольшая модификация от этот оригинальный сценарий.

#!/bin/sh

#setup ssh tunnel. modify the parameter for your needs
ssh -L 2525:localhost:25 user@remote.example.com

# Start mail deliveries.
/usr/sbin/sendmail -q

# Allow deliveries to start.
sleep 10

# Loop until all messages have been tried at least once.
while mailq | grep '^[^ ]*\*' | grep domain2.com >/dev/null
do  
    sleep 10
done

Как именно вы его реализуете, зависит от вас, но вы можете создать свой собственный транспорт, и этот транспорт может быть сценарием, демоном и т. Д.

Если бы вы могли поддерживать туннель, было бы легко, вы бы просто установили

domain2.com smtp: 127.0.0.1: 2000 (или любой другой порт, который вы назначили локально)

транспортировать вверх.