こんにちは、インフラエンジニアのryuです。
今回の記事では、LinuxにPostfixをインストールし、メールを送受信するための基本設定を行う方法について解説します。
Postfixを調べると、送信メールサーバーと説明されることがあります。しかし、Postfixはメールを送るだけのソフトウェアではありません。SMTPを使ってメールを受け取り、宛先に応じて別のメールサーバーへ転送したり、ローカルユーザーのメールボックスへ配送したりするMTAです。
「PostfixとDovecotは何が違うの?」 「Internet Siteでは何を入力すればいいの?」 「設定後は、どうやって動作確認するの?」
このような疑問を、実際のコマンドとあわせて順番に解説します。
Postfixの構築方法を解説¶
Postfixは、SMTPを使ってメールを転送するためのメール転送エージェントです。英語ではMail Transfer Agentの頭文字を取り、MTAと呼ばれます。
Ubuntuでは、次の流れで構築します。
- ホスト名と利用するドメインを決める
- Postfixをインストールする
/etc/postfix/main.cfを確認する- サービスを再起動する
- ローカル環境でメールを送信する
- ログやメールキューを確認する
最初は、外部へ公開していない検証環境で試しましょう。インターネット上で実際にメールを送受信するには、DNS、TLS、SMTP認証、迷惑メール対策など、追加の設定が必要です。
Postfixとは?¶
Postfixは、メールをSMTPで受け取り、適切な宛先へ配送するソフトウェアです。

メールが相手へ届くまでには、複数のソフトウェアが役割を分担します。
- MUA:利用者がメールを作成・閲覧するソフトウェア
- MTA:メールサーバー間でメールを転送するソフトウェア
- MDA:受信したメールを利用者のメールボックスへ配送するソフトウェア
- IMAP・POP3サーバー:利用者がメールボックスを閲覧するためのサーバー
Postfixは主にMTAとして動作します。メールソフトから受け取ったメールを別のMTAへ転送したり、受信したメールをローカルユーザーへ配送したりします。
Dovecotは、主にIMAP・POP3によるメールボックスへのアクセスや、認証、メール配送を担当します。そのため、「Postfixは送信、Dovecotは受信」と単純に分けるのではなく、PostfixはSMTPによる転送、Dovecotは利用者がメールボックスへアクセスする仕組みと考えると分かりやすいでしょう。
構築前に決める項目¶
今回は、次の設定例を使用します。
| 項目 | 設定例 |
|---|---|
| サーバーのホスト名 | mail.example.com |
| メールドメイン | example.com |
| ローカルユーザー | ryu |
| SMTPポート | TCP 25番 |
| OS | Ubuntu Server |
example.comは説明用です。実際に外部へ公開する場合は、自分で管理しているドメインへ置き換えてください。
現在のホスト名は、次のコマンドで確認できます。
hostnamectl
ホスト名を変更する場合は、次のように実行します。
sudo hostnamectl set-hostname mail.example.com
名前解決できるように、必要に応じて/etc/hostsやDNSも設定します。
Postfixをインストールする¶
最初にパッケージ一覧を更新します。
sudo apt update
続いて、Postfixをインストールします。
sudo apt install postfix
インストールを開始すると、設定画面が表示されます。

一般的なメールサーバーとして構築する場合は、Internet Siteを選択します。
Internet Siteは、SMTPを使ってほかのメールサーバーと直接メールを送受信する構成です。ただし、これを選択するだけで安全な公開メールサーバーが完成するわけではありません。
次に、System mail nameを入力します。

ここには、メールアドレスの@より後ろに使用する、自分が管理するドメインを入力します。
example.com
Gmailへメールを送りたいからといって、gmail.comを入力するわけではありません。gmail.comはGoogleが管理するドメインです。自分のサーバーが扱うドメインを指定してください。
初期設定をやり直す場合は、次のコマンドを実行します。
sudo dpkg-reconfigure postfix
Postfixの設定ファイルを確認する¶
Postfixの主な設定ファイルは、次の場所にあります。
/etc/postfix/main.cf
旧記事などでmail.cfと書かれていることがありますが、正しいファイル名はmain.cfです。
現在変更されている設定を確認する場合は、次のコマンドを使います。
postconf -n
初心者が確認しておきたい主な項目は次のとおりです。
myhostname = mail.example.com
mydomain = example.com
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
inet_interfaces = all
myhostname¶
Postfixサーバー自身の完全修飾ドメイン名を指定します。
myhostname = mail.example.com
mydestination¶
このサーバーが最終的な配送先として受け取るドメインを指定します。ここへ登録されたドメイン宛てのメールは、ローカル配送の対象になります。
mynetworks¶
このサーバーを使ってメールを中継できる、信頼するネットワークを指定します。
設定範囲を不用意に広げると、第三者が迷惑メールの中継に利用できるオープンリレーになる危険があります。検証段階では、必要な範囲だけを指定してください。
設定値を変更する場合は、main.cfを編集する方法に加えて、postconf -eも利用できます。
sudo postconf -e 'myhostname = mail.example.com'
Postfixを再起動する¶
設定を変更したら、構文を確認します。
sudo postfix check
問題がなければ、Postfixを再起動します。
sudo systemctl restart postfix
起動状態は次のコマンドで確認できます。
sudo systemctl status postfix
設定だけを読み直す場合は、次のコマンドです。
sudo systemctl reload postfix
SMTPの25番ポートで待ち受けているか確認します。
sudo ss -tlnp | grep ':25'
ローカル環境でメールを送信する¶
最初から外部のメールアドレスへ送るのではなく、同じサーバー内のユーザー宛てに送信して動作を確認します。
メールコマンドを利用するため、mailutilsをインストールします。
sudo apt install mailutils
次のコマンドで、ローカルユーザーryuへメールを送ります。
echo "Postfixの動作確認です" | mail -s "テストメール" ryu
メールを確認します。
mail
メールが一覧へ表示されれば、Postfixからローカルメールボックスへ配送できています。
環境によっては、次のファイルにもメールが保存されます。
sudo less /var/mail/ryu
SMTPを手動で確認する¶
SMTPサーバーへ直接接続し、応答を確認することもできます。
ncコマンドを利用する場合は、次のように実行します。
nc localhost 25
接続できたら、次のSMTPコマンドを1行ずつ入力します。
EHLO localhost
MAIL FROM:<sender@example.com>
RCPT TO:<ryu@localhost>
DATA
Subject: SMTP test
Hello Postfix
.
QUIT
本文入力を終えるときは、1行にピリオドだけを入力します。
旧記事のようにMAIL FROM:test@test.comと記述するより、メールアドレスを< >で囲むSMTPの形式を使いましょう。
なお、25番ポートへ接続できても、外部メールアドレスへ正常に配送できるとは限りません。外部配送では、DNSや相手側の受信ポリシーも関係します。
ログとメールキューを確認する¶
メールが届かない場合は、Postfixのログを確認します。
sudo journalctl -u postfix
環境によっては、次のログファイルにも記録されます。
sudo tail -f /var/log/mail.log
配送待ちのメールは、次のコマンドで確認できます。
postqueue -p
メールキューを再処理する場合は、次のコマンドです。
sudo postqueue -f
ログには、宛先不明、名前解決の失敗、接続拒否、認証失敗などの原因が表示されます。エラーメッセージを読まずに設定を変更するのではなく、どの処理で失敗しているかを確認しましょう。
インターネットへ公開する前の注意点¶
Postfixをインストールしただけでは、実運用できる安全なメールサーバーにはなりません。
外部へ公開する場合は、少なくとも次の設定を検討します。
- MXレコードとA・AAAAレコード
- 逆引きDNSのPTRレコード
- SPF、DKIM、DMARC
- TLS証明書と暗号化
- SMTP AUTH
- 不正中継を防ぐアクセス制御
- 迷惑メールやマルウェアへの対策
- ファイアウォールとログ監視
クラウドやプロバイダーによっては、迷惑メール対策としてTCP 25番の外向き通信が制限されています。
学習目的ではローカル配送まで確認し、実際のサービスではAmazon SESなどのメール配信サービスを利用する方法も検討しましょう。
Postfixを実際に構築しながら学ぶ¶
Postfixの設定では、Linuxコマンドだけでなく、SMTP、DNS、ポート番号、ファイアウォールなどの知識が必要です。
InfraAcademyのLinux入門講座では、パッケージ管理、設定ファイル、サービス、ログ、権限などを、ブラウザ上のLinux環境で実際に操作しながら学習できます。
SMTPやDNS、IPアドレス、ポート番号の仕組みから理解したい方は、ネットワーク入門講座もおすすめです。
AWS上でメール送信の仕組みやサーバーを構築したい方は、AWS講座へ進むと、Linuxとネットワークの知識をクラウド環境へつなげられます。
Postfixの構築方法まとめ¶
今回は、UbuntuへPostfixをインストールし、ローカル環境でメールを送信する方法を解説しました。
- PostfixはSMTPでメールを転送するMTA
- 主な設定ファイルは
/etc/postfix/main.cf - System mail nameには、自分のサーバーが扱うドメインを指定する
postconf -nで現在の設定を確認できるsystemctlでPostfixの再起動や状態確認を行う- 最初はローカルユーザー宛てのメールで動作確認する
- 配送できない場合はログとメールキューを確認する
- 外部公開にはDNS、TLS、認証、迷惑メール対策などが必要
Postfixは、コマンドを数個実行するだけなら難しくありません。しかし、安全なメールサーバーとして運用するには、多くの知識が必要です。
まずは検証環境でローカル配送を確認し、Postfixがメールを受け取って配送する流れを理解しましょう。



