PostfixとDovecotで検証用のメールサーバを作る

# postfixとdovecotで検証用のメールサーバを作る

## はじめに

諸事情で検証環境に送信用のSMTPサーバと
メール本文の表示結果確認ができるようIMAP/POP3サーバが必要になったため、
Ubuntuで立ててみました。
※ RHEL系でやった方が先行情報が多くて楽です(後悔してる)。

## 注意点

:::note alert
警告
今回のメールサーバーはあくまで検証用につき、外部公開されていない検証用の仮想NW上に構築しています。
したがって、パスワードを平文で渡していたり、送信時の認証をしていなかったりと、
セキュリティ的にはかなり脆弱な設定をしています。
外部公開したり、本番環境に置いたりするときは参考にしないでください。
:::

## 環境

* Ubuntu Server 24.04 LTS
* Postfix 3.8.6
* Dovecot v2.3.21

## SMTPサーバの構築

### Postfixのインストール・初期設定

まずは他のパッケージ同様にインストールです。

```terminal:
$ sudo apt install postfix
```

設定ファイルの中身をどうするか聞かれます。
「Local only」にしておけば、今回の設定に必要な内容はだいたいデフォルトで入っているので選択します。
「Internet Site」にすると最初から沢山Configが書かれていて、適宜コメント解除で設定できるほか、
「No Configulation」にしておけば空っぽになるので、必要なコンフィグだけ書けます。
この辺りはお好みに合わせてください。

![VirtualBox_Ubuntu Server(Postfix)_24_08_2024_10_01_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1118450/da0cffcb-aa99-6df1-e6d7-1eab252df579.png)

サーバーのFQDNを聞かれるので入力しておきます。

![VirtualBox_Ubuntu Server(Postfix)_24_08_2024_10_01_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1118450/2ea6c8f8-b6f7-0e6f-2db3-4f7581ec220b.png)


Postfixは各種設定を「main.cf」という設定ファイルに書き込むので、Vimで開きます。

```terminal:
$ sudo vim /etc/postfix/main.cf
```

開いたら、下記のように設定を書き換えていきます。

```/etc/postfix/main.cf
myhostname = <サーバーのFQDN> 
　// 想定通りの値がデフォルトで入っていれば問題ないです。
inet_interfaces = all
　// 初期値はループバックアダプタになっていることがあります。
　// セキュリティを強化したい場合はリッスンするインタフェースを指定しましょう。
inet_protocols = ipv4
　//IPv6を使わない場合、初期値「all」から絞っておいた方が確実です。
home_mailbox = Maildir/
　// これでメールのデータは各ユーザーのホームディレクトリ配下「Maildir」に保存されます。
```

保存したら、サービスを再起動して適用します。

```terminal:
$ sudo systemctl restart postfix
```

Postfixの設定で「/home/<ユーザ名>/Maildir/」にメールのデータが保存されるよう設定しましたが、
OS側の設定を変えないと「Maildir」が作成されないので、adduserコマンドでユーザ追加時に
同ディレクトリが自動作成されるよう、下記の設定をしておきます。
※ 既に作成済みのユーザーは手で「Maildir」ディレクトリを作っておいてください。

```terminal:
$ sudo mkdir /etc/skel/Maildir
$ sudo chmod 700 /etc/skel/Maildir
```

### 単体動作確認

ここまで来たら、メールサーバ単体の動作確認に移ります。

#### メール用ディレクトリ作成確認

「Maildir」ディレクトリが自動作成されるか、ユーザを追加して確認します。

```terminal
$ sudo adduser test01 
　// 任意の名称(今回はtest01)のユーザを作ります。
$ su test01 
　// テスト用ユーザに切り替えます。
$ cd /home/test01/Maildir 
　// ディレクトリが存在するか確認します。
```

#### メール送信確認

Telnetで簡易動作確認を行います。
今回は作業用ユーザの「mailadmin」と先ほど作った「test01」の2ユーザを
使ってテストしていきます。

```:telnet
telnet localhost 25
　// デフォルトでは25番ポートをリッスンしています。

　Connected to localhost
　Escape character is '^]'
　220 sv-mail.mailtest.local  # このメッセージが返って来れば接続成功です。

helo postfix
　// いらないですが、折角ですし、もしもししましょう。

　250 sv-mail.mailtest.local

mail from:mailadmin@localhost 
　// メールの送信元アドレスを入力します。

　250 2.1.0 Ok
 　// Okが出れば成功しています。

rcpt to:test01@localhost
　// 宛先アドレスを入力します。今回はlocalhostで試します。

　250 2.1.5 Ok

data
　// 本文を書きはじめるためのコマンドです。

　354 End data with <CR><LF>.<CR><LF>

Hello Postfix
.                                    
　// 本文を書きます。改行→「.」→改行で送信されます。

　250 2.0.0 Ok: queued as 9E9958163A 
 　// このメッセージが出れば送信完了です。
```

宛先となった「test01」ユーザにスイッチし、下記コマンドを実行すると、
先ほど送ったメールを確認できます。
意図した内容になっていればサーバ単体の動作確認はOKです。

```terminal
$ vim /home/test01/Maildir/new/****
```

## IMAP/POP3サーバの構築

今回はメーラーから実際に受信した文面を確認したいので、
Dovecotをインストールします。
古い情報だと「dovecot-common」となっているパッケージが
現行バージョンでは「dovecot-core」になっておりますので、
今後も仕様変更がある可能性にご留意ください。

```terminal
$ sudo apt install dovecot-core dovecot-imapd dovecot-pop3d
```

DovecotはPostfixと違い、いろいろな設定ファイルがありますが、
一つずつ触っていきます。
今回は検証環境で、最悪入れなおせばいいと割り切っていますが、
基本はコピーコマンドでバックアップを残しておきましょう。
まずはメールに関する設定ファイルから。

```terminal
$ sudo vim /etc/dovecot/conf.d/10-mail.conf
```

「mail_location」の行をコメントアウトし、
1行下にmail_location = maildir:~/Maildirを追記します。
これで、メールの保存場所が、Postfix側で指定しているディレクトリと一致します。

次に、メインの設定を変更します。

```terminal
$ sudo vim /etc/dovecot/conf.d/10-masters.conf
```
```configuration:/etc/dovecot/conf.d/10-masters.conf
service pop3-login{
 inet_listener pop3 {
  #port = 110 
  　// もともとコメントアウトされているので、解除してリッスンポートを110にします。
 }

unix_listener /var/spool/postfix/private/auth {
 #mode = 0666 
 　// コメントアウトを解除します。
 #user =      
　// コメントアウトを解除して「user = postfix」にします。
 #group = 
  // コメントアウトを解除して「group = postfix」にします。
}
```

次は認証関連の設定変更です。

```terminal
$ sudo vim /etc/dovecot/conf.d/10-auth.conf
```
```configuration:/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no # 追記する。
auth_mechanisms = plain # デフォルトで記述されている
```
を追記してプレインテキスト認証を明示的に許可します。
今回は検証環境なのでこの設定にしていますが、パスワードが平文でやり取りされるので、
本番環境や、そうでなくても検証用ではないNWで使うときはやめておきましょう。

最後にサービスを再起動して設定を変更しておきます。

```console
$ sudo systemctl restart dovecot.service
```

Ubuntuは初期設定だとufwが無効なので、外部から普通にアクセスできますが、
ポートを閉じている場合は25番と110番を許可しておきましょう。

## 全体の動作確認

検証用NWのクライアント機のメーラーにメールサーバのユーザ情報を入れ、
認証に成功すれば問題ありません。
2アカウントで入っておき、相互にメールの送受信ができれば、
PostfixもDovecotも正常動作していると見做して問題ありません。

## 最後に

最初にも書きましたが、検証用のNWで使うこと前提なのでセキュリティよわよわです。
最低限SMTP AUTHとプレーンテキスト認証の拒否ぐらいは入れておきましょう。

何回かテスト用にメールサーバを立てているのですが、いつも手順を忘れて時間がかかるので、
備忘として書いておきます。おやすみなさい。