docs: add articles
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Submission (Message Submission)
|
||||
|
||||
Submission(Message Submission)は、メールクライアントからメール送信用サーバーにメールを投稿するための仕組み
|
||||
|
||||
## 補足:SMTPの2つの登場機会
|
||||
|
||||
全体:
|
||||
```
|
||||
Thunderbird
|
||||
|
|
||||
| Submission # ここと
|
||||
| TCP 587
|
||||
| SMTP AUTH
|
||||
v
|
||||
Postfix
|
||||
|
|
||||
| SMTP Relay # ここ
|
||||
| TCP 25
|
||||
v
|
||||
Gmail SMTP Server
|
||||
|
|
||||
v
|
||||
Gmailのメールボックス
|
||||
```
|
||||
|
||||
### 1. クライアントからメールサーバへの送信
|
||||
```
|
||||
Thunderbird
|
||||
|
|
||||
| Submission
|
||||
| TCP 587
|
||||
| SMTP AUTH
|
||||
v
|
||||
Postfix
|
||||
```
|
||||
- メールクライアントが送信サーバにメールを提出する処理を、一般に**Message Submission**と呼ばれる
|
||||
- TCP 587番ポートが標準的に使用される
|
||||
- 通常SMTP AUTHによるユーザ認証を行い、STARTTLSによって通信を暗号化する
|
||||
- TCP 465番ポートを使用し、接続開始時からTLSで暗号化する方式もある
|
||||
|
||||
### 2. メールサーバ感の転送
|
||||
```
|
||||
Postfix
|
||||
|
|
||||
| SMTP
|
||||
| TCP 25
|
||||
v
|
||||
Gmail SMTP Server
|
||||
```
|
||||
- サーバ間のメール転送では、基本的にTCP 25番ポートが使用される
|
||||
- サーバ間のSMTPでもSTARTTLSによる暗号化が利用される(平文許容されることある)
|
||||
|
||||
|
||||
|
||||
|
||||
## Submissionを使用しないケース
|
||||
|
||||
SMTPサーバをホストするサーバ上で動作するプログラムからメールを送信する場合:
|
||||
- `sendmail`コマンド ... SMTP使用しない・Submission使用しない
|
||||
- `localhost:25`に接続 ... SMTP使用する・Submission使用しない
|
||||
- `localhost:587`に接続 ... SMTP使用する・Submission使用する
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# SPF(Sender Policy Framework)
|
||||
|
||||
SPF(Sender Policy Framework)は、送信ドメインがDNSのTXTレコードでメールの送信を許可するIPアドレスを公開し、受信側のSMTPサーバが送信元IPアドレスの正当性を検証する仕組み
|
||||
|
||||
## 検証の流れ
|
||||
1. **メールの送信** ... 送信側のSMTPサーバが、受信側のSMTPサーバにメールを送信
|
||||
2. **送信元ドメインの取得** ... 受信側のSMTPサーバが、エンベロープFrom(MAIL FROM)から送信元ドメインを取得
|
||||
3. **SPFレコードの取得** ... 送信元ドメインのDNSに問い合わせ、SPFレコード(TXTレコード)を取得
|
||||
4. **IPアドレスの照合** ... 実際に接続してきた送信側SMTPサーバのIPアドレスが、SPFレコードで許可されているかを確認
|
||||
5. **検証結果の判定** ... 照合結果に応じて、pass(認証成功)やfail(認証失敗)などの結果を返す
|
||||
|
||||
## SPFレコードの設定例
|
||||
|
||||
特定のIPv4アドレスのみ許可する:
|
||||
```
|
||||
v=spf1 ip4:192.0.2.1 -all
|
||||
```
|
||||
- IPアドレスで指定する場合、`ip4:`もしくは`ip6:`をプレフィックスに用いる
|
||||
|
||||
複数のIPv4アドレスを許可する:
|
||||
```
|
||||
v=spf1 ip4:192.0.2.1 ip4:192:.0.0.2 -all
|
||||
```
|
||||
|
||||
Aレコードに登録されたIPアドレスを許可する:
|
||||
```
|
||||
v=spf1 a -all
|
||||
|
||||
v=spf1 a:mail.example.com -all
|
||||
```
|
||||
|
||||
MXレコードが指すIPアドレスを許可する:
|
||||
```
|
||||
v=spf1 mx -all
|
||||
```
|
||||
|
||||
外部のメール送信サービスを利用する場合:
|
||||
```
|
||||
v=spf1 include:_spf.example.com -all
|
||||
```
|
||||
|
||||
## 補足:SPFレコードの識別
|
||||
|
||||
素朴な疑問:
|
||||
> SPFレコードってただのTXTレコードだから、複数のTXTレコードがあっても大丈夫なのだろうか
|
||||
|
||||
複数のTXTレコードが登録されている場合:
|
||||
```
|
||||
example.com. IN TXT "v=spf1 ip4:192.0.2.1 -all"
|
||||
example.com. IN TXT "google-site-verification=xxxxxxxx"
|
||||
example.com. IN TXT "example-verification=yyyyyyyy"
|
||||
```
|
||||
- `v=spf1`で始まるレコードがSPFレコードとして識別される
|
||||
- SPFレコードが複数存在する場合はNG
|
||||
@@ -0,0 +1,98 @@
|
||||
# PostfixのComposeプロジェクト
|
||||
|
||||
## 1. ディレクトリの作成
|
||||
```
|
||||
sudo mkdir -p /opt/postfix
|
||||
|
||||
sudo chown $USER:$USER /opt/postfix
|
||||
|
||||
cd /opt/postfix
|
||||
```
|
||||
|
||||
## 2. compose.ymlの作成
|
||||
`compose.yml`:
|
||||
```
|
||||
services:
|
||||
postfix:
|
||||
image: boky/postfix:latest
|
||||
restart: unless-stopped
|
||||
|
||||
hostname: mail.unchioshi.net
|
||||
|
||||
environment:
|
||||
TZ: Asia/Tokyo
|
||||
ALLOWED_SENDER_DOMAINS: unchioshi.net
|
||||
|
||||
ports:
|
||||
- "127.0.0.1:2525:25"
|
||||
```
|
||||
- Dockerイメージは`boky/postfix`(送信用のSMTPリレーのイメージ)を利用
|
||||
- `ALLOWED_SENDER_DOMAINS`にはメールの送信元として許可するドメインを指定
|
||||
- コンテナのTCP 587番ポートをホスト側の2525番ポートに公開
|
||||
|
||||
## 3. コンテナの起動
|
||||
```
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 4. 送信テスト
|
||||
`swaks`をインストール:
|
||||
```
|
||||
sudo apt update
|
||||
|
||||
sudo apt install swaks
|
||||
```
|
||||
|
||||
メール送信:
|
||||
```
|
||||
swaks \
|
||||
--server localhost \
|
||||
--port 2525 \
|
||||
--from notification@unchioshi.net \
|
||||
--to t.murate1124@gmail.com \
|
||||
--header "Subject: Postfix SMTP Test"
|
||||
--body "Hello from Postfix!"
|
||||
```
|
||||
- `--server <server>` ... SMTPサーバの接続先
|
||||
- `--port <port>` ... SMTPサーバのポート
|
||||
- `--from <source-address>` ... 送信元メールアドレス
|
||||
- `--to <target-address>` ... 送信先メールアドレス
|
||||
- `--header <header>` ... メールヘッダー
|
||||
- `--body <content>` ... メール本文
|
||||
|
||||
## 補足:正引きと逆引きの対応を一致させ、PostfixがSMTP通信で名乗るホスト名も揃える
|
||||
|
||||
正引きと逆引きの対応:
|
||||
```
|
||||
tsubanyan@localhost:~$ dig +short mail.unchioshi.net A
|
||||
46.250.255.203
|
||||
tsubanyan@localhost:~$ dig +short -x 46.250.255.203
|
||||
mail.unchioshi.net.
|
||||
tsubanyan@localhost:~$
|
||||
```
|
||||
- 対応が取れていない場合は適宜編集する
|
||||
- 正引きはゾーン情報を編集する
|
||||
- 逆引きホスト名は、サーバ側の管理画面から設定
|
||||
|
||||
Postfixのホスト名を合わせる
|
||||
```
|
||||
myhostname = mail.unchioshi.net
|
||||
```
|
||||
- PostfixがSMTP通信で自身を識別する際のホスト名
|
||||
|
||||
```
|
||||
smtp_helo_name = mail.unchioshi.net
|
||||
```
|
||||
- 外部へのSMTP接続で使用するEHLO名
|
||||
- 通常`smtp_helo_name`のデフォルト値は`$myhostname`なので明示的に設定する必要はない
|
||||
|
||||
## 補足:SPF・DMARC対策
|
||||
|
||||
```
|
||||
tsubanyan@localhost:~$ dig +short unchioshi.net TXT
|
||||
"v=spf1 a mx ~all"
|
||||
tsubanyan@localhost:~$ dig +short _dmarc.unchioshi.net TXT
|
||||
"v=DMARC1; p=none"
|
||||
tsubanyan@localhost:~$
|
||||
```
|
||||
- ゾーン情報を編集して設定
|
||||
Reference in New Issue
Block a user