✉️

メールを支える技術

2022/10/13に公開

まえがき

みなさん、メールを使っていますか?

コミュニケーションツールとして利用されているメールが、LINEやSlack、Chatworkなどに置き換わり初めてずいぶんと経ちました。
中には私用でメールを書くことはもう全然してないよ、という方もいらっしゃるかと思います。
様々なツールに置き換わり始めたメールですが、システムとしてはまだまだ利用されている方がほとんどではないでしょうか。
そんなまだまだ現役なメールですが、SaaSなメールサービスが増えたため自前で運用機会が減ることで、仕組みを知る機会が随分と減りました。

今回のブログでは、そんなメールの送受信の仕組みについて具体例を示しつつ触れていこうと思います。

メールの送受信例

今回は説明や実証実験を簡略化するため、
AmazonLinux上でmailコマンドを利用して私の個人で取得しているドメインからgmailへメール送信したときの流れを解説していきます。
この図以外にも、実際にはネットワーク機器やDNSサーバにも様々な役割のものが登場しますが、詳細は割愛しています。

  • 送信元アドレス: test[at]blog.st1t.com
  • 送信先アドレス: shota.ito.jp[at]gmail.com

概要図

メール送信の仕組み

MXレコード

目的

メールの宛先ドメインの配送先メールサーバのIPアドレスを知らせるためのもの。
概要図ではgmail.com宛のメールを送るときに、どこのメールサーバにメールを送信すれば良いか知るために使われています。

実際に確認してみる

digコマンドで確認してみると、以下の通り返ってきます。
ANSWER SECTIONがメールサーバ情報になりますが、複数返ってきています。
これは、MXレコードはメールサーバに障害が起きたときのため、メールサーバの情報と共に優先度を登録しておくことで耐障害性を上げるためのものです。

DNS確認

$ dig MX gmail.com

; <<>> DiG 9.10.6 <<>> MX gmail.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42680
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 11

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;gmail.com.			IN	MX

;; ANSWER SECTION:
gmail.com.		2582	IN	MX	40 alt4.gmail-smtp-in.l.google.com.
gmail.com.		2582	IN	MX	20 alt2.gmail-smtp-in.l.google.com.
gmail.com.		2582	IN	MX	10 alt1.gmail-smtp-in.l.google.com.
gmail.com.		2582	IN	MX	30 alt3.gmail-smtp-in.l.google.com.
gmail.com.		2582	IN	MX	5 gmail-smtp-in.l.google.com.

;; ADDITIONAL SECTION:
alt4.gmail-smtp-in.l.google.com. 299 IN	A	142.250.152.26
alt4.gmail-smtp-in.l.google.com. 299 IN	AAAA	2607:f8b0:4001:c56::1a
alt2.gmail-smtp-in.l.google.com. 92 IN	A	142.250.115.27
alt2.gmail-smtp-in.l.google.com. 299 IN	AAAA	2607:f8b0:4023:1004::1a
alt1.gmail-smtp-in.l.google.com. 235 IN	A	142.250.141.26
alt1.gmail-smtp-in.l.google.com. 299 IN	AAAA	2607:f8b0:4023:c0b::1a
alt3.gmail-smtp-in.l.google.com. 286 IN	A	64.233.171.26
alt3.gmail-smtp-in.l.google.com. 76 IN	AAAA	2607:f8b0:4003:c15::1b
gmail-smtp-in.l.google.com. 299	IN	A	142.250.107.27
gmail-smtp-in.l.google.com. 257	IN	AAAA	2607:f8b0:400e:c01::1b

;; Query time: 331 msec
;; SERVER: 172.31.64.10#53(172.31.64.10)
;; WHEN: Wed Jun 15 14:53:20 JST 2022
;; MSG SIZE  rcvd: 381

$

MxToolBoxから確認

MxToolBoxという外部のサイトで、登録がちゃんとできているのか確認できるのでこちらからも確認してみます。

https://mxtoolbox.com/SuperTool.aspx

  • ドメイン名にgmail.comを入力して MX Lookup で確認
  • 確認画面

Prefカラムは優先順位で、一つのHostnameに対してIPv4とIPv6の両方が登録されており、クライアント側の設定次第でどちらも使えるようになっているのがわかります。

また、TTLの右隣のカラムには Blacklist CheckSMTP Testがあります。
BlacklistはMXレコードに登録されているIPアドレスが著名なBlacklistに登録されているかを確認でき、SMTP Testはその名の通りそのIPアドレスに対してSMTP接続ができるか確認できたりします。

メール受信の仕組み

SPF(TXT)レコード

目的

届いたメールの送信元メールサーバが正規か確認するためのもの。
これは、受信メールサーバが送信元のドメインに紐づくSPFレコードを参照し、そのSPFレコードに登録されているIPアドレスと、実際に届いたメールの送信元のIPアドレスを比較することで正規かどうかを判断している。

実際に確認してみる

DNS確認

$ dig TXT blog.st1t.com

; <<>> DiG 9.10.6 <<>> TXT blog.st1t.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55617
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blog.st1t.com.			IN	TXT

;; ANSWER SECTION:
blog.st1t.com.		60	IN	TXT	"v=spf1 +ip4:54.248.148.155/32 ~all"

;; AUTHORITY SECTION:
st1t.com.		86400	IN	NS	ns-468.awsdns-58.com.
st1t.com.		86400	IN	NS	ns-599.awsdns-10.net.
st1t.com.		86400	IN	NS	ns-1527.awsdns-62.org.
st1t.com.		86400	IN	NS	ns-2009.awsdns-59.co.uk.

;; Query time: 121 msec
;; SERVER: 2409:12:4060:2500:fab7:97ff:fee7:c02c#53(2409:12:4060:2500:fab7:97ff:fee7:c02c)
;; WHEN: Thu Jul 07 14:06:25 JST 2022
;; MSG SIZE  rcvd: 226

$

MxToolBoxから確認

送信元のドメインと送信元サーバのIPアドレスからSPF登録がちゃんとできているのか確認できるのでMxToolBoxから確認してみます。

https://mxtoolbox.com/spf.aspx

  • 送信元のドメインとIPアドレスを入力して、SPF Record Lookupで確認
  • 確認画面

確認画面でちゃんと全てチェックが入っているのでこれで大丈夫そうですね。

あとがき

今回記載した内容はメールを支える技術の極々一部になります。
これら以外にもDKIMやDMARK、メールヘッダーの読み方、SendGridのようなSMTPリレーサービスをご紹介したいのですがまた別の機会でご紹介できればと思います。

Discussion