MENU
  • ホーム
  • ABOUT
  • 記事一覧
  • お問い合わせ
  • プライバシーポリシー
プログラミングやサーバー設定など様々な内容を紹介しています。
HIROTRONの部屋
  • ホーム
  • ABOUT
  • 記事一覧
  • お問い合わせ
  • プライバシーポリシー
HIROTRONの部屋
  • ホーム
  • ABOUT
  • 記事一覧
  • お問い合わせ
  • プライバシーポリシー
  1. ホーム
  2. Docker
  3. Rspamdでフリーメールから来るなりすましメールをブロック(暫定版)

Rspamdでフリーメールから来るなりすましメールをブロック(暫定版)

2026 1/31
Docker 備忘録
2026年1月30日2026年1月31日

Rspamdでフリーメールから来るなりすましメールをブロック(暫定版)

最近、自社のメールサーバーになりすましメールが届くようになりました。
しかも送信元が Gmail や Hotmail などのフリーメールを使っているため、SPF・DKIM・DMARC といった認証系のチェックにはまったく引っかかりません。

結果として、Rspamd も問題なしと判定してしまい、スパムとして検知できない状況でした。

そこで今回は、Rspamd に独自ルールを追加することで、フリーメールを使ったなりすましをブロックできたので、その方法を共有します。
あくまで暫定対応のため、今後改良点があれば追記する予定です。

目次

どんなメールが来たのか

送信元の表示名には自社の会社名が含まれており、一見すると社内メールや取引先からの連絡に見えます。

しかし実際の送信元アドレスは 〇〇@hotmail.com など、自社とは一切関係のないフリーメールアドレスでした。

さらに厄介なことに、本文の日本語にほとんど違和感がなく、かなり精巧に作られていました。

正直、よくできていて驚きました。

このメールに対して Rspamd は「問題なし」と判定し、そのまま受信トレイに届いてしまいました。

とはいえ、

  • 内容自体は明確な詐欺と断定できない
  • フリーメールからの送信で、SPF / DKIM / DMARC も正しく通っている

という条件では、Rspamd がスルーしてしまうのも仕方ない部分があります。

対策方法

使用している環境について


私の環境では、mailserver2/mailserver の Docker イメージを使用しています。

  mailserver:
    image: mailserver2/mailserver
    container_name: mailserver
    restart: unless-stopped
    domainname:
    hostname: mail
    ports:
      - "25:25"       # SMTP                - Required
      - "110:110"     # POP3       STARTTLS - Optional - For webmails/desktop clients
      - "143:143"     # IMAP       STARTTLS - Optional - For webmails/desktop clients
      - "465:465"     # SMTPS      SSL/TLS  - Optional - Enabled for compatibility reason, otherwise disabled
      - "587:587"     # Submission STARTTLS - Optional - For webmails/desktop clients
      - "993:993"     # IMAPS      SSL/TLS  - Optional - For webmails/desktop clients
      - "995:995"     # POP3S      SSL/TLS  - Optional - For webmails/desktop clients
      - "4190:4190"   # SIEVE      STARTTLS - Optional - Recommended for mail filtering
      - "11334:11334" # HTTP                - Optional - Rspamd WebUI
    env_file:
      - .env.mail
    volumes:
      - ./mailserver/mail:/var/mail
      - /etc/letsencrypt:/etc/letsencrypt:ro

カスタムルールを加える


まず、以下のファイルを作成します。
./mailserver/rspamd/rspamd.local.lua

ルールの内容

  • フリーメールドメイン(Gmail / Hotmail など)から送られてきている
  • かつ、送り主の表示名に自社名や代表者名が含まれている

この条件を満たした場合に、スパムとして高スコアを付与します。

-- フリーメールなりすまし検知ルール(送り主の表示名をチェック)
local function check_fake_company(task)
  local from = task:get_from('mime')
  if not from or not from[1] then
    return false
  end
  
  local from_domain = from[1]['domain']:lower()
  local from_name = from[1]['name'] or ''  -- 送り主の表示名を取得
  
  -- フリーメールドメインリスト
  local freemail_domains = {
    'gmail.com', 'hotmail.com', 'outlook.com', 'yahoo.com',
    'yahoo.co.jp', 'icloud.com', 'live.com', 'msn.com'
  }
  
  -- フリーメールからの送信か確認
  local is_freemail = false
  for _, domain in ipairs(freemail_domains) do
    if from_domain == domain then
      is_freemail = true
      break
    end
  end
  
  -- フリーメール以外は無視
  if not is_freemail then
    return false
  end
  
  -- 送り主の表示名にキーワードがあるかチェック
  local keywords = {
    '会社名',
    '会社名別称',
    '代表名',
    '代表名苗字',
    '代表名名前',
  }
  
  for _, kw in ipairs(keywords) do
    if from_name:find(kw, 1, true) then
      return true, 1.0, 'from_name:' .. kw
    end
  end
  
  return false
end

rspamd_config:register_symbol({
  name = 'FAKE_COMPANY_NAME',
  type = 'callback',
  callback = check_fake_company,
  score = 15.0,
  group = 'policies',
  description = 'Fake company name from freemail'
})

Rspamd に Lua ファイルを読み込ませる

次に、以下のファイルを作成します。
./mailserver/rspamd/rspamd.conf.local

lua = "/etc/rspamd/rspamd.local.lua";

Docker コンテナにマウントする

作成したファイルを永続化するため、docker-compose.yml に volume を追加します。

    volumes:
      - ./mailserver/mail:/var/mail
      - /etc/letsencrypt:/etc/letsencrypt:ro

      - ./mailserver/rspamd/rspamd.local.lua:/etc/rspamd/rspamd.local.lua:ro #追加
      - ./mailserver/rspamd/rspamd.conf.local:/etc/rspamd/rspamd.conf.local:ro #追加

再起動して反映

docker compose stop mailserver
docker compose up -d mailserver

設定が反映されているか確認

docker exec mailserver rspamadm configdump | grep -A 3 "FAKE_COMPANY_NAME"

duplicate symbol: FAKE_COMPANY_NAME, skip registering

と表示されていれば、設定は正しく読み込まれています。

実際にrejectされるか

テストしたところ、FAKE_COMPANY_NAME が正しく発火し、メールは reject されました。

当面はこの設定で様子を見ていこうと思います。

Docker 備忘録
Docker 備忘録
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
  • EDCBNotifierをSlackに対応させてみた 録画鯖

この記事を書いた人

hiroto121022のアバター hiroto121022

医学生でありながら、さどんでこプロジェクトのITリーダーを務めるフルスタック開発者。LINE BotやGPS連携スタンプラリー、NFT販売サイトなどをすべて独学で開発。使用言語はPython、Typescript、Javascript。Django、Next.js、Reactなどのフレームワークを駆使し、サーバー構築・デプロイ・SSL対応まで一貫して担当。AIによるアートのアニメーション化にも取り組み、伝統文化とテクノロジーを融合させた新しい地域体験の創出に挑戦している。

関連記事

  • Dockerで構築したWordPressの最大アップロードサイズを変更する。一時しのぎと永久的な対処を紹介
    2025年12月8日
  • Docker Composeで依存関係に関係なく、コンテナを再構築する方法
    2025年12月7日
  • VMwareのvdmkファイルを分割する方法
    2025年12月6日
  • MySQLバックアップ、インポート コマンド
    2025年4月28日

コメント

コメントする コメントをキャンセル


hiroto121022
医学生でありながら、さどんでこプロジェクトのITリーダーを務めるフルスタック開発者。LINE BotやGPS連携スタンプラリー、NFT販売サイトなどをすべて独学で開発。使用言語はPython、Typescript、Javascript。Django、Next.js、Reactなどのフレームワークを駆使し、サーバー構築・デプロイ・SSL対応まで一貫して担当。
GitHub
AdMax広告
新着記事
  • Rspamdでフリーメールから来るなりすましメールをブロック(暫定版)
  • EDCBNotifierをSlackに対応させてみた 録画鯖
  • ISDBScannerをCATVに対応させてみた 録画鯖
  • Dockerで構築したWordPressの最大アップロードサイズを変更する。一時しのぎと永久的な対処を紹介
  • Docker Composeで依存関係に関係なく、コンテナを再構築する方法
最近のコメント
  • WSR-1166DHP2 Openwrt導入方法 に hiroto121022 より
  • WSR-1166DHP2 Openwrt導入方法 に ランジェリー旬報 より
  • 第2話:画像に仕込む魔法!LINEイメージマップとスタンプの格闘記 に LINE API × 鬼太鼓スタンプラリー誕生秘話④ LIFFとGPSでスタンプを獲得する仕組み - HIROTRONの部屋 より
  • 第1話:WordPressじゃ物足りない!?LINE✕鬼太鼓スタンプラリー開発のはじまり に Django ✕ LINE Messaging APIでローディングアニメーションを出す方法 - HIROTRONの部屋 より
  • 第1話:WordPressじゃ物足りない!?LINE✕鬼太鼓スタンプラリー開発のはじまり に LINE API × 鬼太鼓スタンプラリー誕生秘話④ LIFFとGPSでスタンプを獲得する仕組み - HIROTRONの部屋 より
サイトメニュー
  • ホーム
  • ABOUT
  • 記事一覧
  • お問い合わせ
  • プライバシーポリシー

© HIROTRONの部屋.

目次