メールサーバ構築(Postfix)メモ

# はじめに
CentOS7にPostfixを構築して動かしてみたメモ

# 参考
[できるPRO CentOS 7サーバー (できるPROシリーズ)](https://www.amazon.co.jp/%E3%81%A7%E3%81%8D%E3%82%8BPRO-CentOS-7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-%E3%81%A7%E3%81%8D%E3%82%8BPRO%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E7%A7%80%E5%85%B8/dp/4844380346/ref=sr_1_13?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=Centos+%E3%82%B5%E3%83%BC%E3%83%90&qid=1612677173&sr=8-13)

# 使用するメールサーバ
昔は、Sendmailが主流。現在はPostfixが多く使われる

# メールサーバ機能
* メールを配送し、保存
  - SMTPサーバ(Postfix)
* メールを読み出せるようにする機能
  - POPサーバ(Dovecot)
  - **Linuxのユーザ名とパスワードを使ってメールを読み出す**

メールサーバを構築する場合、通常、**Postfix、Dovecot**を使用する

# メール送信フロー
* メールクライアントが送信元のドメインで使っているメールサーバにメールを送信
  - `事前にメールクライアントがどのメールサーバを使用するか設定している必要あり`
* 送信元のメールサーバは宛先のドメインをみて、自分のドメインが受け取るのか、宛先のドメインのメールサーバに送るのか判断
* 他のドメインの場合、そのドメインの**DNSのMXレコード**を見て、メールサーバに送信する
* 自分のドメインの場合、**スプール**にメールを保存する


# POPとImap
* POP
  - クライアントに読み込んだメールはサーバから削除
  - 110ポートで接続
* Imap
  - クライアントに読み込んだメールはサーバから削除されない
  - クライアントもImapに対応している必要あり
  - 143ポートで接続

# メールサーバセキュリティ強化
`暗号化`と`認証`

## 暗号化
* SSL/TLSを利用する。サーバに証明書を用意して、Postfix、Dovecotが読み込む。Webサイトと同じような暗号方法になる。
* **Postfix、Dovecotともにデフォルトで暗号化なし**
* **smtpの暗号化ではsmtpsとstarttls**

### フロー
* メールソフト -> Postfixへの送信
  - starttls/smtps
* Dovecto     -> メールソフト
  - pops

### フロー2
* postfix -> 宛先メールサーバ
  - starttls/smtps

## smtpsとstarttlsの違い
https://e-words.jp/w/SMTPS.html

SMTPSではSMTPによる接続前にSSL（Secure Socket Layer）/TLS（Transport Layer Security）による仮想的な通信路を形成する。通常のSMTPとは異なる専用のポート番号（一般的には465番）を用いて当初からSSL/TLSにより通信を開始する方式と、通常のSMTPで通信を開始し、「STARTTLS」と呼ばれる手順で双方がSSL/TLSに対応しているか確認し、対応していればSSL/TLSで再接続する方式の2つがあり、現在では後者が定着している。


### starttls設定

https://www.sendmagic.jp/techinfo/starttls-postfix/

* 相手サーバが暗号化に対応していれば、暗号化。対応していなければ平文
* **自分のメールサーバをstarttlsに対応したければ、サーバ証明書が必要**


## 認証
* Dovecot
  - **メールを読み出すときはLinuxのユーザ名とパスワードが必要**
* Postfix
  - 特になし(デフォルト)

## SMTP認証(SMTP AUTH)の導入
### SASLとは
https://web-creators-hub.com/linux/postfix2/
* 認証システムを実現するライブラリ(フレームワーク)です。Postfixだけでなくさまざまなアプリケーションで使用
* SASLは主に「Cyrus-SASL」と「Dovecot-SASL」というライブラリを

### 導入
* SASLという仕組みを利用
* SASLの認証方式
  - PLAIN , LOGIN
      + LinuxのログインパスワードをSMTP認証に使いたい場合。**パスワードは暗号化しない**
  - CRAM-MD5、DIGEST-MD5
      + 暗号化する。**Linuxのログインパスワードを使わないので**、SMTP認証用のパスワードを管理する必要がある

## SMTP認証設定(dovecot-sasl利用)
```vim

//SMTP認証を利用
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous
//Outlookの古いバージョンに対応
broken_sasl_auth_client= yes
//認証時の接続方法(デフォルト: cyrus)
smtpd_sasl_type=dovecot
//SMTP認証したクライアントを許可
smtpd_sasl_path=private/auth
smtpd_recipient_restrictions=
　//SMTP認証したクライアントを許可
  permit_sasl_authenticated,
  //mynetworksからの接続を許可
  permit_mynetworks,
  //それ以外を拒否
  reject_unauth_destination
```

# 共有できるメールアドレス(/etc/aliases)
project宛のメールを複数人に転送
* 編集 project: user1,user2,user3,user4@aaaa.co.jp
* ファイル読み込み project: :include:/etc/ml/test
* 反映：newaliasesコマンド





# SPAM対策
* ドメインの逆引き設定
  - 逆引き設定があるものは正しいという前提がある
* ドメインのSPFレコード設定
* SPAM製品の利用
  - クライアント側でフィルタ設定をすることができるが、サーバ側でフィルタなどの設定をする

# rootやpostmaster、webmaster、MAILER-DAEMONアカウント
* rootやpostmasterというアカウントは外部の管理者やユーザからの苦情や要望の窓口になっている。これら宛のメールは管理者の普段のアカウントに転送するように設定しておくべき
* エラーメールは差出人には出してメールの本文が送られるが、同時にpostmasterにも送られる。



# 補足
## SSL/TLS
* 自己証明書を使った場合、最近のメールソフトだと警告が表示されたり、利用できなかったりする。SSL/TLSを使う場合は証明書を取得するようにしましょう

## サブミッションポート
いかなるインターネット接続状態からのメール送信のための TCPポート25と異なるTCPポート(TCPポート587)のことを言います。
このSubmissionポートを使う（tcpポート番号を違える）ことで、**OP25Bの規制を回避し**、メール送信ができるようになります。
一般的に、**このSubmissionポートを利用するには、認証（ユーザ、パスワード）が必要**になります。