プロジェクト

全般

プロフィール

許可・拒否リスト

rspamdでよくある不可避の事例として「『怪しいメールアドレスを拒否した事を記したpostfixレポート』
の本文に含まれる怪しいメールアドレスのドメイン」に評価が巻き込まれてスコアが大幅加算されてレポート
が迷惑メール域になってしまうことがあります。(そりゃそうだけどひどい)

Rspamdでは標準として許可・拒否リストというものはなさそうなので、あくまでそのように機能する
リスト設定を組み立てる必要があります。

これらは「multimap」モジュールで実装されています。本ページではよく使う例のみ記載するので、
厳密なパラメータ選択肢などは下記公式のドキュメントを参照。
https://docs.rspamd.com/modules/multimap#map-attributes

枠組みの設定

  • 次の設定ファイルを作成します。
    # touch /etc/rspamd/local.d/multimap.conf
    
  • ここに書く定義は、次のような書式となります。
    ルールによっては全て書く必要は無く、必要に応じて設定する内容を選びます。
    定義名 {
        description = "説明分";
        type = "ip|from";
        regexp = true|false;
        filter = "email:domain|domain:tld|addr|from";
        prefilter = true|false;
        map = "リストのパス";
        action = "accept|reject|add_header";
        score = num;
    }
    
    • 定義名
      目的に合ったわかりやすい内容を記載します。
      例:「WHITELIST_IP」「WHITELIST_DOMAIN」など
    • description
      任意の説明分を記載します。
    • type
      検査するタイプを指定します。ipならIPアドレス、fromならエンベロープfromアドレスとなります。
    • regexp
      リストに正規表現を使用するかを選択します。
    • filter
      メールアドレス(email)の全体「addr」またはドメインパート「domain」を指定します。
      「from」を指定するとエンベロープFROMを評価します。
      • ドメイン評価時のサブドメインについて
        「domain」ではサブドメインを指定する場合は別ドメイン扱いとしてサブドメインを指定します。(アスタリスクを用いた「*example.com」のような指定は出来ません。
        「domain:tld」とすると、親ドメインの指定のみでサブドメインも評価対象とします。(「example.com」の指定で実質「.*example.com」のうような効果が出ます。
        これらを厳密に評価したい場合は「regexp」を用いて正規表現フィルタとする必要があります。
    • prefilter
      事前フィルタを行います。つまり、rspamdの各種スコア評価の前に評価アクションを強制します。
      後述のaction項目を使用する場合に指定しておきます。
    • map
      実際にアドレスやドメインを記載するファイルのパスを指定します。
    • action
      prefilterを使用した場合のアクションを指定します。
      わかりやすく言うとホワイトリストならaccept、ブラックリストならreject。
      いきなりrejectするのが怖い場合は、add_headerでヘッダの追加を行うことも出来ます。
    • score
      prefilterで確実にアクションを決めたくない場合、スコアへの加算減算を指定出来ます。
      拒否側なら「20」のように加算、許可側なら「-20」のように減算値を任意に指定します。

設定例

ここでは例として許可・拒否ともに「ドメイン」「メールアドレス」を正規表現無しで指定します。

  • 定義の設定
    # vi /etc/rspamd/local.d/multimap.conf
    ----------------------------------------
    # 許可リスト
    WHITELIST_SENDER_DOMAIN {
        description = "ホワイトリスト:ドメイン";
        type = "from";
        prefilter = true;
        filter = "email:domain";
        map = "/etc/rspamd/local.d/whitelist_sender_domain.map";
        action = "accept";
    }
    WHITELIST_SENDER_EMAIL {
        description = "ホワイトリスト:メールアドレス";
        type = "from";
        prefilter = true;
        filter = "email:addr";
        map = "/etc/rspamd/local.d/whitelist_sender_email.map";
        action = "accept";
    }
    
    # 拒否リスト
    BLACKLIST_SENDER_DOMAIN {
        description = "ブラックリスト:ドメイン";
        type = "from";
        prefilter = true;
        filter = "email:domain";
        map = "/etc/rspamd/local.d/blacklist_sender_domain.map";
        action = "reject";
    }
    BLACKLIST_SENDER_EMAIL {
        description = "ブラックリスト:メールアドレス";
        type = "from";
        prefilter = true;
        filter = "email:addr";
        map = "/etc/rspamd/local.d/blacklist_sender_email.map";
        action = "reject";
    }
    
  • 上記で定義したファイルを作成します。
    # touch /etc/rspamd/local.d/whitelist_sender_domain.map
    # touch /etc/rspamd/local.d/whitelist_sender_email.map
    # touch /etc/rspamd/local.d/blacklist_sender_domain.map
    # touch /etc/rspamd/local.d/blacklist_sender_email.map
    
  • マップファイルと、マップファイルがあるディレクトリをrspamdユーザに変更します。
    これを行っておくと、WebUI上からリストを変更出来るようになります。
    # chown _rspamd. /etc/rspamd/local.d/*map
    # chown _rspamd. /etc/rspamd/local.d
    
    • ただし、local.dはアップデートなどでオーナーがrootに戻ってしまうことがあるので注意
  • 必要があればあらかじめマップファイルに内容を記載します。
    ここではdomain定義のファイルにはドメイン、email定義のファイルにはメールアドレスを列挙します。
    • ドメインの場合
      # vi /etc/rspamd/local.d/whitelist_sender_domain.map
      ----------------------------------------
      example.com
      
    • メールアドレスの場合
      # vi /etc/rspamd/local.d/whitelist_sender_email.map
      ----------------------------------------
      user@example.com
      
  • リスト定義を変更した場合はサービスを再起動して反映します。
    マップファイルの変更のみの場合は必要ありません。
    # systemctl restart rspamd
    

その他(国コードによる評価)

history 画面から当該メールの詳細を開き、ASNに記録されている国コードを見ておくと良いかもしれません。

typeにはメールアドレスやドメインの他に国コードなども指定が出来るので、怪しいものをざっくりと指定する場合には
こちらを指定しても良いかもしれません。ただし、最近の傾向として踏み台がそれらの国に該当しないケースは多いです。

  • マップ定義
    # vi /etc/rspamd/local.d/multimap.conf 
    ----------------------------------------
    BLACKLIST_COUNTRY {
        description = "ブラックリスト:国コード";
        type = "country";
        prefilter = true;
        map = "/etc/rspamd/local.d/blacklist_country.map";
        action = "reject";
    }
    
  • マップ内容
    # vi /etc/rspamd/local.d/blacklist_country.map
    ----------------------------------------
    CN
    RU
    BZ
    
  • 権限の変更
    # chown _rspamd. /etc/rspamd/local.d/*map
    
  • 注意
    使う人も増えてきたアリエクや、信頼性のある中国資本メーカーがaws感覚でアリババのメールシステムで国コードCNでメールを出すケースがよくあります。
    そのためいきなりrejectするのが怖い場合は「prefilter」行を消し、「action」ではなく「score」でスコア加算するといいかも。フィルタすべきメールと
    必要なメールが混在している国コードの場合、国コードでスコアを加算し、メールのドメインでスコアを減算すればある程度カバー出来るかもしれません。