*このチュートリアルの以前のバージョンは、Justin Ellingwoodによって作成されました。*

はじめに

Postfixは人気のあるオープンソースの*メール転送エージェント*(MTA)であり、Linuxシステムで電子メールをルーティングおよび配信するために使用できます。インターネット上のパブリックメールサーバーの約25%がPostfixを実行していると推定されます。

このガイドでは、Ubuntu 20.04サーバーにPostfixをインストールして設定する方法を学びます。次に、*メールユーザーエージェント*(MUA、別名*メールクライアント*)であるs-nailをインストールして、Postfixがメールを正しくルーティングできるかテストします。

このチュートリアルの目標は、Postfixを起動してメールの基本機能を迅速に実行できるようになることです。このガイド終了までにメールサーバーの全機能がそろうわけではありませんが、始めるのに役立つセットアップの基本コンポーネントがいくつか得られます。

前提条件

postfix illustration for: 前提条件

このガイドに沿って作業を進めるには、次のものが必要です。

  • Postfixメールサーバーとして機能する、Ubuntu 20.04で稼働するサーバー。 sudo権限が付与されたroot以外のユーザーと、ufwで設定されたファイアウォール。サーバーのセットアップ方法については、Ubuntu 20.04初期サーバーセットアップガイドを参照してください。
  • Ubuntu 20.04サーバーを参照するFQDN。the cloud providerでドメイン名のセットアップする方法については、ドメインとDNSネットワーキングドキュメントを参照してください。メールに外部からアクセスするつもりなら、メールサーバーを指すMXレコードの存在も確認する必要があります。

このチュートリアルでは、FQDNがmail.example.comのホストを設定していると仮定します。必要に応じて、 example.comまたはmail.example.comを変更して、独自のFQDNを反映します。

ステップ1— Postfixのインストール

PostfixはUbuntuのデフォルトリポジトリに含まれているため、APTを使用してインストールできます。

まず、ローカルのaptパッケージキャッシュを更新します。

				
					
sudo apt update

				
			

次に、次のコマンドでpostfixパッケージをインストールします。ここで、環境変数DEBIAN_PRIORITY=lowをインストールコマンドに渡します。これにより、インストールプロセスが、追加オプションを設定するよう促すようになります。

				
					
sudo DEBIAN_PRIORITY=low apt install postfix

				
			

このインストールプロセスで、一連の対話型プロンプトが開きます。このチュートリアルの目的上、次の情報を使用して、プロンプトに応答します。

  • メール設定の一般的なタイプ:ここでは基盤のニーズに合致するInternet Siteを選択します。
  • システムメール名: アドレスのアカウント部分のみが決まっている場合、有効なメールアドレスの作成に使用されるベースドメインです。 たとえば、サーバーのホスト名がmail.<^>example.com<^>であるとします。システムメール名を<^>example.com<^>に設定して、ユーザー名 user1とすると、Postfixはアドレスuser1@<^>example.com<^>を使用します。
  • rootおよびpostmasterメール受信者: root@およびpostmaster@宛てのメールを転送するLinuxアカウントです。これにはプライマリアカウントを使用します。この場合はsammyです。
  • メールを受け入れる他の宛先: このPostfixインスタンスが受け入れるメール宛先を定義します。このサーバーが受信するドメインを追加する場合は、ここに追加します。そうでない場合は、デフォルトで問題なく動作します。
  • メールキューの同期更新を強制しますか?: ジャーナルファイルシステムを使用している確率が高いため、ここではNoを選択します。
  • ローカルネットワーク: メールサーバーがメッセージを中継するように設定されているネットワークの一覧です。ほとんどのシナリオでデフォルトが使えます。変更する場合は、ネットワークレンジに関する制限をかなり厳しくしてください。
  • メールボックスサイズ制限: メッセージのサイズの制限に使用します。0に設定すると、サイズ制限が無効になります。
  • ローカルアドレス拡張文字: アドレスの通常の部分を拡張(動的エイリアスの作成に使用)から切り離すために使用する文字です。このチュートリアルでは、デフォルトの+とします。
  • 使用するインターネットプロトコル: PostfixがサポートするIPバージョンを制限するかどうか選択します。このチュートリアルでは、allを選択します。

明示的に、このガイドでは次の設定を使用します。

  • メール設定の一般的なタイプ: Internet Site
  • システムメール名: <^>example.com<^><^>mail.example.com<^>ではない)
  • rootおよびpostmasterメール受信者: プライマリLinuxアカウントユーザー 名(例ではsammy
  • メールを受信する他の宛先: $myhostname, <^>example.com<^>、<^>mail.example.com<^>、<^>localhost.example.com<^>、localhost
  • メールキューの同期更新を強制しますか?: No
  • ローカルネットワーク: 127.0.0/8 [:ffff:127.0.0.0]/104 [:1]/128
  • メールボックスのサイズ制限: 0
  • ローカルアドレス拡張文字: +
  • 使用するインターネットプロトコル: all

: これらの設定を再調整するために戻るときは、次のように入力します。

				
					
sudo dpkg-reconfigure postfix

				
			

プロンプトには、以前の応答が事前に入力されます。

インストールプロセスが終了し、Postfix設定を更新する準備が整いました。

ステップ2 — Postfix設定の変更

次に、パッケージインストール中に尋ねられなかった設定を調整します。Postfixの設定の多くは/etc/postfix/main.cfファイルで定義されます。このファイルを直接編集するのではなく、Postfixのpostconfコマンドを使用して、クエリするか設定を行います。

まず、root以外のUbuntuユーザー用にメールボックスの場所を設定します。このガイドでは、*Maildir* 形式を使用します。メッセージは個々のファイルに分割され、これらのファイルはユーザーのアクションに基づいてディレクトリ間を移動します。もう1つのオプションは、すべてのメッセージを1つのファイルに保存する *mbox*形式です。

home_mailbox変数をMaildir/に設定します。その後、ユーザーのホームディレクトリ内にその名前でディレクトリ構造を作成します。次を入力して、home_mailboxを設定します。

				
					
sudo postconf -e 'home_mailbox= Maildir/'

				
			

次に、 virtual_alias_mapsテーブルの場所を設定します。このテーブルは、任意のメールアカウントをLinuxシステムアカウントにマッピングします。次のコマンドを実行します。これでテーブルの場所が/etc/postfix/virtualというハッシュデータベースファイルにマッピングされます。

				
					
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

				
			

main.cfファイルで仮想マップファイルの場所を定義したので、仮想マップファイルを作成して、Linuxシステムのユーザーアカウントに、メールアカウントのマッピングを開始します。お好みのエディタを使用して、ファイルを作成してください。ここではnanoを使用します。

				
					
sudo nano /etc/postfix/virtual

				
			

メールを受信するメールアドレスを挙げ、その後空白で区切って、メールを配信するLinuxユーザーを入力します。

たとえば、contact@<^>example.com<^>admin@<^>example.com<^>でメールを受信し、そのメールをLinuxユーザーのsammy に配信したい場合は、次のようなファイルを設定します。

				
					
[label /etc/postfix/virtual]

contact@&lt;^&gt;example.com&lt;^&gt; sammy

admin@&lt;^&gt;example.com&lt;^&gt; sammy

				
			

すべてのアドレスを対応するサーバーアカウントにマッピングしたら、ファイルを保存して閉じます。nanoを使用した場合は、CTRL + XYENTERキーを押します。

次のように入力してマッピングを適用します。

				
					
sudo postmap /etc/postfix/virtual

				
			

Postfixプロセスを再起動して、すべての変更が適用されたことを確認してください。

				
					
sudo systemctl restart postfix

				
			

前提条件の初期サーバーセットアップガイドに従った場合、UFWを使用したファイアウォールが設定されているはずです。UFWファイアウォールは、これらの接続が明示的に許可されていない限り、サーバー上のサービスへの外部接続をデフォルトでブロックします。したがって、Postfixの例外を許可するファイアウォールルールを追加する必要があります。

次のように入力して、サービスへの接続を許可します。

				
					
sudo ufw allow Postfix

				
			

これでPostfixは外部接続を受け入れるように設定されました。ただし、メールクライアントでテストする準備はまだできていません。クライアントをインストールしてサーバーに配信するメールとやり取りする前に、Ubuntuサーバーのセットアップにいくつか変更を加える必要があります。

ステップ3 — メールクライアントのインストールとMaildir構造の初期化

配信中のメールとやり取りするために、s-nailパッケージをインストールするプロセスをこのステップで見てみましょう。これはBSD xmailクライアントのバリアントであり、機能が豊富で、Maildir形式を正しく処理できます。

ただし、クライアントをインストールする前に、MAIL環境変数の設定が正しいか確認するのが賢明です。 s-nailは、この変数を調べて、ユーザーのメールを探す場所を見つけます。

アカウントへのアクセス方法(sshsusu-sudoなど)にかかわらず、MAIL変数が設定されていることを確認するには、/etc/bash.bashrcファイル内で変数を設定し、それを/etc/profile.d内のファイルに追加し、それが各ユーザーにデフォルトで設定されていることを確認します。

これらのファイルに変数を追加するには、次を入力します。

				
					
echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

				
			

変数を現在のセッションに読み込むには、/etc/profile.d/mail.shファイルをソースします。

				
					
source /etc/profile.d/mail.sh

				
			

それが完了したら、APTでs-nailメールクライアントをインストールします。

				
					
sudo apt install s-nail

				
			

クライアントを実行する前に、設定をいくつか調整する必要があります。エディタで/etc/s-nail.rcファイルを開きます。

				
					
sudo nano /etc/s-nail.rc

				
			

ファイルの最後に次のオプションを追加します。

				
					
[label /etc/s-nail.rc]

. . .

set emptystart

set folder=Maildir

set record=+sent

				
			

これらの行が実行するのは次のことです。

  • set emptystart: クライアントは空の受信トレイでも開くことができます。
  • set folder=Maildir: Maildirディレクトリを内部folder変数に設定します。
  • set record=+sent: 送信済メールをfolder変数として設定されたディレクトリ内に保存するために、sent mboxファイルを作成します。今回はMaildirディレクトリになります。

完了したら、ファイルを保存して閉じます。これで、システムのMaildir構造を初期化する準備が整いました。

ホームディレクトリ内にMaildir構造を作成する簡単な方法は、s-nailコマンドで自分自身にメールを送信することです。sentファイルはMaildirが作成されないと利用できないため、この最初のメールでは書き込みを無効にする必要があります。-Snorecordオプションを渡すことでこれを行います。

文字列をs-​​nailコマンドにパイプしてメールを送信します。コマンドを調整して、Linuxユーザーを受信者としてマークするようにします。

				
					
echo 'init' | s-nail -s 'init' -Snorecord &lt;^&gt;sammy&lt;^&gt;

				
			

:次の応答が得られる*場合があります*。

				
					
[secondary_label Output]

Can't canonicalize "/home/&lt;^&gt;sammy&lt;^&gt;/Maildir"

				
			

これは正常な動作で、メッセージの初回送信時のみ表示されるものです。

ディレクトリが作成されたかどうか確認するには、~/Maildirディレクトリを探します。

				
					
ls -R ~/Maildir

				
			

ディレクトリ構造が作成され、新しいメッセージファイルが ~/Maildir/newディレクトリにあることがわかります。

				
					
[secondary_label Output]

/home/&lt;^&gt;sammy&lt;^&gt;/Maildir/:

cur new tmp



/home/&lt;^&gt;sammy&lt;^&gt;/Maildir/cur:



/home/&lt;^&gt;sammy&lt;^&gt;/Maildir/new:

1463177269.Vfd01I40e4dM691221.mail.&lt;^&gt;example.com&lt;^&gt;



/home/&lt;^&gt;sammy&lt;^&gt;/Maildir/tmp:

				
			

ディレクトリ構造が作成されたので、s-nailクライアントをテストする準備が整いました。送信したinitメッセージを表示し、外部メールアドレスにメッセージを送信します。

ステップ5 — クライアントのテスト

クライアントを開くには、s-nailコマンドを実行します。

				
					
s-nail

				
			

コンソールでは、簡易な受信トレイに届いたinitメッセージが表示されるはずです。

				
					
[secondary_label Output]

s-nail version v14.9.15. Type `?' for help

"/home/sammy/Maildir": 1 message 1 new

&gt;N 1 sammy@example.com 2020-05-19 15:40 14/392 init

				
			

ENTERキーを押すとメッセージが表示されます。

				
					
[secondary_label Output]

[-- Message 1 -- 14 lines, 369 bytes --]:

From sammy@example.com Tue May 19 15:40:48 2020

Date: Tue, 19 May 2020 15:40:48 +0000

To: sammy@example.com

Subject: init

Message-Id: &lt;20160513220749.A278F228D9@mail.example.com&gt;

From: sammy@example.com



init

				
			

hを入力してENTERキーを押すとメッセージ一覧に戻ります。

				
					
h

				
			
				
					
[secondary_label Output]

&gt;R 1 sammy@example.com 2020-05-19 15:40 14/392 init

				
			

メッセージのステータスが今R、つまり既読になったことが分かります。

このメッセージはあまり有用ではないので、dを入力してからENTERキーを押して削除します。

				
					
d

				
			

ターミナルに戻るには、qを入力してからENTERキーを入力します。

				
					
q

				
			

最終テストとして、s-nailがメッセージを正しくメール送信できるか確認します。これを行うには、前のステップで送信したinitメッセージで行ったように、テキストファイルの内容をs-nailプロセスにパイプします。

まず、テキストエディターでテストメッセージを作成します。

				
					
nano ~/test_message

				
			

エディター内で送信するテキストを入力します。

				
					
[label ~/test_message]

Hello,



This is a test. Please confirm receipt!

				
			

メッセージを入力したらファイルを保存して閉じます。

次に、catコマンドを使用してメッセージをs-nailプロセスにパイプします。次の例では、次のオプションを使用します。

  • -s:メールメッセージの件名を定義します。
  • -r:メールの「From:」フィールドのオプションを変更します。デフォルトでは、ログインしているLinuxユーザーがこのフィールドに入力されます。-rオプションを使用すれば、/etc/postfix/virtualファイルで定義したアドレスなど、有効なアドレスでこれを上書きできます。たとえば、次のコマンドは[email protected]を使用します。

また、<^>user<^>@<^>email.com<^> をアクセス可能なメールアドレスに変更してください。

				
					
cat ~/&lt;^&gt;test_message&lt;^&gt; | s-nail -s '&lt;^&gt;Test email subject line&lt;^&gt;' -r &lt;^&gt;contact@example.com&lt;^&gt; &lt;^&gt;user&lt;^&gt;@&lt;^&gt;email.com&lt;^&gt;

				
			

次に、メッセージを送信したメールアドレスの受信トレイに移動します。瞬時にメッセージが届いているはずです。

:メッセージが受信トレイにない場合は、スパムフォルダに届いた可能性があります。

送信したメッセージは、s-nailクライアント内で表示できます。次のように入力して、対話型クライアントを再起動します。

				
					
s-nail

				
			

メールクライアントから、次のように入力して送信メッセージを表示します。

				
					
file +sent

				
			

出力は次のようになります。

				
					
[secondary_label Output]

+[/home/sammy/Maildir/]sent: 1 message 1 new

▸N 1 contact@example.com 2020-05-19 15:47 12/297 Test email subject line

				
			

受信メールに使用するのと同じコマンドを使用して、送信メールを管理できます。

まとめ

これで、Ubuntu 20.04サーバー上でPostfix設定が完了しました。メールサーバーの管理は、初心者の管理者にとっては難しい作業ですが、必要なMTAのメール機能が備わったこの設定から始めるのがよいでしょう。