Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

古い技術について—SMTP現代事情つまみ食い—

 古い技術について—SMTP現代事情つまみ食い—

YAPC::Hiroshima 2024

azumakuniyuki

February 10, 2024
Tweet

More Decks by azumakuniyuki

Other Decks in Technology

Transcript

  1. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki YAPC::Hiroshima 2024 | 02/10(土)

    広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 自己紹介 @azumakuniyuki Cubicroot Co. Ltd. 2 libsisimai.org nyaan.jp
  2. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 5 SMTP(RFC821) 1982/08 SMTP(RFC2821)

    2001/04 SMTP(RFC5321) 2008/10 STARTTLS(RFC2487) 1999/01 SPF(RFC4408) 2006/04 DKIM(RFC4871) 2007/05 ARC(RFC8617) 2019/07 DMARC(RFC7489) 2015/03 List-Unsubscribe(RFC8058) 2017/01 BIMI(DRAFT) 2019/08 SMTPUTF8(RFC5336) 2008/09 2000 2020 1980 2010 1990 MTA-STS(RFC8461) 2018/09 TLS-RPT(RFC8460) 2018/09 RRVS(RFC7293) 2014/07 DANE(RFC6698) 2012/08 NullMX(RFC7505) 2015/06 HTTP/1.0(RFC1945) 1996/05 IDとしての側面が強くなる傾向 Sendmail(1983) Postfix(1998) Exim(1995) Courier(2000) qmail(1998) OpenSMTPD(2013)
  3. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 9 Envelope (?:From|To) *

    SMTPの通信における送信者と受信者 * $ telnet mx.example.jp 25⏎ * MAIL FROM: <このメールアドレス> = 送信者 * RCPT TO: <このメールアドレス> = 受信者 * /var/log/maillogに現れるメールアドレス * from=<[email protected]>, … * to=<[email protected]>, … エンベロープ
  4. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 10 Header (?:From|To): *

    メールのヘッダーに書かれているメールアドレス * 送信者 = From: “雉虎” <[email protected]> * 受信者 = To: “道綱” <[email protected]> * MUAで表示される「差出人」と「宛先」 * アプリによっては”From: 雉虎”しか出ないかも * “From:”は必須ヘッダー(RFC5322) * “To: undisclosed-recipients:;”ってのもある ヘッダー
  5. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 11 Envelope エンベロープ In

    Email Headers Return-Path: <[email protected]> Received: from mx (m.example.com [192.0.2.1]) with ESMTPS id 4Tx3c… for <[email protected]>; Thu, 2 Feb Envelope-From Envelope-To
  6. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 13 SPF, DKIM Return-Path:

    <[email protected]> Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: キジトラ <[email protected]> Subject: ニャーン 集会のお知らせですニャン SPF DKIM Sender Policy Framework DomainKeys Identified Mail
  7. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 14 DMARC(alignment) Return-Path: <[email protected]>

    Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: キジトラ <[email protected]> Subject: ニャーン 集会のお知らせですニャン SPF DKIM DMARC SPFアライメント DKIMアライメント Domain-based Message Authentication, Reporting and Conformance
  8. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 15 DMARC 1. DMARC認証失敗時のメール処理方法を指示

    * p=(?:reject|quarantine|none) 2. レポート(*.xml.gz)が来る 3. From:ヘッダーのドメインを認証する Domain-based Message Authentication, Reporting and Conformance
  9. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 16 DMARC=FAIL Return-Path: <[email protected]>

    Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: アマゾン <[email protected]> Subject: ネコ缶(鯛味)モニター当選のお知らせですニャン 当選したネコ缶は二条城まで受け取りに来てくださいニャン SPF DKIM DMARC SPFアライメント DKIMアライメント Domain-based Message Authentication, Reporting and Conformance
  10. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 17 DMARC=FAIL Return-Path: <[email protected]>

    Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: アマゾン <[email protected]> Subject: ネコ缶(鯛味)モニター当選のお知らせですニャン 当選したネコ缶は二条城まで受け取りに来てくださいニャン SPF DKIM DMARC SPFアライメント DKIMアライメント Domain-based Message Authentication, Reporting and Conformance 不一致 不一致
  11. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 19 DMARC=PASS !? Return-Path:

    <[email protected]> Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: 【アマゾン】[email protected] <[email protected]> Subject: ネコ缶(鯛味)モニター当選のお知らせですニャン 当選したネコ缶は二条城まで受け取りに来てくださいニャン SPF DKIM DMARC SPFアライメント DKIMアライメント Domain-based Message Authentication, Reporting and Conformance
  12. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 20 DMARC=PASS !? Return-Path:

    <[email protected]> Received: from mx2 (mx.example.com [192.0.2.25]) … DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/ d=example.com; s=neko22; h=Date:From:To:Subject; Date: 2 Feb 2018 18:30:22 +0900 To: 道綱 <[email protected]> From: 【アマゾン】[email protected] <[email protected]> Subject: ネコ缶(鯛味)モニター当選のお知らせですニャン 当選したネコ缶は二条城まで受け取りに来てくださいニャン SPF DKIM DMARC SPFアライメント DKIMアライメント Domain-based Message Authentication, Reporting and Conformance これ„
  13. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 22 BIMI $ dig

    -4 TXT default._bimi.amazon.com⏎ "v=BIMI1; l=https://d3***_logo.svg; ロゴ画像 a=https://d3f***4.pem” 証明書(VMC) ↑まぁまぁ高い(〜30万円とか) EVと同じく組織の実在証明とか要る ↓商標登録されている必要あり Brand Indicators for Message Identification
  14. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 23 Email Forwarding @EXAMPLE.COM

    192.0.2.25 配信サーバー @NYAAN.JP 203.0.113.2 @GMAIL.COM example.com. IN TXT “v=spf1 ip4:192.0.2.0/24 -all” nyaan.jp. IN TXT “v=spf1 ip4:203.0113.2 -all” EHLO mx.nyaan.jp MAIL FROM: <[email protected]> RCPT TO: <[email protected]> DATA Subject: [neko-ml:0022] 集会のお知らせ From: キジトラ <[email protected]> To: 道綱 <[email protected]> DKIM-Signature: …; d=exmaple.com; … Reply-To: 近所ネコML <[email protected]> 集会ですニャン spf=fail dkim=fail REJECT
  15. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 24 SRS @EXAMPLE.COM 192.0.2.25

    配信サーバー @NYAAN.JP 203.0.113.2 @GMAIL.COM example.com. IN TXT “v=spf1 ip4:192.0.2.0/24 -all” nyaan.jp. IN TXT “v=spf1 ip4:203.0113.2 -all” EHLO mx.nyaan.jp MAIL FROM: <[email protected]> RCPT TO: <[email protected]> DATA Subject: [neko-ml:0022] 集会のお知らせ From: キジトラ <[email protected]> To: 道綱 <[email protected]> DKIM-Signature: …; d=example.com; … Reply-To: 近所ネコML <[email protected]> 集会ですニャン spf=pass dkim=fail Envelope Fromを 転送元ドメインに 書き換える Sender Rewriting Scheme
  16. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 25 ARC @EXAMPLE.COM 192.0.2.25

    配信サーバー @NYAAN.JP 203.0.113.2 @GMAIL.COM example.com. IN TXT “v=spf1 ip4:192.0.2.0/24 -all” nyaan.jp IN TXT “v=spf1 ip4:203.0113.2 -all” MAIL FROM: <[email protected]> RCPT TO: <[email protected]> DATA ARC-Authentication-Results: i=1; mx.n… spf=pass; dkim=pass; dmarc=pass; … ARC-Message-Signature: i=1; d=nyaan.jp; ARC-Seal: i=1; d=nyaan.jp; s=neko22; … DKIM-Signature: …; d=example.com; … Subject: [neko-ml:0022] 集会のお知らせ From: キジトラ <[email protected]> To: 道綱 <[email protected]> spf=fail dkim=fail arc=pass 「うちのサーバーで受け 取った段階ではSPFも DKIMもDMARCも全て PASSでしたよ」 「ARCのとこに書 いておきますので 確認してね」 Authenticated Received Chain
  17. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 27 SPF/Shadow MTA #

    grep ‘from=<‘ /var/log/maillog⏎ …, from=<[email protected]>, …, to=<[email protected]>, … …, from=<[email protected]>, … …, from=<admin@www5>, … Webサーバーが勝手に 直接メールを外部に 送ってるやん!? www5.example.jp. IN TXT “v=spf1; +a:www5 …” www5用の SPFが必要 FQDNになっ てませんなぁ
  18. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 28 SPF/NullMX $ dig

    -4 TXT libsisimai.org “v=spf1 -all” $ dig -4 MX libsisimai.org 0 . メールは 送らない MXの優先度は0, ホスト名は”.”のみ メールは 受け取らない
  19. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 29 SPF/Hard Fail (-all)

    - “v=spf1 +mx +ip4:192.0.2.0/24 ~all” + “v=spf1 +mx +ip4:192.0.2.0/24 -all” DMARC導入でメールの出所は全て把握するし やれるはず
  20. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 31 STARTTLS @NYAAN.JP 203.0.113.2

    @GMAIL.COM EHLO mx.nyaan.jp ⏎ … 250-STARTTLS … STARTTLS ⏎ 220 2.0.0 Ready to start TLS MAIL FROM: <[email protected]> ⏎ RCPT TO: <[email protected]> ⏎ DATA … よし 話せ 盗聴防止を 「暗号回線に切り替えてくれ」「よし」
  21. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki mjl-/mox (Go) stalwartlabs/mail-server (Rust)

    Sendmail 8.17.1 (Experimental) Postfix + mta-sts-resolver $smtp_tls_policy_maps version: STSv1 mode: enforce mx: gmail-smtp-in.l.google.com mx: *.gmail-smtp-in.l.google.com max_age: 86400 32 MTA-STS, TLS-RPT @NYAAN.JP 203.0.113.2 @GMAIL.COM _mta-sts.gmail.com. IN TXT "v=STSv1; id=20190429T010101;" GET https://mta-sts.gmail.com/.well-known/mta-sts.txt Gmail「うちは MTA-STSを使っ てるで」 MTA-STSの ポリシー確認 するか! うちとこTLS 1.2 以上でSTARTTLS が必須やねんわ STARTTLS 証明書ちゃん と見てな? STARTTLSの強制とレポート _smtp._tls.gmail.com. IN TXT "v=TLSRPTv1;rua=mailto:…” アカンかったらレ ポート送ってな? SMTP MTA Strict Transport Security SMTP TLS Reporting
  22. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 34 Relay Service ?

    * 自前サーバー OR 配信サービスか * 月間配信数と費用しだい(要見積) * 月に5000万通とか1億通とか送るなら自前 * 4コアCPU+8GBメモリ x 2台ぐらいで行ける * 二者択一ではない * 宛先次第で配信サービスに投げるとか * $fallback_relay =
  23. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 35 Reputation * 送信者ドメインとIPアドレスの評判

    * Postmaster Tools, Microsoft SNDS * CISCO TALOS, SenderScore(30日分ある) * だいたい3段階か4段階(悪・低・中・高) * もちろん従来のDNSBLも気にする必要あり * SMTP的な日ごろの行い * Googleのガイドラインを各社が採用(たぶん)
  24. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 37 Warming-Up @NYAAN.JP 203.0.113.2

    @GMAIL.COM DAY1: 100通 DAY2: 120通 DAY3: 150通 DAY30: 2000通 大量配信実績のないIPアドレスとドメイン Postmaster Toolsで毎日 確認 Microsoft宛 ならSNDS Outlook Postmaster
  25. YAPC::Hiroshima 2024 | 02/10(土) 広島国際会議場さん 古い技術について—SMTP現代事情つまみ食い—@azumakuniyuki 38 Warming-Up @NYAAN.JP 203.0.113.2

    @GMAIL.COM DAY1: 100本 DAY2: 120本 DAY3: 150本 DAY30: 2000本 商取引と考える・コツコツやる ネギ 買って! いきなり来た 初日で2000本 も!? 今日は100 本だけやな 2000本!