セキュアなメールサーバーを構築して送受信できるようになるまで（前編）

前編としてUbuntu×Postfix×Dovecotを用いて送受信可能なメールサーバの構築を行い、
後編としてLet's Encryptを用いて証明書を取得しセキュアなメールサーバにするまでが目標です。

今回は「前編：Ubuntu×Postfix×Dovecotを用いて送受信可能なメールサーバの構築」
→後編は[こちら](https://qiita.com/y-orihara/items/0360bc58aeb3ee794c97)

## VPSの準備

ここでは[ConoHa VPS]([https://www.conoha.jp/vps/](https://www.conoha.jp/vps/))で契約したVPSを使用しています。

以降の説明でもConoHa VPSを利用している前提で進めていきます。

メモリ：512MB

CPU：1Core

SSD：30GB

OS：Ubuntu20.04

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/a527b7ae-322f-33ce-f8bd-e12de3377c01.png)


### ドメインを取得する

ここでは[お名前.com]([https://www.onamae.com/](https://www.onamae.com/))にて取得したドメインを使用しています

以降の説明でもお名前.comで取得したドメインを使用している前提で進めていきます

### ネームサーバーを変更する

- DNSにドメインを追加
    
    ConoHaコントロールパネルにログイン後 DNSを選択してドメインリスト画面を表示
    
    ＋ドメインを押してドメイン名にお名前.comで取得したドメインを登録
    
    登録されたドメインを選択して展開しタイプがNSの値3つを確認する
    
    ※ネームサーバーを設定するにて利用します
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/29b4f86f-0f4b-c577-6eb4-fe36fc6d26fa.png)

    
- DNSレコードを追加
    
    えんぴつアイコンを選択して下記表を参考にDNSレコードを追加
    
    | タイプ | 名称 | TTL | 値 |
    | --- | --- | --- | --- |
    | A(通常) | @  | 3600 | (VPSのIPアドレス) |
    | A(通常) | mail | 3600 | (VPSのIPアドレス) |
    | A(通常) | www | 3600 | (VPSのIPアドレス) |
    | MX | @  | 3600 | ポイント先 mail.(ドメイン)<br>優先度 10 |
    | NS | @  | 3600 | ns-a1.conoha.io |
    | NS | @  | 3600 | ns-a2.conoha.io |
    | NS | @  | 3600 | ns-a3.conoha.io |
    | TXT | @  | 3600 | v=spf1 +ip4:(VPSのIPアドレス) +ip6:2400:8500:1801:434:(VPSのIPアドレス) ~all |

    
    VPSのIPアドレスはConoHaコントロールパネル > 該当ネームタグ > ネットワーク情報 で確認可能
    
    上記表の設定参考例
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/0c451317-f3ef-7809-d53e-dd25307cfa42.png)

    
- ネームサーバーを設定する
    
    [お名前.com](http://お名前.com) NAVIにログイン後 ドメイン > ドメイン機能一覧 > ネームサーバーの変更 で「ネームサーバー設定」画面を開く
    
    該当のドメインを選択してその他タブより「DNSにドメインを追加」で確認したネームサーバ３つを設定
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/da71bb3a-38ca-45ff-22aa-958e33e5feab.png)

    

## VPSにSSH接続してログインする

### SSHクライアントソフトを用意する

ここではTeraTermをインストールして以降の操作を進めていきます

[TeraTerm](https://ja.osdn.net/projects/ttssh2/releases/)

### TeraTermでVPSに接続する

1. [ConoHaコントロールパネル](https://manage.conoha.jp/Service/)よりVPSのIPアドレスを確認
    
    サーバーリストより該当のネームタグを選択
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/00cc30f0-3445-3f45-66cb-c8e292375819.png)

    
    ネットワーク情報 > IPアドレスを確認
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/cc68df3d-992a-a1fa-bc86-1484d5b08ca2.png)

    
2. TeraTermからVPSに接続
    
    TeraTermを起動しホストに先程確認したIPアドレスを入力して「OK」を押下
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/5f8bc62f-4676-1959-a69b-d8f17be71481.png)

    
    ユーザ名には「root」、パスフレーズにはサーバー追加時に設定したrootパスワードを入力して「OK」を押下
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/7b14feb3-f900-912e-a673-9a7b64e2a262.png)

    
    VPSへのログインが成功するとコンソール画面にroot@"IPアドレス"が表示されroot権限の操作が可能
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/87e53c53-f6f6-8d7a-57d7-94c2f451faf7.png)

    
3. 一般ユーザを作成して思わぬ事故を回避する
    
    誤操作等による事故を回避するためにもこの後の作業はsudo権限を付与した一般ユーザを作成して進める
    
    ```bash
    # ユーザを追加
    root@XXX-XX-XX-XXX:~# sudo adduser user1
    Adding user `user1' ...
    Adding new group `user1' (1000) ...
    Adding new user `user1' (1000) with group `user1' ...
    Creating home directory `/home/user1' ...
    Copying files from `/etc/skel' ...
    New password: // 作成するユーザのPWを入力
    Retype new password: // 上記で入力したPWを再度入力
    passwd: password updated successfully
    Changing the user information for user1
    Enter the new value, or press ENTER for the default
            Full Name []: // ENTER
            Room Number []: // ENTER
            Work Phone []: // ENTER
            Home Phone []: // ENTER
            Other []: // ENTER
    Is the information correct? [Y/n] 
    
    // 追加したユーザにsudo権限を付与
    root@XXX-XX-XX-XXX:~# sudo gpasswd -a user1 sudo
    Adding user user1 to group sudo
    ```
    
4. 一般ユーザーで再接続する
    
    ここまではrootで操作を行っていたので一度ログアウトして先ほど作成した一般ユーザで再接続を行う
    
    ```bash
    # exitコマンドでログアウト
    root@XXX-XX-XX-XXX:~# exit
    ```
    
    上記コマンドでTeraTermが終了するので再度起動して今度は一般ユーザでVPSに接続
    
    コンソールに先ほど作成した一般ユーザの名前が表示されていればOK
    
    ```bash
    # 接続後のコンソール画面を確認
    user1@XXX-XX-XX-XXX:~$
    ```
    

ここまででメールサーバ構築までの事前準備が完了しました！

お疲れさまでした。いよいよメールサーバを構築していきます。

# UbuntuにPostfixを用いて送信専用のメールサーバを構築する

## メール配送用プログラム「Postfix」のインストール

下記コマンドを入力して「Postfix」をインストール

```bash
sudo apt-get -y install postfix
```

インストールが正常に進行すると下記GUIが表示されるので「OK」 > 「No configuration」の順に選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/4229d893-32be-6c03-94cf-075133b0ccf5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/09706e65-db21-8e27-47ab-ec3fcad9035e.png)


インストール作業完了後下記コマンドで「Postfix」がインストール済みであることを確認

```bash
apt list --installed | grep postfix
> **postfix**/focal-updates,now 3.4.13-0ubuntu1.2 amd64 [installed]
```

## Postfixの設定ファイルを編集

### 設定ファイル「main.cf」をコピー

下記コマンドで設定ファイルをコピー

コピーしたファイルは `/etc/postfix/`に格納

```bash
# 「main.cf」ファイルのコピーを作成
sudo cp /usr/share/postfix/main.cf.dist /etc/postfix/main.cf
```

### コピーした設定ファイル「main.cf」を編集

```bash
# viエディタで「main.cf」を開く
sudo vi /etc/postfix/main.cf
```

設定ファイルの編集にあたり以下操作方法を駆使して設定ファイルを編集

`/`を入力して文字列の検索で設定項目を検索

`i`を入力して編集モードに移行して設定ファイルを編集

`esc`を入力してノーマルモードに移行

```bash
# コメント解除
alias_database = hash:/etc/aliases

# コメント解除
alias_maps = hash:/etc/aliases

# コメント解除
mail_owner = postfix

# コメント解除 ホスト名指定
myhostname = ホスト名＋ドメイン名(例：mail.hoge.com)

# コメント解除 ドメイン名指定
mydomain = ドメイン名（例：hoge.com）

# コメント解除
myorigin = $mydomain

# コメント解除
inet_interfaces = all

# コメント解除
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# コメント解除
local_recipient_maps = unix:passwd.byname $alias_maps

# コメント解除
home_mailbox = Maildir/

# コメントアウト
#html_directory =

# コメントアウト
#sample_directory

# コメントアウト
#readme_directory =

# 最下部に追加
masquerade_domains = ドメイン名(送信元サブドメインを削除するためのオプション設定 例：hoge.com)
```

上記設定ファイルの編集が完了したら`:wq`で保存しviを終了

コンソールに戻り下記コマンドで設定内容の確認・チェックを行う

```bash
# 設定内容確認
postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
local_recipient_maps = unix:passwd.byname $alias_maps
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = (ドメイン名)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
myhostname = mail.(ドメイン名)
mynetworks = 127.0.0.0/8
newaliases_path = /usr/bin/newaliases.postfix
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
unknown_local_recipient_reject_code = 550
```

```bash
# 設定内容チェック
sudo postfix check
# 以下エラーについては問題ない
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
```

```bash
# メールエイリアスのデータベースを再構築
newaliases
```

### Postfixを再起動

下記コマンドでPostfixを再起動し設定内容を反映

```bash
# Postfixのステータス確認
sudo /etc/init.d/postfix status
```

起動後下記コマンドでPostfixのステータスを確認し正常起動していることを確認

```bash
# Postfixのステータス確認
sudo /etc/init.d/postfix status

● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-12-01 18:21:36 JST; 1 day 23h ago
    Process: 160577 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 160577 (code=exited, status=0/SUCCESS)

Dec 01 18:21:36 118-27-69-174 systemd[1]: Starting Postfix Mail Transport A…t...
Dec 01 18:21:36 118-27-69-174 systemd[1]: Finished Postfix Mail Transport Agent.
Hint: Some lines were ellipsized, use -l to show in full.
```

ここまででPostfixによる送信用設定が完了

実際にテストメールを送信して確認

## telnetで送信テストを実施

### telnetをインストール

テストメールの送信にはtelnetを利用するため下記コマンドでインストール

```bash
# telnetインストール
sudo apt-get -y install telnet

# インストールされているかの確認
apt list --installed | grep telnet
```

### telnetでSMTP接続

下記コマンドでSMTP接続を実行

```bash
# SMTP接続
telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.(ドメイン名) ESMTP Postfix (Ubuntu)
```

正常接続できればステータスコード.220が返る

入力待機状態となるため下記コマンドで応答する

```bash
# heloコマンドで応答
helo localhost

250 mail.(ドメイン名)
```

ステータスコード.250が返ればOK

次に下記コマンドで送信元のメールアドレスを指定

```bash
# mail fromコマンドで送信元を指定
mail from:(Ubuntuにログインしているユーザ名)@(ドメイン名)

250 2.1.0 Ok
```

ステータスコード.250が返ればOK

次に下記コマンドで送信先のメールアドレスを指定

※メールアドレスは実際に確認できるものを指定

```bash
# rcpt to: コマンドで送信先を指定
rcpt to:hoge@test.com(送信先のメールアドレス)

250 2.1.5 Ok
```

ステータスコード.250が返ればOK

次に下記コマンドでメール本文を入力

本文入力後 `.` で入力を終了

```bash
# dataコマンドで本文入力
data
354 End data with <CR><LF>.<CR><LF>
testmail
.
250 2.0.0 Ok: queued as 4A3F1C04E0
```

ステータスコード.250が返りキューに入った旨が表示されれば送信完了

最後に下記コマンドでSMTP接続を切断

```bash
# quitコマンドでSMTP切断
quit
221 2.0.0 Bye
Connection closed by foreign host.
```

送信先の受信ボックスを確認してメールが届いているか確認

※迷惑メールとして受け取っていることがあるので確認できない場合はそちらを確認

### メールログの確認

メールの受信が確認できない場合は以下コマンドでログを確認

```bash
# メールログの確認
sudo tail /var/log/mail.log
```

ここまでの作業で送信用のメールサーバー構築が完了しました。

次項から送受信可能なメールサーバの構築を行います。

## 「Dovecot」で送受信可能なメールサーバ構築

### DNS設定の確認

hostコマンドを使えるように `bind-utils`をインストール

```bash
# bind-utilsのインストール
sudo apt-get -y install bind-utils
```

ネームサーバーを変更する_DNSレコードを追加で設定したMXレコードを以下コマンドで確認

```bash
# MXレコードの確認
host -t mx (ドメイン名)

(ドメイン名) mail is handled by 10 mail.(ドメイン名)
```

設定したMXレコードが表示されることを確認

not foundの場合はDNSレコードを確認

### dovecotのインストール

メールの受信に必要なパッケージ `dovecot`をインストール

```bash
sudo apt-get -y install dovecot-common dovecot-imapd dovecot-pop3d
```

インストール後下記コマンドを実施し3種がinstalledになっていることを確認

```bash
apt list --installed | grep dovecot

> dovecot-core/focal-updates,now 1:2.3.7.2-1ubuntu3.5 amd64 [installed]
> dovecot-imapd/focal-updates,now 1:2.3.7.2-1ubuntu3.5 amd64 [installed]
> dovecot-pop3d/focal-updates,now 1:2.3.7.2-1ubuntu3.5 amd64 [installed]
```

### Dovecotの設定編集

- dovecot.confを変更
    
    設定ファイルを編集する前に既存ファイルのバックアップを作成
    
    ```bash
    # dovecot.confのコピーを作成
    sudo cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org
    ```
    
    viで設定ファイルを編集
    
    ```bash
    # viで設定ファイルを開く
    sudo vi /etc/dovecot/dovecot.conf
    
    # コメント解除して変更
    listen = *
    
    # 最後尾に追加
    disable_plaintext_auth = no
    ```
    
- 10-auth.confを変更
    
    設定ファイルを編集する前に既存ファイルのバックアップを作成
    
    ```bash
    # 10-auth.confのコピーを作成
    sudo cp -p /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
    ```
    
    viで設定ファイルを編集
    
    ```bash
    # viで設定ファイルを開く
    sudo vi /etc/dovecot/conf.d/10-auth.conf
    
    # コメント解除して変更
    disable_plaintext_auth = no
    # 変更
    auth_mechanisms = plain login
    ```
    
- 10-mail.conf を変更
    
    設定ファイルを編集する前に既存ファイルのバックアップを作成
    
    ```bash
    # 10-mail.confのコピーを作成
    sudo cp -p /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
    ```
    
    viで設定ファイルを編集
    
    ```bash
    # viで設定ファイルを開く
    sudo vi /etc/dovecot/conf.d/10-mail.conf
    
    # 変更
    mail_location = maildir:~/Maildir
    ```
    
- 10-master.conf を変更
    
    設定ファイルを編集する前に既存ファイルのバックアップを作成
    
    ```bash
    # 10-master.confのコピーを作成
    sudo cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.org
    ```
    
    viで設定ファイルを編集
    
    ```bash
    # viで設定ファイルを開く
    sudo vi /etc/dovecot/conf.d/10-master.conf
    
    # コメント解除して変更
    ※変更前
    # Postfix smtp-auth
      #unix_listener /var/spool/postfix/private/auth {
      # mode = 0666
      #}
    ※変更後
    # Postfix smtp-auth
      unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        **user = postfix
        group = postfix**
      }
    ```
    
- 10-ssl.conf を変更
    
    設定ファイルを編集する前に既存ファイルのバックアップを作成
    
    ```bash
    # 10-ssl.confのコピーを作成
    sudo cp -p /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.org
    ```
    
    viで設定ファイルを編集
    
    ```bash
    # viで設定ファイルを開く
    sudo vi /etc/dovecot/conf.d/10-ssl.conf
    
    # コメント解除して変更
    ssl = no
    # コメントアウト
    #ssl_cert = </etc/dovecot/private/dovecot.pem
    #ssl_key = </etc/dovecot/private/dovecot.key
    ```
    

### Dovecotの設定内容確認

以下コマンドでデフォルトから変更した設定項目を確認することが可能

```bash
# doveconfの設定確認
doveconf -n

# 2.3.7.2 (3c910f64b): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.7.2 ()
# OS: Linux 5.4.0-91-generic x86_64 Ubuntu 20.04.2 LTS
# Hostname: 123-45-67-890
auth_mechanisms = plain login
listen = *
mail_location = maildir:~/Maildir
mail_privileged_group = mail
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
protocols = " imap pop3"
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
}
ssl = no
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = # hidden, use -P to show it
userdb {
  driver = passwd
}
```

dovecotを再起動して設定を反映し、ステータスが`Active: active (running)`となっていることを確認

```bash
# dovecotを再起動する
sudo systemctl restart dovecot

# dovecotのステータスを確認
systemctl status dovecot
```

下記コマンドでPOP3用110番ポート、IMAP4用143番ポートがアクティブになっていることを確認

```bash
# ポートの確認
netstat -nat

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN
```

### Postfixの認証機能確認

下記コマンドでPostfixで対応している認証機能を確認

```bash
# 認証機能の確認
postconf -a

cyrus
dovecot
```

### Postfixの設定編集

以下コマンドで設定ファイルをviで編集

```bash
# viでmain.cfを開く
sudo vi /etc/postfix/main.cf

# 最下部に追加
# SMTP-AUTH用パラメータ
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
```

編集後下記コマンドで設定内容を確認

```bash
# Postfixの設定確認
postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
local_recipient_maps = unix:passwd.byname $alias_maps
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = (ドメイン名)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
myhostname = mail.(ドメイン名)
mynetworks = 127.0.0.0/8
newaliases_path = /usr/bin/newaliases.postfix
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
unknown_local_recipient_reject_code = 550

# Postfixの設定チェック
sudo postfix check
# 以下エラーについては問題ない
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
```

## Postfixのサブミッションポートを設定

OP25B（迷惑メール対策設定）を行うためサブミッションポートの設定を行う

### master.cfの編集

サブミッションポートの設定を行うためmaster.cfを編集する

作業前に下記コマンドで既存ファイルをコピーする

```bash
# master.cfをコピー
sudo cp -p /etc/postfix/master.cf /etc/postfix/master.cf.org
```

以下コマンドで設定ファイルを編集

```bash
# viでmaster.cfを編集
sudo vi /etc/postfix/master.cf

# コメント解除して変更
submission inet n       -       n       -       -       smtpd
```

### 変更した設定を反映

下記コマンドでPostfixを再起動し設定内容を反映

ステータスが`Active`となっていることを確認

```bash
# Postfixを再起動
sudo systemctl restart postfix

# Postfixのステータスを確認
sudo systemctl status postfix
Active: active (exited) since Sun 2021-12-12 20:18:33 JST; 41s ago
```

下記コマンドで587番ポートがアクティブとなっていることを確認

```bash
# ポートの確認
netstat -nat

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN
```

## SMTP-AUTHとサブミッションポートの動作を確認

### telnetコマンドで接続テスト

- ユーザ情報をBASE64エンコード
    
    Ubuntuにログインしているユーザ情報（ユーザ名とPW）を下記コマンドでBASE64エンコード
    
    ```bash
    # ユーザ情報をBASE64エンコード
    perl -MMIME::Base64 -e 'print encode_base64("ユーザ名\0ユーザ名\0パスワード");'
    # サンプル
    perl -MMIME::Base64 -e 'print encode_base64("user\0user\0password");' 
    ```
    
- SMTP用25番ポートへSMTP-AUTHで認証確認
    
    ```bash
    # telnetで25番ポートに接続する
    telnet localhost 25
    
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 mail.(ドメイン名) ESMTP Postfix (Ubuntu)
    ```
    
    ```bash
    # ehloコマンドを叩く
    ehlo (ドメイン名)
    
    250-mail.(ドメイン名)
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-AUTH=PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250-SMTPUTF8
    250 CHUNKING
    ```
    
    ```bash
    # AUTH PLAINコマンドを叩く
    AUTH PLAIN ←自身で入力
    334
    dXNlcjEAdXNlcjEAdXNlcjE= ←BASE64エンコードで出力したものを入力
    235 2.7.0 Authentication successful
    ```
    
    `235 2.7.0 Authentication successful` が返ればOK
    
    `quit` コマンドで接続を終了する
    
- サブミッション用587番ポートへSMTP-AUTHで認証確認
    
    ```bash
    # telnetで587番ポートに接続する
    telnet localhost 587
    
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 mail.(ドメイン名) ESMTP Postfix (Ubuntu)
    ```
    
    ```bash
    # ehloコマンドを叩く
    ehlo (ドメイン名)
    
    250-mail.(ドメイン名)
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-AUTH=PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250-SMTPUTF8
    250 CHUNKING
    ```
    
    ```bash
    # AUTH PLAINコマンドを叩く
    AUTH PLAIN ←自身で入力
    334
    dXNlcjEAdXNlcjEAdXNlcjE= ←BASE64エンコードで出力したものを入力
    235 2.7.0 Authentication successful
    ```
    
    `235 2.7.0 Authentication successful` が返ればOK
    
    `quit` コマンドで接続を終了する
    

### ファイアウォールの接続設定

以下コマンドでPostfixとDovecotに対してに対しての通信を有効化

```bash
sudo ufw allow Postfix
sudo ufw allow "Postfix SMTPS"
sudo ufw allow "Postfix Submission"
sudo ufw allow "Dovecot IMAP"
sudo ufw allow "Dovecot POP3"
sudo ufw allow "Dovecot Secure IMAP"
sudo ufw allow "Dovecot Secure POP3"
```

### mailコマンドでテスト送信

以下コマンドでmailコマンドをインストール

```bash
# mailコマンドの入手
sudo apt install mailutils
```

- テストメール送信

以下コマンドでメールを送信

```bash
# メールを送信
mail (ユーザ名)
Cc:
Subject: test
testMail
.(ピリオドで終了しない場合ctrl+Dなどを試す)
```

下記コマンドでメールログを確認し、`status=sent`となっていることを確認

```bash
# メールログの確認
sudo tail /var/log/mail.log

Dec 18 18:04:01 118-27-69-174 postfix/local[718682]: 8079DC065E: to=<user1@localhost>, relay=local, delay=0.02, delays=0.01/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
```

下記コマンドでメールの保存先が作成されていることを確認

```bash
# Maildirを確認
ls -al /home/(ユーザ名)/Maildir/
total 20
drwx------ 5 user1 user1 4096 Dec 18 17:46 .
drwxr-xr-x 4 user1 user1 4096 Dec 18 17:46 ..
drwx------ 2 user1 user1 4096 Dec 18 17:46 cur
drwx------ 2 user1 user1 4096 Dec 18 18:04 new
drwx------ 2 user1 user1 4096 Dec 18 18:04 tmp
```

### クライアントアプリを使ってテスト

メールテスト用のユーザーを作成し[Thunderbird](https://www.thunderbird.net/ja/)を利用して確認を行う

- ユーザの追加

```bash
# ユーザ作成
sudo adduser ubuntu
```

- POP3 × SMTP-AUTHでテスト
    - thunderbirdにメールアカウントを設定
    
    現時点では通信が暗号化されていないため警告が表示されるが、以降の作業でSSL/TLSの設定を行うためここでは一旦承諾
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/0a02aec2-4510-f943-7347-08653a1cea24.png)

    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/09555764-c77e-6cf2-585e-553a4745d87e.png)

    
    - クライアントでテスト送信
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/a79a8d89-6dfc-dc0b-c3cf-161942c84f3f.png)

    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/83b48ae9-2b5d-e7ca-cd8e-07b2e8745176.png)

    
    - SMTP-AUTHを使ってメールを外部にリレー配送
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/a612eba1-f536-89b7-d38e-49ac7269c2d4.png)

    

- IMAP4 × SMTP-AUTHでテスト
    
    現時点では通信が暗号化されていないため警告が表示されるが、以降の作業でSSL/TLSの設定を行うためここでは一旦承諾
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/08f8c143-aebc-bbe0-a8b4-22568ce23b27.png)

    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/9ef9b3e5-6182-5f92-e7a1-71832f546178.png)

    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670588/62e71a82-8720-0ccc-fb4e-9791144e72c5.png)

    
    IMAPの場合でも正常に接続できていることを確認
    
    ここまでで送受信可能なメールサーバの構築が完了
    
    次項でSSL/TLSの設定を行い**セキュア**なメールサーバに仕上げていきます。