プロジェクト

全般

プロフィール

DKIM/DMARC/ARC署名/認証設定

Rspamdはスパム判定時のヘッダの追記機能(add_header)があるため、DKIM署名された
メールにスパム判定を行うとメール改竄と見なされてしまい、メーラで受信時に迷惑
メールフォルダに移動されやすくなります。

もともとスパムメールなら良いとはいえ意図した動作ではないことと、スパムではない
場合に困るのでRspamdでヘッダ追加時に再署名するようにします。

よくあるケース

DKIM署名済メールのヘッダ追加を行った際に、history画面の最下部のエラー画面に
次のようなエラーメッセージが記録されています。

cannot load dkim key /var/lib/rspamd/dkim/ドメイン名.dkim.key: cannot stat key file: '/var/lib/rspamd/dkim/ドメイン名.dkim.key' No such file or directory

DKIM署名設定

メールサーバ側で既に利用しているOpenDKIMの鍵を流用するものとします。

  • 鍵ファイルをコピーし、Rspamdで読めるようにします。
    ここではセレクタ名は「default」であるものとします。
    # mkdir /etc/rspamd/dkim
    # cp /etc/opendkim/keys/ドメイン名/default.private /etc/rspamd/dkim/
    # chown -R _rspamd. /etc/rspamd/dkim
    
  • 設定ファイルを作成します
    # vi /etc/rspamd/local.d/dkim_signing.conf
    ----------------------------------------
    sign_authenticated = true;
    use_esld = true;
    use_domain = "header";
    domain {
      ドメイン名 {
        path: "/etc/rspamd/dkim/default.private";
        selector: "default";
     }
    }
    allow_hdrfrom_mismatch = true;
    allow_hdrfrom_mismatch_sign_networks = true;
    allow_username_mismatch = true;
    
    • 「use_esld」はサブドメイン関係なくこのドメインとして署名を行います。
      仮想ドメインや他サーバからmilter連携している場合、「false」にして下記のようにdomanを列挙するとよいです。
      sign_authenticated = true;
      use_esld = false;
      use_domain = "header";
      domain {
        ドメイン名 {
          path: "/etc/rspamd/dkim/ドメイン名/default.private";
          selector: "default";
       }
        サブドメイン名 {
          path: "/etc/rspamd/dkim/サブドメイン名/default.private";
          selector: "default";
       }
      
      }
      allow_hdrfrom_mismatch = true;
      allow_hdrfrom_mismatch_sign_networks = true;
      allow_username_mismatch = true;
      
    • 上記の鍵部分以外はrspamd導入時のウィザードでDKIM鍵を作成した場合のデフォルト値です。
      詳しいパラメータの説明は下記公式ドキュメントを参照。
      https://docs.rspamd.com/modules/dkim_signing
  • サービスを再起動し設定を反映します。
    # systemctl restart rspamd
    

ARC再署名設定

DMARC認証としてDKIM署名の上書きではなくARCによる署名履歴に対応している
メールについてはARCで対応する必要があります。

  • 上記で設定したファイルと一部同じ内容でARC設定を作成します。
    domain {}部分のみ流用し、鍵はDKIM鍵と同じものを使用します。
    # vi /etc/rspamd/local.d/arc.conf
    ----------------------------------------
    use_esld = true;
    domain {
      ドメイン名 {
        path: "/etc/rspamd/dkim/default.private";
        selector: "default";
     }
    }
    
    • サブドメイン等で署名を分ける場合、DKIMの時と同じく「use_esld」を「false」にして鍵を列挙します。
      use_esld = false;
      domain {
        ドメイン名 {
          path: "/etc/rspamd/dkim/ドメイン名/default.private";
          selector: "default";
       }
        サブドメイン名 {
          path: "/etc/rspamd/dkim/サブドメイン名/default.private";
          selector: "default";
       }
      
      }
      
  • サービスを再起動し設定を反映します。
    # systemctl restart rspamd
    

DMARC認証

本来DMARCはDKIM/SPF検証が必要ですが、 DKIM/SPFの認証はデフォルトで行っていますので省略します。

DMARCについては署名自体はRspamd側で行うことはありませんが、DMARC認証結果をRspamdの判定
に加味させることが出来ます。ただし、メールによってはメーリングリストなどで一部の判定が
意図的に(仕方なく)fail判定となる前提のものもあるため、実装する場合は注意が必要です。

通常はメールサーバ側でDKIM/SPF/DMARCをそれぞれ判断し、規定のアクションを行うかと思いますが
Rspamdでこれらを行うことも出来ます。

PostfixがOpenDKIM/DMARCなどで認証している場合は二重に行うことになるので、Rspamdで行う
場合はスコア計算も出来ますのでこちらに任せてしまっても良いかもしれません。

  • 下記の設定ファイルを作成します。
    # vi /etc/rspamd/local.d/dmarc.conf
    ----------------------------------------
    reporting {
        enabled = true;
    }
    
    actions = {
        quarantine = "add_header";
        reject = "reject";
    }
    
    send_reports = true;
    report_settings {
        org_name = "組織名";
        domain = "ドメイン名";
        email = "レポート送信用メールアドレス(postmasterなど)";
    }
    
    • reportingはDMARCレポートの送信を行うかの設定
    • actionsはDMARC判定を参照してのアクション
      • quarantine
        認証がパス出来ない際に「隔離」の場合のアクション。
        通常の場合でもメーラーが迷惑メール行きにしてくれそうだけど、add_headerしてあげることでよりその動作になりそう。
      • reject
        認証がパス出来ない際に「拒否」の場合のアクション。
        rejectはよほど送信者が自信がある場合の設定ですが、念のため拒否したくない場合はadd_headerしてあげてもよさそう。
    • report_settingsはレポート送信時の設定。org_nameには任意の組織名を設定。