Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Mail Docs

Mail Docsについて

概要:

メールについて、調べた記録である。

目的

メールを理解する。

  • どんなことができるのか。
  • どのような設定が必要なのか
  • しくみ上、どこが脆弱なのか。

を理解する。

環境

  • AlmaLinux release 9.7 (Moss Jungle Cat)
  • Vagrant 2.4.9
    • host: AlmaLinux release 10.1 (Heliotrope Lion)

その他

メールサーバーは、運用難易度が非常に高いため、安易な覚悟でデプロイ出来ない。

管理レポジトリー

GitHub - YumaYX/maildocs: mail · GitHub

02-Mail_Servers

メールサーバーの構成と用語整理

メールサーバーの構成を調査する。

メールは、世界中のMTAサーバーが繋がっており、送信者から、受信者へ配送される。

サーバーサイド

  • MTA(Mail Transfer Agent)
    • メールの転送経路を決定する
    • sendmailやqmail、Postfixなど
  • MDA(Mail Delivery Agent)
    • メールを配送(転送)する
    • MTAのソフトに、MDAの機能を内蔵している
    • サーバー内のローカル配送にはprocmailやmaildropなど
  • MRA(Mail Retrieval Agent)
    • POPやIMAPのメール受信のための部分
    • Dovecotなど
  • MSA (Mail Submission Agent)
    • メール提出/送信エージェント
    • ユーザーのメーラー(MUA)から送られてきたメールを最初に受け取り、送信者の認証やスパム対策(SMTP-AUTHなど)を行って、配送先のサーバーへ渡す役目を持つサーバープログラムのこと

クライアントサイド

  • MUA(Mail User Agent)
    • ユーザーインターフェイスを提供
    • Outlook, Thunderbirdなど

構成要素は、参考文献の図1 メールサーバの構成要素にて、わかりやすく解説されている。

参考文献

ASCII.jp:メールを受け取る仕組みはどうなっていますか?? (1/2)


送信、受信、転送、配送

MUAの送受信と、MTAの送受信は、用語を分けるべきではないか。

[MUA]
   |
   | submission
   v
[MTA]
   |
   | relay
   v
[相手MTA]
   |
   | delivery
   v
[Mailbox]
   |
   | retrieve
   v
[相手MUA]

05-Domain

ドメイン、MXレコードについて

ドメインのMXレコードは、電子メールの配送先であるメールサーバーを決定する際に使用するものである。

recorddomain
Aレコードexample.com
MXレコードmail.example.com

MXレコードの名前解決

MTAから、user@example.comにメールが送られる場合:

  1. メールアドレスのドメイン(example.com)でDNS問い合わせ
  2. MXレコードを取得(mail.example.com)
  3. MXレコードのドメイン名をDNS問い合わせ
  4. IPアドレスを取得した上で、SMTPなどの通信を行う。

MXレコードが登録されていない場合、Aレコードが使用されることがある(MXレコードとは?優先度と確認方法 | Proofpoint JP)。

メールアドレスのドメイン部をIPアドレスにできないか

RFC上は、可能として定義されている([]で指定する)が、そのように実装されないのが通常。

参考文献

【ドメイン】MXレコードの設定方法は?|ヘルプ | ドメイン取るならお名前.com

06-Port

使用プロトコル・ポート一覧

プロトコル暗号化ポート番号
SMTP (Simple Mail Transfer Protocol)平文25
SMTP (Simple Mail Transfer Protocol)SSL465
サブミッションポート(SMTP認証用)STARTTLS(またはTLS)587
POP3 (Post Office Protocol version 3)平文110
POP3 (Post Office Protocol version 3)SSL995
IMAP4 (Internet Message Access Protocol 4)平文143
IMAP4 (Internet Message Access Protocol 4)SSL993

SSLについて:現在はTLSが必須とされている。

暗号化について

このSMTPSやPOP3S/IMAP4Sを利用した場合に暗号化通信で保護される範囲については、しっかり認識しておく必要がある。なぜなら、この技術ではユーザーのPCとメールサーバ間の区間はSSL通信で保護されているが、メールサーバ間、メールサーバと宛先ユーザー間の通信を暗号化するものではないからだ。

メールサーバー間でも暗号化するものではないため、インターネットで平文で流れている可能性はあるということ。

その他に、PGP、S/MIMEがある。https://note.com/whale999_/n/nedf6ab4501c0にまとめられている。

参考文献

10-Software

本稿で扱うソフトウェア

以下のソフトウェアを動作させる。

  • sendmail
  • procmail
  • dovecot

検証用の環境について

  • プログラムの動作確認は、Vagrantで行う。コンフィグファイル修正は、基本的にsedで行う。
  • Vagrantの挙動として、共通SHELLの後に、個別SHELLが打鍵される。複数サーバーがあるので、前後する可能性がある。
  • DNSサーバーは構築しない。

実装目標

  • メール送信
    • server1 -SMTP-> server2 -SMTP-> server1
    • メールはユーザーのホーム下Maildir/{new, cur, tmp}に保存するようにする。
  • メール受信
    • ファイルではなく、プロトコルを使ってメールを確認できること。
    • 接続の暗号化は無し。

実装パラメーター

  • 172.17.64.100
    • hostname server1.local
    • mail: vagrant at server1
  • 172.17.64.101
    • hostname server2.local
    • mail: vagrant at server2

11-Sendmail

Sendmail

本稿では、Sendmailを使用する。

2026/5時点で、RHELからSendmailの使用は非推奨となっているため、本番環境では使用出来ない。

Sendmail:古くからある標準的なMTAで、柔軟性が高い反面、設定が難解 Postfix:Sendmail互換でありながら、セキュリティと性能が向上しており、設定が簡潔

https://blog.serverspt.com/detail/39より。

install

sudo dnf -y install sendmail m4 sendmail-cf
# 8.16.1-11.el9 
# systemctl enable --now sendmail
sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# サービス停止起動では、regenerateされない。
sudo systemctl restart sendmail

setting

/etc/mail/sendmail.mc

dnl:Delete to New Lineなので、dnlはコメント行

smtp受付ネットワーク範囲設定

有効行の場合、localhostのみ。なしor無効行の場合、全リッスン。

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
# 先頭にdnlをつけてコメントにする。
sudo sed -i 's@^DAEMON_OPTIONS(@dnl DAEMON_OPTIONS(@g' /etc/mail/sendmail.mc

/etc/mail/access

メール転送の中継を制御(許可や拒否)する設定ファイル。

Connect: 受信メールの接続を開始したリモートシステムのIPアドレスを、条件テストと照合 (connection information ${client_addr}, ${client_name})) To: メッセージエンベロープの受信者アドレス(Envelop の RCPT TO の部分)を、条件テストと照合 (envelop recipient) From: メッセージエンベロープの送信者アドレス(Envelop の MAIL FROM の部分)を、条件テストと照合 (envelop sender)

OK: 他のルールにより拒否されるメールでもacceptする RELAY: リレーを許可する (trasmission of messages from a site outside your host (class{w}) to another site except yours) REJECT: 拒否する

sendmailのインストールより。

# /はor。実際には、ひとつずつ選択する。
Connect/To/From:domain OK/RELAY/REJECT
  • server1.local から接続してきたクライアントにはリレーを許可する
  • /etc/mail/access.dbを手動で生成する必要はなかった。sendmailを再起動しているから?
  • server1より、connect:server1.local realyは動作した。to:server1は動作しなかった。
    • server2からメールを送ると、メールが送られる。他の設定に要因がありそう。

/etc/mail/local-host-names

server1側:

メール受け取りドメイン設定コンフィグ。

sudo cat <<'LHN' | sudo tee /etc/mail/local-host-names
server1
LHN

/etc/mail/mailertable

server2側:

特定ドメイン宛てのメールの配送先や配送方法(メーラ)を制御するためのルーティングテーブル。

今回はDNS不使用、MXレコードが使えないため、設定が必要となる。

cat <<'EOF' | sudo tee /etc/mail/mailertable
server1    esmtp:[172.17.64.100]
EOF

メール送信

sudo dnf -y install telnet nc

{
  echo "HELO server1"
  echo "MAIL FROM:<vagrant@server2>"
  echo "RCPT TO:<vagrant@server1>"
  echo "DATA"
  echo "Subject: this is a testmail ABC"
  echo ""
  echo "this is a testmail EFG"
  echo "."
  echo "QUIT"
} | nc server2 25

12-Procmail

Procmail

install

Sendmailインストール時に、一緒にインストールされる。

#確認方法
rpm -qa procmail

grep 'local_procmail' /etc/mail/sendmail.mc

setting

Sendmail with Maildirにあるとおり、

/etc/procmailrc または maildroprcでDEFAULT=$HOME/Maildir/と書いておけばいい(procmail も maildrop も同じ)。イヤミったらしくダラダラと書いてきたが、実際におこなうべき作業はたったのこれだけである。難しいことは何もない。

/etc/procmailrcを作成する。

cat <<'PROCMAILEOF' | tee /etc/procmailrc
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$HOME/procmail.log
VERBOSE=on
PROCMAILEOF

詳細は各自。

13-Dovecot

Dovecot

受信側を設定する。受信側といっても、サーバーでは受信しており、クライアントからメールを引っ張ってくるだけの話。

install

dnf -y install dovecot

setting

プロトコル設定

sed -i 's/^#protocols/protocols/g' /etc/dovecot/dovecot.conf

Mailbox

procmailに合わせる(~/Maildir)。

sed -i 's@^#   mail_location = maildir@   mail_location = maildir@g' /etc/dovecot/conf.d/10-mail.conf

暗号化

証明書など無いので、一部設定を変える。

sed -i 's@^ssl = required@ssl = no@g' /etc/dovecot/conf.d/10-ssl.conf

最後に再起動

systemctl restart dovecot

クライアント側から接続確認 => POP3:110で接続する。

{
  echo USER vagrant
  echo PASS vagrant
  echo LIST
  echo QUIT
} | nc localhost 110
  • Q. なぜ接続情報がわかるのか?
  • A. /etc/dovecot/conf.d/に、PAMで認証する設定があるので、そこで判断できる。
  • ちなみにユーザーvagrantには、初期パスワードは設定されていない。

結果

    server1: ####### MAILDIR #######
    server1: +OK Dovecot ready.
    server1: +OK
    server1: +OK Logged in.
    server1: +OK 1 messages:
    server1: 1 652
    server1: .
    server1: +OK 652 octets
    server1: Return-Path: <vagrant@server2.local>
    server1: Received: from server2.local (server2.local [172.17.64.101])
    server1: 	by server1.local (8.16.1/8.16.1) with ESMTPS id 64H6uAJL006512
    server1: 	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
    server1: 	for <vagrant@server1.local>; Sun, 17 May 2026 06:56:10 GMT
    server1: Received: from server1 (server1.local [172.17.64.100])
    server1: 	by server2.local (8.16.1/8.16.1) with SMTP id 64H6uADp006402
    server1: 	for <vagrant@server1>; Sun, 17 May 2026 06:56:10 GMT
    server1: Date: Sun, 17 May 2026 06:56:10 GMT
    server1: From: vagrant@server2.local
    server1: Message-Id: <202605170656.64H6uADp006402@server2.local>
    server1: Subject: this is a testmail ABC
    server1:
    server1: this is a testmail EFG
    server1: .
    server1: +OK Logging out.

14-Mail_Result

メール送信記録確認

telnetでの打鍵がメールにどのように反映されているか、確認する。コマンドなどは既出のものを使用する。

送信

  • フロー: server1(Client) => server2(SMTP Server) => server1(SMTP Server)
  • server2:25に接続。telnetにて、メール送信。
[vagrant@server1 ~]$ telnet server2 25
Trying 172.17.64.101...
Connected to server2.
Escape character is '^]'.
220 server2.local ESMTP Sendmail 8.16.1/8.16.1; Wed, 20 May 2026 13:13:34 GMT
HELO server1
250 server2.local Hello server1.local [172.17.64.100], pleased to meet you
MAIL FROM:<vagrant@server2>
250 2.1.0 <vagrant@server2>... Sender ok
RCPT TO:<vagrant@server1>
250 2.1.5 <vagrant@server1>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Subject: this is a testmail ABC

this is a testmail EFG
.
250 2.0.0 64KDDYBB006414 Message accepted for delivery
QUIT
221 2.0.0 server2.local closing connection
Connection closed by foreign host.
[vagrant@server1 ~]$ 

下のリファレンス通りのリターンコードとなっている。

リターンコード

正常
codedescription
220サービス開始
221サービス終了
250要求処理完了
354データ入力開始(.だけの行で入力完了)

電子メール<アプリケーションプロトコル<ネットワーク<Web教材<木暮仁より。

結果

[vagrant@server1 ~]$ cat Maildir/new/1779282857.6584_0.server1.local 
Return-Path: <vagrant@server2.local>
Received: from server2.local (server2.local [172.17.64.101])
        by server1.local (8.16.1/8.16.1) with ESMTPS id 64KDEHgA006582
        (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
        for <vagrant@server1.local>; Wed, 20 May 2026 13:14:17 GMT
Received: from server1 (server1.local [172.17.64.100])
        by server2.local (8.16.1/8.16.1) with SMTP id 64KDDYBB006414
        for <vagrant@server1>; Wed, 20 May 2026 13:13:58 GMT
Date: Wed, 20 May 2026 13:13:34 GMT
From: vagrant@server2.local
Message-Id: <202605201313.64KDDYBB006414@server2.local>
Subject: this is a testmail ABC

this is a testmail EFG
[vagrant@server1 ~]$ 
  • Return-Path
    • メールが宛先に届かなかった際のエラーメール(バウンスメール)の送信先を指定するメールヘッダー情報
    • 自動で入っている、特に指定していない。
  • Received
    • Received: from 送信元ホスト名、IPアドレス
    • by 受信(中継)サーバ名 with SMTPなどの転送方法 id 転送時のID番号
    • for 宛先のメールアドレス; 処理時刻
    • ESMTPS:server2 → server1 の通信は TLS(暗号化あり)
      • ESMTP + TLSで保護された通信を表す表示(ログ上の呼称)
      • 裏で、HELOではなくEHLOが送信され、ESMTPが使用された。
      • EHLOへの応答でTLS対応できるのでSTARTTLSが使用されている。
      • その結果、暗号化後のSMTP通信としてESMTPSと記録されている
      • Port485の使用は、なかった。25のみ開放状態で、SMTPリレーされた。
    • verify=NOTにより、証明書検証なしということを示す。
  • toとかccは表示されていないが、記載がないと、スパム判定の可能性などがあり得る。実務では付与する。

Reference


DNS SPFレコード

メール専用として上で、説明した用途で使われる。リスト化した一種のDNS TXTレコード。

Reference

DNS SPFレコードとは? | Cloudflare

15-Reference1

References 1


前提となるヘッダー情報について

  • エンベロープFROM
    • メールが実際に送信された元のアドレス
    • 誰がこのメールを送ったか
  • エンベロープTO
    • メールが実際に送られるべき最終的な受信者のアドレス
  • ヘッダーTO
    • メールの受信者を示す情報
  • ヘッダーFROM
    • 受信者が「誰からのメールか」を識別できるようにある。

  • 通信にはエンベロープが使用され、人間にはヘッダー情報が使用されると考えればいい。
  • なりすまし:ヘッダーFromに偽りの情報を記載し、受信者に信用させメールを開封させる
    • つまり、もちろん、自動入力ではなく、書き換えも可能であるということ。
  • エンベロープの情報はMTA(Message Transfer Agent)がメールサーバー上で自動的に設定される。

エンベロープ情報とヘッダー情報の内容が異なっている場合でも、メールの送信はできる。

通常の場合、メール作成者がエンベロープの情報を編集することはできません。一般的なメールサーバーのプログラムは、ヘッダーの情報をそのままエンベロープ情報として使用します。しかし、使用しているプログラムによってはヘッダーの情報を使用しないケースもあるようです。

エンベロープFromとは?ヘッダーFromやエンベロープToとの違いや確認方法を解説 | 【公式】ブラストエンジン(blastengine)|API連携・SMTPリレーより。

telnetでメールを作れば書き換えは可能ではないか、というところである。やはり、実装によるところがあるかもしれない。

Sendmail Config

参考文献

587ポートの使用

submissionポートは587にする。

#sudo sed -i '/submit/ s/^dnl //' /etc/mail/sendmail.mc

sendmailがタイムアウトで、サービス自体アップしなかった。ログを確認すると、原因は、Dovecotで587 Submissionを使っていた。想定外だった。

sendmail.service: Can't open PID file /run/sendmail.pid (yet?) after start: Operation not permitted
NOQUEUE: SYSERR(root): opendaemonsocket: daemon MSA: cannot bind: Address already in use problem creating SMTP socket

しかし、dovecotの認証情報(OSのPAM)を使えるので、587でsubmissionを受けるのはあり。587はそのままdovecotで受ける。sendmailでは、587使用を諦める。

もちろん、諦めなくても、dovecotの587だけを停めてpam(sasl)認証を使えば、sendmail mtaでもmsaを動作させられる、らしい。この検証自体、無意味なのでこれ以上は検証しない。

MUAから25番が使われてしまうのを防ぎたい。→MTA側で、MTA(Relay)の接続、MUA(submmision)の接続の判断できないっぽいので、Firewallで制限するらしい(?)。

Reference

Submissionポートの適切な設定について : 迷惑メール対策委員会

構成の再検討

構成の再検討を行う。

[ MUA ]
  |
  | submission
  v
[ MSA:587 -> MTA:25 ]
  |
  | relay, delivery
  v
[ MTA:25 -> MailBox <- MRA:110 ]
  ^
  | retrieve
  |
[ MUA ]

設定

  • 587 port開放
  • user:vagrantのパスワードを設定
  • /etc/dovecot/conf.d/10-auth.conf auth_mechanisms = plain loginに変更
    • loginを追加
  • /etc/dovecot/conf.d/10-ssl.conf ssl = yesに変更
    • 必須ではなく、サポートに変更。
  • /etc/dovecot/conf.d/10-master.conf port = 587に変更
  • /etc/dovecot/conf.d/20-submission.conf 以下追記
      submission_relay_host = 127.0.0.1
      submission_relay_port = 25
      submission_relay_trusted = yes
    }
    
    • }を削除
    • 波括弧外にrelay_host, portを追加しているが、無くてもいい。
  • epel-releaseを追加して、swaksをインストール
    • swaksでメールを送信
    • TLS
    • HELO & EHLO それぞれ2通サブミット

結果

    server1: +OK Dovecot ready.
    server1: +OK
    server1: +OK Logged in.
    server1: +OK 3 messages:
    server1: 1 932
    server1: 2 932
    server1: 3 652
    server1: .
    server1: +OK 932 octets
    server1: Return-Path: <vagrant@server1.local>
    server1: Received: from server2.local (server2.local [172.17.64.101])
    server1: 	by server1.local (8.16.1/8.16.1) with ESMTPS id 64RG188r008623
    server1: 	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
    server1: 	for <vagrant@server1.local>; Wed, 27 May 2026 16:01:08 GMT
    server1: Received: from server2.local (localhost [127.0.0.1])
    server1: 	by server2.local (8.16.1/8.16.1) with ESMTP id 64RG18d7006875
    server1: 	for <vagrant@server1>; Wed, 27 May 2026 16:01:08 GMT
    server1: Received: from server1 ([172.17.64.100])
    server1: 	by server2.local with ESMTPSA
    server1: 	id T4u/IkQVF2raGgAAk97zeA
    server1: 	(envelope-from <vagrant@server1>)
    server1: 	for <vagrant@server1>; Wed, 27 May 2026 16:01:08 +0000
    server1: Date: Wed, 27 May 2026 16:01:08 +0000
    server1: To: vagrant@server1.local
    server1: From: vagrant@server1.local
    server1: Subject: test Wed, 27 May 2026 16:01:08 +0000
    server1: Message-Id: <20260527160108.008292@>
    server1: X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
    server1: 
    server1: This is a test mailing
    server1: 
    server1: 
    server1: .
    server1: +OK 932 octets
    server1: Return-Path: <vagrant@server1.local>
    server1: Received: from server2.local (server2.local [172.17.64.101])
    server1: 	by server1.local (8.16.1/8.16.1) with ESMTPS id 64RG18VE008626
    server1: 	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
    server1: 	for <vagrant@server1.local>; Wed, 27 May 2026 16:01:09 GMT
    server1: Received: from server2.local (localhost [127.0.0.1])
    server1: 	by server2.local (8.16.1/8.16.1) with ESMTP id 64RG18WU006883
    server1: 	for <vagrant@server1>; Wed, 27 May 2026 16:01:08 GMT
    server1: Received: from server1 ([172.17.64.100])
    server1: 	by server2.local with ESMTPSA
    server1: 	id gwqZOEQVF2riGgAAk97zeA
    server1: 	(envelope-from <vagrant@server1>)
    server1: 	for <vagrant@server1>; Wed, 27 May 2026 16:01:08 +0000
    server1: Date: Wed, 27 May 2026 16:01:08 +0000
    server1: To: vagrant@server1.local
    server1: From: vagrant@server1.local
    server1: Subject: test Wed, 27 May 2026 16:01:08 +0000
    server1: Message-Id: <20260527160108.008622@>
    server1: X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
    server1: 
    server1: This is a test mailing
    server1: 
    server1: 
    server1: .
    server1: +OK 652 octets
    server1: Return-Path: <vagrant@server1.local>
    server1: Received: from server2.local (server2.local [172.17.64.101])
    server1: 	by server1.local (8.16.1/8.16.1) with ESMTPS id 64RG1Eki008633
    server1: 	(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
    server1: 	for <vagrant@server1.local>; Wed, 27 May 2026 16:01:14 GMT
    server1: Received: from server1 (server1.local [172.17.64.100])
    server1: 	by server2.local (8.16.1/8.16.1) with SMTP id 64RG1EVQ006886
    server1: 	for <vagrant@server1>; Wed, 27 May 2026 16:01:14 GMT
    server1: Date: Wed, 27 May 2026 16:01:14 GMT
    server1: From: vagrant@server1.local
    server1: Message-Id: <202605271601.64RG1EVQ006886@server2.local>
    server1: Subject: this is a testmail ABC
    server1: 
    server1: this is a testmail EFG
    server1: .
    server1: +OK Logging out.
  • retrieveの110は今後検討する。
  • そもそも感があるが、sendmail使用自体が。。
  • Private IP addressがはいるのが嫌なら、milterでマスク、置換できる。

sendmail config files

  • /etc/mail/access
    • MTAリレーの許可を記載するファイル
  • /etc/mail/aliasesdb-stamp
  • /etc/mail/domaintable
    • ドメイン名そのものを別ドメインに書き換えるための設定
    • ドメイン移転、複数ドメインの統合など、引越しの時に使われる。
  • /etc/mail/helpfile
    • SMTPのHELPコマンドに対してサーバーが返す応答内容を記録したテキストファイル
  • /etc/mail/local-host-names
    • 受信デリバリーするドメインを登録するファイル
  • /etc/mail/mailertable
    • どのメールをどの配送方法(ルート)で送るか」を制御する設定
    • ドメイン単位・経路単位の“配送ルーティング表“
  • /etc/mail/sendmail.mc
    • Sendmailのコンフィグファイル
  • /etc/mail/submit.mc
    • ローカルから送信されるメール(submitd経由)の動作を定義する設定ファイル
  • /etc/mail/trusted-users
  • /etc/mail/virtusertable
    • 受信したメールの「宛先アドレス」を別のユーザーや外部アドレスに転送するための設定ファイル
  • /etc/aliases
    • メールアドレスのエイリアス(別名)を設定するファイル
    • ローカルマシン内のユーザー名・エイリアスを別宛先へ転送する仕組み

  • make
    • /etc/mail/make
    • /etc/mail/Makefile
  • db
    • /etc/mail/access.db
    • /etc/mail/domaintable.db
    • /etc/mail/mailertable.db
    • /etc/mail/virtusertable.db
  • cf
    • /etc/mail/sendmail.cf
    • /etc/mail/submit.cf

Reference

Sendmailの設定ファイル解説:サーバ設定情報の確認方法と設定例

20-Email_Spoofing_Protection

なりすましメール防止策

SPF

SPF(Sender Policy Framework):メール送信元のドメイン名とIPアドレスを照合する。 SPFはメール転送等により受信側で正しく判断できない場合もあるSPF(Sender Policy Framework) : 迷惑メール対策委員会

SPFの仕組み

送信ドメイン認証(SPF / DKIM / DMARC)の仕組みと、なりすましメール対策への活用法を徹底解説 – エンタープライズIT [COLUMNS]より。

送信側

メール使用時に利用するサーバーのIPアドレスをDNSのSPFレコードとして事前に登録

受信側

メール受信時に送信側のSPFレコードと照合

送信元IPアドレスは、グローバルIPアドレスが基本。送信元組織の出口のグローバルIPアドレスらしい、図からも読み取れる。

DKIM

DKIM(DomainKeys Identified Mail):電子署名を利用してメール送信元が詐称されていないかどうかを確認する。

  • メールサーバーに、秘密鍵
    • MTAで、電子署名化
  • DNSサーバーに、公開鍵

送信側(MTA)が署名して、受信者(MTA)がDNSの鍵から、検証する。

電子署名の情報で認証

DMARC

これはSPFやDKIMの認証が失敗した場合の対応策を定めたもの。送信側は受信側の認証失敗時の推奨アクションをDNSに「DMARCポリシー」として宣言しておき、受信側は認証失敗時にこのDMARCポリシーを参照して、受信メールをどう扱うか判断します

定義されているDMARCポリシーによって、受け取るか、隔離するか、拒否するかなど、分岐できる。

Reference

送信ドメイン認証(SPF / DKIM / DMARC)の仕組みと、なりすましメール対策への活用法を徹底解説 – エンタープライズIT [COLUMNS]


おまけ1

S/MIMEとDKIMは何が違う?

  • S/MIME: Secure / Multipurpose Internet Mail Extensions
  • 公開鍵の正当性は CA(認証局)が署名することで保証される。
  • MUA(Outlookや、Thunderbird)上で設定する。
項目S/MIMEDKIM
主目的内容の保護送信元の証明
暗号化できるしない
使う場所MUAメールクライアント間MTAメールサーバー間

S/MIMEとは?メールへの電子署名と暗号化の仕組み|GMOグローバルサイン【公式】

おまけ2

2024年に、大手電子メールプロバイダーのGoogle、Yahooはセキュリティ対策の導入を義務付けている。

Reference

Summary