それは私が解決しようとしている少し曖昧なことなので、あなたに助けを求める必要があります。
弊社のユーザーは、互いに離れた 2 つの大きな建物に分かれているため、2 つの独立したメール サーバーを設定し、各サーバーがそれぞれの建物のメールに対応できるようにしました。主な目的は、接続が失われた場合に、外部メールが一時的に利用できなくても、ユーザーが同じ建物内の同僚にメールを送信できるようにすることです。各建物は独自のメール ドメインを使用します。設定は簡単で、問題なく動作します。
スパム対策と管理上の理由から、各サーバーに同じ (全体の) ユーザー テーブルがありますが、各ボックスには "B1" または "B2" とマークを付けて、特定のユーザーがどの建物にいるかを示します。メールボックスとリダイレクトのテーブルを SQL テーブルに保存していたため、exim 構成行に "WHERE which_server='B1'" 条件を追加することで、問題なく区別できます。
予想外だったのは、リダイレクト/エイリアスに関してメールが重複することです。次に例を示します。
ユーザーがユーザー1で建物1メールボックスを使用する[メールアドレス]、ユーザーユーザー2で建物2メールボックスを使用する[メールアドレス]今のところ問題はなく、お互いにメールを送信でき、外部ユーザーもメールで連絡を取ることができます。
ここで、各メール サーバーにリダイレクトをいくつか追加するとします。次のようにします。
[メールアドレス]->[メールアドレス]、[メールアドレス]、[メールアドレス]
今からメールとして[メールアドレス]に行く[メールアドレス]server1 のメールサーバーは、そのコピーを 3 つ作成し、さらに 3 つの別々のメッセージとして送信します (2 つは b2.domain.com のサーバーに送信され、1 つは Gmail のサーバーに送信されます)。これらのメッセージが b2.domain.com のサーバーに届くと、サーバーは再度リダイレクトを実行し (独自の SQL テーブルを使用)、メッセージが複製されます。
これを解決するエレガントな方法を見逃しているような気がしますので、正しい方法を教えていただけますか?
前もって感謝します!
答え1
エイリアス テーブル拡張を分析するときに使用していない強力な指標が 1 つあります。それは、電子メールが外部から来ているのか、それとも別の建物 (1 つ以上のホスト名または IP) から来ているのかということです。問題が、B2 から送信されたときに B1 のエイリアス拡張が重複して失敗するということである場合、ソースが B2 であればエイリアス拡張をスキップします。ACL では、これは で行われますがhosts = !+B2
、この場合、この決定を行う必要があるのはルーターです。これを行うには、接続 ACL またはメール ACL で次のように設定します。
warn hosts = +B2
set acl_c_other_building = 1
次に、エイリアス ルーターで、他の建物からのアクセスの場合は false/no を返すという条件を追加できます。
condition = ${if eq{$acl_c_other_building}{1} {no}{yes}}
このロジックを適用すると、おそらく次のルーターがメールボックスの配信を処理し、そのメッセージをローカルに配信するルーターになります。
期待どおりに動作する場合は、他の建物で逆の操作を実行します。
答え2
主な問題は、メール環境の一貫性のなさにあるようです。一方では、2 つのサーバーを同一の社内サーバー (同じエイリアス ルール) のように扱いますが、他方では、これらのサーバーは 1 つのドメインのみを担当するため、互いを他のリモート メール サーバーのように扱うことになり、リダイレクトの重複が必ず発生します。
MTAルーティングレベルでこの分散設定を処理する代わりに、両方のサーバーに同じドメイン構成を与えることをお勧めします。つまり、両方のサーバーが両方のドメインをローカルとして扱い、ローカルメールボックスに配信し、これらのメールボックスをサーバー間で複製します。たとえば、dovecotのマスター・マスター・レプリケーション