У меня 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 не пройдут и, следовательно, будут просто отправлены на предполагаемый адрес.
Надеюсь, это подтолкнет вас в правильном направлении. На любые ваши вопросы я отвечу, насколько мне известно.