このチュートリアルの以前のバージョンは、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。DigitalOceanでドメイン名のセットアップする方法については、ドメインとDNSネットワーキングドキュメントを参照してください。メールに外部からアクセスするつもりなら、メールサーバーを指すMXレコードの存在も確認する必要があります。
このチュートリアルでは、FQDNがmail.example.com
のホストを設定していると仮定します。必要に応じて、 example.com
またはmail.example.com
を変更して、独自のFQDNを反映します。
ステップ1— Postfixのインストール
PostfixはUbuntuのデフォルトリポジトリに含まれているため、APTを使用してインストールできます。
まず、ローカルのapt
パッケージキャッシュを更新します。
次に、次のコマンドで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 に配信したい場合は、次のようなファイルを設定します。
/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の例外を許可するファイアウォールルールを追加する必要があります。
次のように入力して、サービスへの接続を許可します。
これで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
メールクライアントをインストールします。
クライアントを実行する前に、設定をいくつか調整する必要があります。エディタで/etc/s-nail.rc
ファイルを開きます。
ファイルの最後に次のオプションを追加します。
/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 sammy
注:次の応答が得られる場合があります。
Output
Can't canonicalize "/home/sammy/Maildir"
これは正常な動作で、メッセージの初回送信時のみ表示されるものです。
ディレクトリが作成されたかどうか確認するには、~/Maildir
ディレクトリを探します。
ディレクトリ構造が作成され、新しいメッセージファイルが ~/Maildir/new
ディレクトリにあることがわかります。
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
コマンドを実行します。
コンソールでは、簡易な受信トレイに届いたinit
メッセージが表示されるはずです。
Output
s-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 [email protected] 2020-05-19 15:40 14/392 init
ENTER
キーを押すとメッセージが表示されます。
Output
[-- Message 1 -- 14 lines, 369 bytes --]:
From [email protected] Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: [email protected]
Subject: init
Message-Id: <2016051322074[email protected]>
From: [email protected]
init
h
を入力してENTER
キーを押すとメッセージ一覧に戻ります。
Output
>R 1 [email protected] 2020-05-19 15:40 14/392 init
メッセージのステータスが今R
、つまり既読になったことが分かります。
このメッセージはあまり有用ではないので、d
を入力してからENTER
キーを押して削除します。
ターミナルに戻るには、q
を入力してからENTER
キーを入力します。
最終テストとして、s-nail
がメッセージを正しくメール送信できるか確認します。これを行うには、前のステップで送信したinit
メッセージで行ったように、テキストファイルの内容をs-nail
プロセスにパイプします。
まず、テキストエディターでテストメッセージを作成します。
エディター内で送信するテキストを入力します。
~/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 [email protected] user@email.com
次に、メッセージを送信したメールアドレスの受信トレイに移動します。瞬時にメッセージが届いているはずです。
注:メッセージが受信トレイにない場合は、スパムフォルダに届いた可能性があります。
送信したメッセージは、s-nail
クライアント内で表示できます。次のように入力して、対話型クライアントを再起動します。
メールクライアントから、次のように入力して送信メッセージを表示します。
出力は次のようになります。
Output
+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 [email protected] 2020-05-19 15:47 12/297 Test email subject line
受信メールに使用するのと同じコマンドを使用して、送信メールを管理できます。
まとめ
これで、Ubuntu 20.04サーバー上でPostfix設定が完了しました。メールサーバーの管理は、初心者の管理者にとっては難しい作業ですが、必要なMTAのメール機能が備わったこの設定から始めるのがよいでしょう。