CentOS8でメールサーバ構築 – DKIMの導入(RSPAMD)

DKIMはメールの送信元がドメインの所有者であることを証明するための手段です。

実は送信元のメールアドレスは好きに偽造することが出来ます。

これは現実でも手紙の差出人欄の部分にデタラメを書いても(或いは何も書かなくても)切手を正しく貼って宛先さえしっかりと書けば届いてしまうのと一緒です。

もし、送信元が自分のメールアドレスに偽造されてウィルスメールなどをばら撒かれてしまったら……と考えるとゾッとしますね。

現実の手紙では、例えば自分であると証明できる物を封筒に一緒に入れることで本人が送ったのだと証明できそうですね。

同様にメールではドメインの所有者しか知り得ない情報をメール内に入れることでドメインの所有者が送ったメールであると証明できます。

この証明する仕組みがDKIMとなります。

仕組みとしてはメールの一部(件名や宛先など)を秘密鍵で暗号化した物をメールに添付します。そして、その秘密鍵のペアになる公開鍵をDNSで公開します。

公開鍵で正しく復号できればドメインの所有者から送られたメールと確認できるというものです。

RSPAMDには送信するメールにDKIMの暗号化署名(メールの一部を暗号化した物)を付け加えられる機能があるので、これを使ってDKIMに対応したいと思います。

ちなみにDKIMに対応すると、ドメインの所有者がわざわざスパムメールなどを送らないだろうということでスパムメール扱いされにくくなります。

この記事で行うこと

  1. RSPAMDでのDKIM認証の設定
  2. DNSへの公開鍵の登録
  3. メールのテスト

1. RSPAMDでのDKIM認証の設定

実は前回のRSPAMDの初回設定の際にDKIM署名の設定も行っています。

もし、この時行っていなかった場合はもう一度初回設定を行うと設定することが出来ます。(既に設定されている部分はスキップされるので設定が初期化されるような事もありません)

以下に再設定を行う場合の設定を示します。最初のコマンド以外の部分で "" で括られている物は自分で入力する部分です。 "" とだけ記載されている場合は空欄のままEnterを押してください。

[root@localhost ~]# rspamadm configwizard
  ____                                     _
 |  _ \  ___  _ __    __ _  _ __ ___    __| |
 | |_) |/ __|| '_ \  / _` || '_ ` _ \  / _` |
 |  _ < \__ \| |_) || (_| || | | | | || (_| |
 |_| \_\|___/| .__/  \__,_||_| |_| |_| \__,_|
             |_|

Welcome to the configuration tool
We use /etc/rspamd/rspamd.conf configuration file, writing results to /etc/rspamd
Modules enabled: force_actions, phishing, neural, dkim_signing, arc, chartable, history_redis, spf, forged_recipients, replies, hfilter, fuzzy_check, maillist, regexp, mid, rbl, bayes_expiry, greylist, dkim, emails, milter_headers, metadata_exporter, asn, once_received, ratelimit, dmarc, settings, trie, mime_types, multimap, whitelist
Modules disabled (explicitly): spamtrap, mx_check, http_headers, rspamd_update, dcc, p0f
Modules disabled (unconfigured): dynamic_conf, url_redirector, elastic, ip_score, spamassassin, reputation, metric_exporter, clickhouse, antivirus, maps_stats, clustering, external_services, fuzzy_collect
Modules disabled (no Redis):
Modules disabled (experimental):
Modules disabled (failed):
Do you wish to continue?[Y/n]: ""
Setup WebUI and controller worker:
Controller password is not set, do you want to set one?[Y/n]: "n"(前回に設定したパスワードはenable_passwordに設定を変えたため出ています)
Do you want to setup dkim signing feature?[y/N]: "y"
How would you like to set up DKIM signing?
1. Use domain from mime from header for sign
2. Use domain from SMTP envelope from for sign
3. Use domain from authenticated user for sign
4. Sign all mail from specific networks

Enter your choice (1, 2, 3, 4) [default: 1]: ""
Do you want to sign mail from authenticated users? [Y/n]: ""
Allow data mismatch, e.g. if mime from domain is not equal to authenticated user domain? [Y/n]: ""
Do you want to use effective domain (e.g. example.com instead of foo.example.com)? [Y/n]: "n(これをyにするとサブドメインを使ったメールアドレスでのDKIM署名に制限が出ます。"
Enter output directory for the keys [default: /var/lib/rspamd/dkim/]: ""
Enter domain to sign: "メールアドレスのドメイン"
Enter selector [default: dkim]: ""
Do you want to create privkey /var/lib/rspamd/dkim/メールアドレスのドメイン.dkim.key[Y/n]:""
To make dkim signing working, you need to place the following record in your DNS zone:
dkim._domainkey IN TXT ( "v=DKIM1; k=rsa; "
        "p=ここの文字列はコピーして保管しておくこと") ;

Do you wish to add another DKIM domain?[y/N]: "もし複数ドメインで送信する場合はy、それ以外はn"

設定内容が表示される。

Apply changes?[Y/n]: ""

これで、RSPAMD側の設定は完了です。

p= にある文字列は公開鍵となります。

前文の通り、公開鍵はDNSに公開する必要があるのでコピーしておく必要があります。

もしコピーしそびれてしまった場合は鍵を再作成する必要があります。

鍵を作成するためのコマンドは以下となります。

[root@localhost ~]# rspamadm dkim_keygen -s 'dkim' -d example.com -k /var/lib/rspamd/dkim/メールアドレスのドメイン.dkim.key

ちなみに、 -s 'dkim' で設定されているのはセレクターと言って、複数のDKIM鍵を使い分けたいときに区別するための物です。

今回はRSPAMDのデフォルトである dkim と設定しています。

2. DNSへの公開鍵の登録

DNSによって登録方法は変わってくるため詳細な方法については割愛します。

登録する内容は以下の通りです。

ホスト名レコード種類レコード内容
dkim._domainkeyTXTv=DKIM1; k=rsa; t=y; p=コピーした公開鍵

サブドメインで送る場合は、ホスト名の dkim._domainkey.サブドメイン という形で登録します。

レコード内容の解説は以下の通りです。

  • v=DKIM1 : DKIMのバージョン1を使うという意味です。バージョン2は現状ないはずです。 DKIM1.0 等と書くと機能しないので注意してください
  • k=rsa : RSA暗号を使っているという意味です。他にもEd25519という暗号方式がサポートされています。Ed25519の方が破られにくく安全な暗号方式となるので、興味のある方はこちらも使ってみてください。ただ、対応していないメールサーバもあるのでいずれにせよRSA暗号は使う必要がありますが。
  • t=y : 試験運用中という意味です。この後メールを送ってみて問題なくDKIMが機能していれば外します。試験運用中に試行錯誤している間にサーバがブラックリストに登録されるといったことを防ぐために付けておきます。

また、 ; は区切り文字として各項目を区切る部分に入れるようにしてください。

3. メールのテスト

テストメールを送ってDKIMが機能しているか確認します。

なお、DNSに登録してから情報が伝播するまで時間がかかるので、時間をおいてからテストすることをおすすめします。

今回はGmailのメールアドレスに送ってGmailのメールから確認をしてみます。

Gmailでメールを開き、右側のメニューを開いて、「メッセージのソースを表示」をクリックします。

DKIMの項目が 'PASS' になっていたら問題なくDKIMが機能しています。

そもそもDKIMの項目がない場合は署名が行われていない可能性があります、RSPAMD(とPostfix)の設定を確認してください。

DKIMが 'FAIL' になっている場合は署名はされているが署名がDNSと一致しないということでDNS側の設定に問題がある可能性が高いです。

まとめ

これにてメールサーバとして使えるレベルのサーバとなりました。

他にもウィルスメールのチェックなど追加したい機能はありますが、一旦ここまでとします。

一応、後々ウィルスメールのチェック機能の追加も記事にする予定です。(ただ、その前にウィルスチェック用のソフトを入れたりする必要があるので……まずそちらからですね)

では、快適な自宅サーバライフ(?)を送ってください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です