Help us understand the problem. What is going on with this article?

Mailman で、特定ドメインから投稿された DKIM 署名済みメールは全て配送する

概要

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 署名を持つメールは全て配送されるようになります。


  1. 最近は、Gmail などで捨てアカウントを作成し DKIM 署名済みの spam を送っている事例があるようです。そのため、DKIM 署名済みのメールを全て受理・配送するという方針はお勧めできません。 

tsuchm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away