Table of Contents
*このチュートリアルの以前のバージョンは、Justin Ellingwoodによって作成されました。*
はじめに
Postfixは人気のあるオープンソースの*メール転送エージェント*(MTA)であり、Linuxシステムで電子メールをルーティングおよび配信するために使用できます。インターネット上のパブリックメールサーバーの約25%がPostfixを実行していると推定されます。
このガイドでは、Ubuntu 20.04サーバーにPostfixをインストールして設定する方法を学びます。次に、*メールユーザーエージェント*(MUA、別名*メールクライアント*)であるs-nailをインストールして、Postfixがメールを正しくルーティングできるかテストします。
このチュートリアルの目標は、Postfixを起動してメールの基本機能を迅速に実行できるようになることです。このガイド終了までにメールサーバーの全機能がそろうわけではありませんが、始めるのに役立つセットアップの基本コンポーネントがいくつか得られます。
前提条件
このガイドに沿って作業を進めるには、次のものが必要です。
- 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コマンドを使用して、クエリするか設定を行います。
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@<^>example.com<^> sammy
admin@<^>example.com<^> sammy
すべてのアドレスを対応するサーバーアカウントにマッピングしたら、ファイルを保存して閉じます。nanoを使用した場合は、CTRL + X、Y、ENTERキーを押します。
次のように入力してマッピングを適用します。
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は、この変数を調べて、ユーザーのメールを探す場所を見つけます。
アカウントへのアクセス方法(ssh、su、su-、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変数として設定されたディレクトリ内に保存するために、sentmboxファイルを作成します。今回はMaildirディレクトリになります。
完了したら、ファイルを保存して閉じます。これで、システムのMaildir構造を初期化する準備が整いました。
ホームディレクトリ内にMaildir構造を作成する簡単な方法は、s-nailコマンドで自分自身にメールを送信することです。sentファイルはMaildirが作成されないと利用できないため、この最初のメールでは書き込みを無効にする必要があります。-Snorecordオプションを渡すことでこれを行います。
文字列をs-nailコマンドにパイプしてメールを送信します。コマンドを調整して、Linuxユーザーを受信者としてマークするようにします。
echo 'init' | s-nail -s 'init' -Snorecord <^>sammy<^>
注:次の応答が得られる*場合があります*。
[secondary_label Output]
Can't canonicalize "/home/<^>sammy<^>/Maildir"
これは正常な動作で、メッセージの初回送信時のみ表示されるものです。
ディレクトリが作成されたかどうか確認するには、~/Maildirディレクトリを探します。
ls -R ~/Maildir
ディレクトリ構造が作成され、新しいメッセージファイルが ~/Maildir/newディレクトリにあることがわかります。
[secondary_label Output]
/home/<^>sammy<^>/Maildir/:
cur new tmp
/home/<^>sammy<^>/Maildir/cur:
/home/<^>sammy<^>/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.<^>example.com<^>
/home/<^>sammy<^>/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
>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: <20160513220749.A278F228D9@mail.example.com>
From: sammy@example.com
init
hを入力してENTERキーを押すとメッセージ一覧に戻ります。
h
[secondary_label Output]
>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 ~/<^>test_message<^> | s-nail -s '<^>Test email subject line<^>' -r <^>contact@example.com<^> <^>user<^>@<^>email.com<^>
次に、メッセージを送信したメールアドレスの受信トレイに移動します。瞬時にメッセージが届いているはずです。
注:メッセージが受信トレイにない場合は、スパムフォルダに届いた可能性があります。
送信したメッセージは、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のメール機能が備わったこの設定から始めるのがよいでしょう。