概要
Mailman でメーリングリストを運用している時、自組織内から発信されたメールは全て受理・配送したいということがあります。例えば、自組織向けの問い合わせ窓口として Mailman を使っている場合など。本稿では、Mailman の司会判定用モジュールを拡張して、特定ドメインから投稿された DKIM 署名済みのメールは全て受理・配送する方法を説明します1。
背景
Mailman でメーリングリストを運用している時、メーリングリスト非参加者からのメールを受信するには、(1) generic_nonmember_action オプションを「承認」に設定する、または、(2) accept_these_nonmembers オプションに適当な正規表現を設定する、などの選択肢があります。しかし、前者(1)はあらゆるメールを受け付けますし、後者(2)も詐称が容易なヘッダー From に依存していますから、spam に対して脆弱な設定になってしまいます。
この問題に対応するため、以下のような拡張を試みてきました。
しかし、本学のメールサーバがオンプレミスから G Suite に移転したため、構成員が利用する送信用メールサーバが限定できなくなり、特定のメールサーバから投稿されたメールは全て配送する手法は使えなくなりました。
代替手段として、G Suite から送信されるメールには DKIM 署名が付与されていることを利用して、DKIM 署名が検証できたメールの From が、自組織のドメインに一致するメールは全て配送するという設定を紹介します。
設定
最初に、DKIM 署名を検証するための Python モジュールをインストールします。
sudo apt install python-dkim
次に、DKIMModerate.py を、/usr/lib/mailman/Mailman/Handlers/
にコピーします。なお、/usr/lib/mailman/
の部分は、各自の環境にしたがって適宜に読み替えてください。
その上で、/etc/mailman/mm_cfg.py
に以下のような設定を記述します。
DKIMDOMAINPATTERN = "[@.]example\.jp$"
GLOBAL_PIPELINE[GLOBAL_PIPELINE.index('Moderate')] = 'DKIMModerate'
最初の行は、自組織のドメインに一致する正規表現です。次の行は、Mailman 本体に付属している Mailman/Handlers/Moderate.py
の代わりに、上記のモジュールを使うように指定しています。
設定は以上です。これで、DKIMDOMAINPATTERN
に一致するドメインが From アドレスに設定されており、かつ、有効な DKIM 署名を持つメールは全て配送されるようになります。
-
最近は、Gmail などで捨てアカウントを作成し DKIM 署名済みの spam を送っている事例があるようです。そのため、DKIM 署名済みのメールを全て受理・配送するという方針はお勧めできません。 ↩