Я хочу заменить наше текущее использование внешнего провайдера smtp на внутреннюю установку. Это должно справиться со следующими ситуациями:
Некоторые адреса следует перенаправлять на адреса Gmail; мы хотели бы продолжать использовать Gmail в качестве основного интерфейса электронной почты.
Другие адреса должны быть доступны как почтовые ящики pop/imap.
Другие адреса будут обрабатываться программно: они будут запускать различные задачи, регистрироваться и т. д. Эти адреса должны либо запускать процесс обработки адресов электронной почты, либо должны храниться в легко обрабатываемом формате.
Его также должно быть достаточно легко настраивать с помощью ключей домена, SPF и всего остального, что необходимо для обеспечения доставки электронной почты.
Я использовал sendmail в далеком прошлом. Кажется, postfix и exim являются рекомендуемыми вариантами в наши дни. Мой главный вопрос: какой лучший выбор и настройка для пересылки адресов в gmail и для программного доступа? Procmail все еще является выходом или в наши дни есть лучшие варианты?
Мы используем серверы Linux/Ubuntu.
решение1
Postfix — это надежный, хорошо поддерживаемый и простой в настройке продукт. Все, что вы описываете, довольно рутинно.
- Пересылка: использование карт virtual_alias
- Почтовые ящики POP/IMAP: локальная доставка, используйте что-то вроде Dovecot для вашего сервера POP/IMAP
- Программные вещи: если вы имеете в виду, что вы скармливаете почту скрипту, это делается из /etc/aliases. Для "легко обрабатываемых" у вас есть формат mbox и Maildir, это все стандартные вещи.
- Доменные ключи/SPF: SPF реализован в DNS. Domain-keys достаточно легко настроить как milter или SMTP-прокси.
решение2
для программных вещей вам нужно знать, под каким UID будут запускаться программы/скрипты.
Например, для postfix скрипты, запускаемые из /etc/aliases (или любого другого файла псевдонимов, принадлежащего пользователю root), будут запускаться от имени пользователя «nobody».
postfix может иметь несколько файлов псевдонимов и (и это самое приятное) программы, запущенные из файла псевдонимов, будут запускаться от имени пользователя, которому принадлежит этот файл (за исключением пользователя root — как упоминалось ранее, файлы псевдонимов, принадлежащие пользователю root, запускаются от имени nobody).
Если вам когда-нибудь понадобится запустить скрипт из почты от имени пользователя root, то самый простой способ (если у вас установлен sudo) — настроить sudo так, чтобы «никто» не мог запускать его от имени пользователя root без пароля, и запустить его из скрипта-оболочки, который запускает его с помощью sudo.
ПРИМЕЧАНИЕ: при каждом запуске скриптов из почты вы должны помнить, что данные (т. е. почта) поступают из ненадежного источника (из Интернета).... поэтому крайне небезопасно использовать данные из тела или заголовка в качестве аргументов команд, выполняемых скриптом. По сути, это та же проблема, что и доверие к данным, предоставленным пользователем в скрипте CGI, — просто не делайте этого. Например, подумайте, что может сделать плохо написанный скрипт, если предоставленные пользователем данные будут выглядеть примерно так: "... innocuousdatahere ...; rm -rf /". Вы можете подумать, что будет легко проверить очевидные вещи, такие как точки с запятой, и удалить их, но есть много неочевидных вещей, которые вам также нужно будет проверить, и вы просто настроите себя на сбой, поскольку вряд ли вы подумаете о них или обнаружите их все. Гораздо безопаснее полностью устранить риск безопасности, просто никогда не доверяя предоставленным пользователем данным.
это важно независимо от того, под каким UID будет запущен скрипт, но особенно важно, когда/если он запускается от имени пользователя root.
Наконец, отвечая на один из ваших прямых вопросов, procmail по-прежнему является полезным инструментом для того, что вы хотите сделать. Как и maildrop и другие подобные программы. Думайте о procmail и т. д. как о специализированных инструментах для анализа тела и заголовков, чтобы принимать решения о том, что делать, поэтому вам не нужно иметь весь этот код анализа в ваших скриптах. Напишите свой скрипт, который будет просто выполнять свою работу, и используйте procmail, чтобы решить, когда следует запустить скрипт. Например, вы можете создать нового пользователя с именем, скажем, «mailjobs», у которого будет свой домашний каталог и файл .procmailrc. Затем создайте псевдонимы, которые будут пересылать почту этому пользователю. Затем .procmailrc mailjobs будет проверять заголовок X-Original-To, чтобы решить, какой скрипт(ы) запустить.
решение3
И exim, и postfix более чем способны сделать то, что вам нужно, лучший совет — выбрать тот, который вам проще использовать и/или с которым вы лучше всего знакомы.
Что касается пересылки писем в Gmail и в скрипты, то лучший способ сделать это — использоватьфайл глобальных псевдонимов(обычно хранится в /etc/aliases или /etc/mail/aliases).