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

постфиксная ретрансляция на основе происхождения

У меня 4 сервера. prod1.example.com, prod2.example.com, dev1.example.com и dev2.example.com. Все они отправляют свои письма на smtp.example.com. Этот сервер выполняет ретрансляцию. Теперь я хочу, чтобы dev1 и dev2 отправляли все свои электронные письма на devbox@example.com, за исключением писем, отправляемых на admin@example.com. Электронные письма от prod1 и prod2 пересылаются без каких-либо ограничений.

Я читал, что в файле доступа вы можете определить, что сервер должен обрабатываться фильтром, а не простым РЕЛЕ (с FILTER foo: bar). Я не могу найти, как и где мне нужно определить этот foo (транспорт) и bar (пункт назначения). Все эти разные параметры меня смущают. Также в каком порядке обрабатываются разные файлы?

Кто-нибудь может мне помочь?

Ваш вопрос может быть выражен этим псевдокодом

if (client == dev1 OR client == dev2)
    if recipient == admin
        pass it
    else
        redirect to devbox
else
    pass it

К сожалению, в postfix нет общего языка (например, vcl для конфигурации varnish) для обработки ограничений и пересылки. Итак, мы можем попытаться решить эту проблему с помощью функции хеш-таблицы от postfix. У меня есть две идеи, как решить эту проблему.

Решение с несколькими портами

Я предполагаю (по умолчанию) ваши серверы dev и prod подключаются к smtp.example.com с одним и тем же портом (порт 25). Если вы можете изменить код и настроить ограничение брандмауэра, поэтому dev1 и dev2 должны подключаться к smtp.example.com с портом, отличным от 25 (например, порт 2525), тогда вы можете пойти с простым решением. Если этот сценарий невозможен, вы можете пропустить эту идею и перейти к решению 2.

Чтобы разрешить dev-серверу подключаться к postfix через порт 2525, установите другой экземпляр smtpd, добавив эту строку в master.cf

2525       inet  n       -       n       -       -       smtpd -o smtpd_client_restrictions=check_recipient_access,pcre:/etc/postfix/devbox

Теперь содержание /etc/postfix/devbox

/admin@example\.com/    OK
/devbox@example\.com/   OK
/.*/                   REDIRECT devbox@example.com

Теперь prod-сервер не получит фильтр, как указано выше, потому что он подключается к postfix через порт 25. Таким образом, он может проходить через postfix, как и раньше.

Решение классов ограничений

Если сценарий, подобный первой идее, был невозможен, вы можете реализовать его с помощью класса ограничений. Для этого вы можете использовать функцию постфикса, называемую классами ограничений. Видеть

В main.cf добавьте эту строку

smtpd_restriction_classes = devbox
devbox = check_recipient_access pcre:/etc/postfix/devbox
smtpd_recipient_restrictions = 
    ...
    check_client_access hash:/etc/postfix/emailrouting,
    ...

Содержание /etc/postfix/emailrouting

dev1.example.com    devbox
dev2.example.com    devbox

Содержание /etc/postfix/devbox

/admin@example\.com/    OK
/devbox@example\.com/   OK
/.*/                   REDIRECT devbox@example.com

Я не эксперт в этом, но я сам недавно возился с Postfix и, возможно, смогу хотя бы подтолкнуть вас в правильном направлении.

С postfix вы можете использовать псевдонимы и сопоставить, скажем, один адрес или несколько адресов с другим. Скорее всего, вам понадобится сопоставление recipient_canonical:

http://www.postfix.org/ADDRESS_REWRITING_README.html#canonical

Использование этого метода означает, что вам нужно будет поместить все возможные адреса в файл, чтобы электронные письма на любой адрес, кроме admin@example.com, отправлялись на devbox@example.com, но с сопоставлением вы можете использовать Regex.

https://superuser.com/questions/353488/regex-multiple-catch-all-setup-in-postfix

Я предлагаю запросить в Stackoverflow простое регулярное выражение, чтобы проверить, НЕ равен ли адрес admin@example.com, а затем отправить его на devbox@example.com. Это будет означать, что все остальные адреса пройдут эту проверку и, следовательно, перейдут на devbox@example.com, тогда как admin@example.com не пройдут и, следовательно, будут просто отправлены на предполагаемый адрес.

Надеюсь, это подтолкнет вас в правильном направлении. На любые ваши вопросы я отвечу, насколько мне известно.