InfraAcademy

InfraAcademy Blog

Postfixの構築方法とは?Ubuntuでメールサーバーを設定する手順を初心者向けに解説

| #Linux #Linux初心者 #Linux入門
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、インフラエンジニアのryuです。

今回の記事では、LinuxにPostfixをインストールし、メールを送受信するための基本設定を行う方法について解説します。

Postfixを調べると、送信メールサーバーと説明されることがあります。しかし、Postfixはメールを送るだけのソフトウェアではありません。SMTPを使ってメールを受け取り、宛先に応じて別のメールサーバーへ転送したり、ローカルユーザーのメールボックスへ配送したりするMTAです。

「PostfixとDovecotは何が違うの?」 「Internet Siteでは何を入力すればいいの?」 「設定後は、どうやって動作確認するの?」

このような疑問を、実際のコマンドとあわせて順番に解説します。

Postfixの構築方法を解説

Postfixは、SMTPを使ってメールを転送するためのメール転送エージェントです。英語ではMail Transfer Agentの頭文字を取り、MTAと呼ばれます。

Ubuntuでは、次の流れで構築します。

  1. ホスト名と利用するドメインを決める
  2. Postfixをインストールする
  3. /etc/postfix/main.cfを確認する
  4. サービスを再起動する
  5. ローカル環境でメールを送信する
  6. ログやメールキューを確認する

最初は、外部へ公開していない検証環境で試しましょう。インターネット上で実際にメールを送受信するには、DNS、TLS、SMTP認証、迷惑メール対策など、追加の設定が必要です。

Postfixとは?

Postfixは、メールをSMTPで受け取り、適切な宛先へ配送するソフトウェアです。

Postfixについて解説

メールが相手へ届くまでには、複数のソフトウェアが役割を分担します。

  • 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

インストールを開始すると、設定画面が表示されます。

Postfixインストール画面1

一般的なメールサーバーとして構築する場合は、Internet Siteを選択します。

Internet Siteは、SMTPを使ってほかのメールサーバーと直接メールを送受信する構成です。ただし、これを選択するだけで安全な公開メールサーバーが完成するわけではありません。

次に、System mail nameを入力します。

Postfixインストール画面2

ここには、メールアドレスの@より後ろに使用する、自分が管理するドメインを入力します。

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がメールを受け取って配送する流れを理解しましょう。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る