現在使用している外部 SMTP プロバイダーを社内インストールに置き換えようと考えています。次の状況に対応する必要があります。
特定のアドレスは Gmail アドレスに転送する必要があります。弊社では引き続き Gmail を主要な電子メール インターフェイスとして使用したいと考えています。
その他のアドレスは、POP/IMAP メールボックスとして利用できるはずです。
その他のアドレスはプログラムによって処理されます。さまざまなタスクを開始したり、ログに記録されたりします。これらのアドレスは、電子メール アドレスを処理するプロセスを開始するか、簡単に処理できる形式で保存する必要があります。
また、ドメイン キー、SPF、および電子メールの配信を可能にするために必要なその他のあらゆる設定もかなり簡単に行えるはずです。
昔は sendmail を使っていました。最近は postfix と exim が推奨されているようです。私の主な質問は、Gmail へのアドレスの転送とプログラムによるアクセスに最適な選択と設定は何ですか? procmail はまだ最適な方法ですか、それとも最近はもっと良い選択肢がありますか?
Linux/Ubuntu サーバーを使用しています。
答え1
Postfix は堅牢で、サポートも充実しており、設定も簡単です。あなたが説明している内容はすべて、かなり日常的なものです。
- 転送: virtual_aliasマップを使用する
- POP/IMAP メールボックス: ローカル配信、POP/IMAP サーバーには Dovecot のようなものを使用します
- プログラム的なもの: メールをスクリプトに送るという意味であれば、それは /etc/aliases から行われます。「簡単に処理できる」ものとしては、mbox と Maildir 形式があり、これらはすべて標準的なものです。
- ドメイン キー/SPF: SPF は DNS で実行されます。ドメイン キーは、Milter または SMTP プロキシとして簡単に設定できます。
答え2
プログラム的なものについては、プログラム/スクリプトがどの UID で実行されるかを認識しておく必要があります。
たとえば、postfix の場合、/etc/aliases (またはその他の root 所有のエイリアス ファイル) から実行されるスクリプトは、「nobody」ユーザーとして実行されます。
postfix には複数のエイリアス ファイルを持つ機能があり、(ここがよいところです) エイリアス ファイルから実行されるプログラムは、そのファイルを所有するユーザーとして実行されます (root を除く - 前述のとおり、root が所有するエイリアス ファイルは nobody として実行されます)。
メールからスクリプトを root として実行する必要がある場合、最も簡単な方法は (sudo がインストールされている場合)、sudo を設定して「nobody」がパスワードなしで root としてスクリプトを実行できるようにし、sudo でスクリプトを実行するラッパー スクリプトからスクリプトを実行することです。
注: メールからスクリプトをトリガーするときは、データ (つまりメール) が信頼できないソース (インターネット) からのものであることを覚えておく必要があります。したがって、本文またはヘッダーのデータをスクリプトによって実行されるコマンドの引数として使用することは非常に危険です。これは基本的に、CGI スクリプトでユーザー提供のデータを信頼するのと同じ問題です。信頼しないでください。たとえば、ユーザー提供のデータが「... innocuousdatahere ...; rm -rf /」のようなものだった場合、スクリプトが適切に記述されていない場合に何が起こるか考えてみましょう。セミコロンなどの明らかなものをチェックして削除するのは簡単だと思うかもしれませんが、確認する必要がある明らかでないものもたくさんあります。それらすべてを思いついたり、見つけたりする可能性は低いため、失敗する可能性が高くなります。ユーザー提供のデータをまったく信頼しないことで、セキュリティ リスクを完全に排除する方がはるかに安全です。
これは、スクリプトがどの UID で実行されるかに関係なく重要ですが、root として実行される場合は特に重要です。
最後に、あなたの直接の質問の 1 つに答えると、procmail は、あなたがやりたいことを行うのに依然として便利なツールです。maildrop やその他の同様のプログラムも同様です。procmail などは、本文とヘッダーを解析して何をすべきかを決定するための特殊なツールと考えてください。そのため、スクリプトに解析コードをすべて含める必要はありません。スクリプトは、そのジョブを実行するように記述し、procmail を使用してスクリプトを実行するタイミングを決定します。たとえば、独自のホーム ディレクトリと .procmailrc ファイルを持つ「mailjobs」という新しいユーザーを作成できます。次に、そのユーザーにメールを転送するエイリアスを作成します。mailjobs の .procmailrc は、X-Original-To ヘッダーをチェックして、実行するスクリプトを決定します。
答え3
exim と postfix はどちらも必要な機能を十分に備えていますが、最も使いやすく、最も使い慣れているものを選択するのが最善のアドバイスです。
Gmailやスクリプトへの転送を処理する最善の方法は、グローバルエイリアスファイル(通常は /etc/aliases または /etc/mail/aliases に保存されます)。