メールの仕組みや基礎を再確認しながら、確実にメールを届けるために必要な設定や運用のポイントを解説する連載。今回は、オープンソースのPostfixを例に、最低限押さえておきたいSMTPサーバ設定の基本について解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
メールは「届いて当たり前」と思いがちですが、いざ自分で送信環境を用意しようとすると意外と手間がかかります。社内システムからの通知メールや外部サービスへのリレーなど、自前でSMTP(Simple Mail Transfer Protocol)サーバを構築しなければいけない場面は今でも見られることではないでしょうか。近年、受信側のスパム対策がますます厳しくなる中で、SMTPサーバの設定に不備があると、正当なメールでも迷惑メールとしてブロックされる恐れがあります。そのため、SMTPサーバの設定を正しく理解することの重要性はこれまで以上に高まっています。
メールの仕組みや基礎を再確認しながら、確実にメールを届けるために必要な設定や運用のポイントを解説する本連載「意外と知らないメールサーバ構築・運用の基本」。今回はオープンソースの「Postfix」を例に、最低限押さえておきたいSMTPサーバ設定の基本について解説します。
本記事では、SMTPサーバとして使われるMTA(Mail Transfer Agent)の中でも、広く普及しているPostfixを例に解説します。Postfixに必要な設定は、どのようなシステム構成の中で使われるかによって大きく異なります。まずはシステムとPostfixの関係性に着目し、代表的な利用形態を3つのパターンに分けて整理します。
システムと同じサーバ内にPostfixをセットアップし、ローカルで呼び出してメールを送信する構成です。
[各種システム]─(ローカル接続)→[Postfix]→宛先メールサーバ
1つのPostfixに対し、複数のシステムやクライアントが外部から接続してSMTPサーバとして共用する構成です。
[システムA] \
[システムB] →[Postfix]→宛先メールサーバ
[ユーザーPC]/
社内のユーザーがメールクライアントを使用して業務メールを送信するのもこのパターンといえますが、現在は徐々に「Microsoft 365」「Google Workspace」といったクラウド型メールサービスに移行が進んでいます。
大量配信や到達率改善のために外部のメールリレーサービスを利用する場合に、Postfixはシステムから外部リレーサービスへの中継のみを行う構成です。
[各種システム]→[Postfix(リレー用)]→[メール送信サービス]
選択は、以下のような観点で判断できます。
判断軸 | 適した構成 |
---|---|
単独のシステムからシンプルに送信 | パターン【1】 |
複数システムからの送信を一元管理したい | パターン【2】 |
到達率やレピュテーションを重視し、アウトソースしたい | パターン【3】 |
パターン【1】が最も手軽ですが、SPF(Sender Policy Framework)やDKIM(DomainKeys Identified Mail)、DMARC(Domain-based Message Authentication, Reporting, and Conformance)をはじめ送信者に求められるセキュリティ水準が高まっている現代では、個別にPostfixをセットアップ、運用していく負荷も高まっています。今後はメール送信基盤の一元管理や、アウトソースがより一層求められるようになるかもしれません。
「Postfixの利用パターン3つ」で紹介したパターンを念頭に置いて、具体的な設定を解説していきます。
ここでは、Postfixの設定ファイル「main.cf」に記述される基本的な項目について、それぞれの意味と役割を確認していきましょう。
myhostname = mail.example.jp
HELO/EHLOで名乗るホスト名をFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)で指定します。デフォルトではlocalhostとなっているので、必ずSMTPサーバのホスト名を定義しましょう。
設定したホスト名は、メールのヘッダやログに記録される際の識別名になります。また、スパム判定を回避するために重要なDNS(Domain Name System)設定とも関わります。
mydomain = example.jp
メールサーバが管理するドメインを指定します。デフォルトではmyhostnameで指定したFQDNのドメイン名が自動補完されます。しかし、不適切なドメインが補完されるリスクを避けるためにも、明示的に書いておくことをお勧めします。
メールを受け取るネットワークインタフェースを指定します。この設定は、前章で解説したように、Postfixがどこからメールを受け取る構成になっているかによって異なります。
inet_interfaces = localhost
同じサーバ内(ローカル)のシステムから受け取ったメールを送信するだけならば、外部から接続できないようにしておくとセキュリティ的にも安心でしょう。
inet_interfaces = all または inet_interfaces = 192.168.10.1 #そのPostfixがメールを受け付けるIPアドレスを指定
複数のメールクライアントやシステムから接続してPostfixで送信する場合は、外部から受け取れるようにallやIPアドレスを指定する必要があります。
メールを受け取って、送信を許可するネットワークを指定します。net_interfacesと同様に、システム構成によって適切な設定も変わります。
mynetworks_style = host
同じサーバ内(ローカル)のシステムから受け取ったメールを送信するだけならば、外部からのメールを中継して送信しないようにしておきます。
mynetworks = 192.168.10.0/24 #IPアドレスかネットワークをCIDR記法で指定
複数のメールクライアントやシステムから接続してPostfixで送信する場合は、メールを送信できるようにネットワークを許可しておく必要があります。
「Postfixの利用パターン3つ」で解説したパターン【3】で、外部のメールリレーサービスなどを利用する場合に設定が必要です。それ以外のケースは設定不要です。
relayhost = [relay.example.com]:587 #ポート番号を指定
ホスト名を[]で囲むことで、MXルックアップを行わずにA/AAAAレコードで接続先を解決します。MX(Mail Exchanger)ルックアップを行うと、そのホストにMXレコードが設定されていた場合、意図しない経路を通ったり、接続に失敗したりする可能性があります。そのため、Postfix公式もrelayhostを指定する場合は[]で囲むことを推奨しています。
この章では、Postfixのセキュリティを高めるために必要な、2つの基本的な設定を紹介します。
「Postfixの利用パターン3つ」で解説したパターン【2】で、外部システムやユーザーがPostfixに接続してメールを送る場合、SMTP認証(SMTP-AUTH)を有効にすることで、正規の利用者だけに中継を許可できます。
Postfix自体には認証機能がないので、認証のSASL(Simple Authentication and Security Layer)をインストールしてセットアップする必要があります。Dovecot SASLやCyrus SASLなどを使用するのが一般的ですが、詳しいセットアップの手順については環境に依存するので、ここでは割愛します。
main.cfには以下の内容を追記します。
# 外部から接続するクライアントのSMTP認証を有効にする smtpd_sasl_auth_enable = yes # 匿名での認証を禁止 smtpd_sasl_security_options = noanonymous # 認証に使用するドメイン情報をホスト名に設定 smtpd_sasl_local_domain = $myhostname # SMTP認証済みのユーザーだけに送信を許可(不正中継の防止) smtpd_relay_restrictions = permit_sasl_authenticated, reject_unauth_destination
master.cf には以下の内容を追記します。
# サブミッションポート(587番)の有効化 submission inet n - y - - smtpd # mail logへの表示設定 -o syslog_name=postfix/submission # SASL認証を有効化 -o smtpd_sasl_auth_enable=yes # 認証済みユーザー以外は拒否 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # 認証済みユーザーのみメールリレーを許可 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
上記はPostfixが外部から受け取る際のSMTP-AUTHの設定ですが、パターン【3】で外部のメールリレーサービスにSMTP-AUTHで接続する際には、リレー時のSMTP認証設定が必要になります。前章で解説したrelayhostの設定に加えて、以下の設定を行います。
main.cfには以下の内容を追記します。
# SMTP認証の有効化 smtp_sasl_auth_enable = yes # ユーザー認証ファイルを指定 smtp_sasl_password_maps = hash:/etc/postfix/smtp_pass # 匿名での認証を禁止 smtp_sasl_tls_security_options = noanonymous # 認証方式の指定 smtp_sasl_mechanism_filter = plain,login
smtp_sasl_password_mapsで指定した認証情報ファイルも作成します(※今回の例では「/etc/postfix/smtp_pass」というファイル名で作成しています)。
# vi/etc/postfix/smtp_pass # SMTP認証に必要な情報(宛先ホスト、ポート番号、ユーザーID、パスワード)を指定 [relay.example.com]:587 ユーザーID:パスワード
作成したファイルは、postmapコマンドを使用してハッシュ化します。ハッシュ化させると、「ファイル名.db」というファイルが作成されるので、smtp_pass.dbファイルが作成されていることを確認してください。
SMTPは、標準では平文通信なので、STARTTLSを使って通信を暗号化します。これによって認証情報やメール本文の盗聴を防げます。また、Gmailの送信者ガイドラインの要件に送信時のTLS接続が含まれているので、今日では必須の設定といえるでしょう。
こちらもmain.cfに以下の内容を追記します。
# ルート証明書の指定 ※以下はRHEL(Red Hat Enterprise Linux)系OSの場合 smtp_tls_CAfile = /etc/pki/tls/cert.pem # 接続先が対応している場合にSTARTTLSを使用する smtp_tls_security_level = may # TLSアクティビティーのログを取得する smtp_tls_loglevel = 1
SMTPサーバの基本設定やセキュリティが整ったとしても、それだけではメールが相手にきちんと届くとは限りません。昨今のメールサービスは、送信元の信頼性や設定の整合性、通信の品質を非常に厳しくチェックしています。この章では、到達率を向上させるために追加したいPostfixの設定を紹介します。
smtpd_banner = $myhostname ESMTP
送信時に使用される設定ではありませんが、一部のスパムフィルターは送信元サーバの信頼性を評価するためにSMTPバナーをチェックすることがあります。送信元IPアドレスから逆引きしたホスト名と一致していないと、怪しいサーバと見なされる可能性があります。
# 配送できなかったメールの再送を試みる期間 maximal_queue_lifetime = 1d # バウンスメールが送れなかった場合に再送を試みる期間 bounce_queue_lifetime = 1d
Postfixは配信できなかったメールを一定期間キューに残して再送を試みます。ですが、デフォルトの設定は5日間になっており、「失敗に長時間気付けない」上に、特に大量配信の場合はキューにメールがたまることでメールサーバの負荷にもつながります。送信するメールの用途やサーバ負荷なども考慮して、1時間(1h)や30分(30m)など適切な時間に設定することをお勧めします。
ただし大量送信環境では、ライフタイム以外に「queue_run_delay」「minimal_backoff_time」といった、リトライ頻度に関する調整も必要になる上、送信先のポリシーや運用体制に応じて最適化する必要があります。安定した運用には経験に基づくチューニングが求められるため、大量配信を行う場合は構成パターン【3】の外部メールリレーサービスの利用を検討してもよいでしょう。
message_size_limit = 20480000 # 約20MB
Postfixのデフォルトでは約10MBまでのメールサイズが許可されています。ここでのメールサイズは添付ファイルだけではなく、ヘッダ+本文+添付ファイルのメール全体のサイズを指します。また、送信時のエンコーディングの影響によるサイズ増があり、特に添付ファイルは30%ほど増加します。業務で大きな添付ファイルを扱う場合は、余裕を持った上限値を設定する必要があるでしょう。
Postfixは、インストール直後の最小限の設定でもそれなりに動作します。これは内部で多数のパラメーターが自動補完されており、初心者にも扱いやすい設計になっているからです。まずはシステム構成とPostfixに求められる役割を整理することで、Postfixに必要となる設定も理解しやすくなり、より適切な運用につながります。
現在はGmailのガイドラインをはじめ、受信側のセキュリティ要件が高まっており、信頼性のある送信元として認識されるための設定が不可欠です。特にホスト名(myhostname)の定義とDNSとの整合性は、迷惑メールと判断されないための基本的かつ重要なポイントです。
次回は、送信メールの信頼性を高めるために必要なDNS設定について詳しく解説します。
株式会社リンク クラウド・ホスティング事業部 サービス企画部 部長
2011年からインフラエンジニアとして活動。数万人が利用する大手グループ企業のメールシステム基盤など、複数システムの設計、構築、運用を支援。その後、複数クラウドサービスの企画から運営までを手掛け、2017年にメール到達率を支援するサービス「ベアメール」の提供を開始
Copyright © ITmedia, Inc. All Rights Reserved.