CentOSとpostfixで送信専用のメールサーバーを構築する。(メールサーバー構築 1)

2018/10/15 CentOS, Linux, Postfix, サーバー構築

mail-postfix01-top
最近ではクラウドでのSaaSによるメールサービス(例えばGoogleのG SuiteやMicrosoftのOffice365など)が一般的になり、以前ほどメールサーバーを構築する機会も少なりましたが、この辺りでメールサーバーの構築手順をおさらいしておきたいと考えるようになりました。
以前のようにメールフローやメールシステムのことを考えないときにこそ、初心に戻ってメールサーバーの構築手順を一から確認したいと思います。
メールサーバーを再構築することで、メールフローや、メールのバックエンドの動作を理解できる、またメールに関するトラブルシューティングを行う際にも、フローのイメージが出来、短時間で収束できるようになるはず。
是非、本記事のシリーズで、メールサーバーを構築して、メールについての理解を深めて下さい。

スポンサーリンク

まずは送信専用のメールサーバーから紹介していきます。段階的に機能を実装する手順を紹介していきますので、お付き合いください。

1.メールサーバーを構築する環境

今回の記事では最初の一歩として、送信専用のメールサーバーを構築します。例えばウェブサイトのお問い合わせフォームや、自動処理の結果をメールするための設定で、他のサーバーからメールを中継せずに、自身からのみメールを配信する構成です。
意外にも、この辺りについて設定ができてない場合が多く見受けられます。
もしこのような構成を運用している場合には、再度、本記事を元に設定を確認してみるのも良いかと思います。

メールサーバーを構築する場合、環境(OS)はLinuxがお勧めです。理由としてWindowsでは、メールサーバー用のソフトウェアとして、適当なものが無く、また外部に公開するのにWindowsではやや堅牢さに欠ける部分があるからです。
またAmazon Web ServiceのEC2やGoogle Cloud PlatformのCompute engine環境ではメールの配信に必要なTCPポートがブロックされています。これは迷惑メールを配信するためのサーバー利用を拒否するためです。折角、メールサーバーの設定を行ってもメールが配信できませんので、クラウドサービスの利用には注意してください。

本記事ではLinux構築に関する別のブログ記事
「CentOS 7 インストール Linuxを始めるにはインストールからがお勧め」
「CentOS7の基本設定 Linuxのインストール後に設定する9つのポイント」
で構築したCentOS7の環境を利用してメールサーバーをセットアップしていきます。
OS以外の環境は以下のようになっています。

  • サーバーが配置されているネットワークはインターネット上として、グローバルの固定IPが割り当てられています。
  • ドメインはtestdom.comを利用します。
  • ホスト名にはsmtpを設定しています。
  • メールサーバーは配送専用として、リレーなどは出来ない構成とします。

以上の環境を元に、メールサーバーの構築を進めていきます。

2.メール配送用プログラム(MTA)の確認

メールを配送するためにはメール配送用プログラム(Mail Transfer Agent、以下MTA)が必要になります。
Linuxで利用できるMTAは現在、Postfixというプログラムが主流になっています。このPostfixですが、本記事で利用するCentOSをインフラストラクチャーサービスとしてセットアップした場合には既にインストールされていますので、特に追加で導入する必要はありません。

2-1.postfixインストールの確認

インストールされているかの確認については、以下のコマンドを実行します。

コマンドを実行して、結果とし、以下のようにpostfixの名前が表示されれば、ご利用の環境ではpostfixはインストールされています。

もし何も表示されない場合、postfixはインストールされていませんので、yumコマンドでpostfixのインストールを行います。

2-2.postfixのインストール

項目2-1.でpostfixがインストールされていない場合、本項目の手順でpostfixをインストールします。
postfixは以下のコマンドを実行してインストールします。

実行すると以下のようにインストールが始まります。

画面に”完了しました!”と表示されればpostfixはインストールされています。
再度、yumコマンドを実行して、postfixの名前が表示されることを確認します。

上記のようにpostfixのパッケージ名が表示されれば、インストールは完了です。

3.postfixの基本的な設定

続いてpostfixをインストールしたサーバーからメールを送信するための基本的な設定を行っていきます。
項目2.の手順までで、postfixパッケージの導入(または確認)までが完了しました。ここからは配送用メールサーバーを運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

  • メールの配信時に表示されるドメイン名の設定を行う。
  • メールはサーバーから配信専用に設定する。
  • スパムメール対策としてメールリレー(外部からメールを受け取って、別のサーバーへ配信する)を許可しない。
  • メールサーバー自身では外部からメールを受け取らない。

上記のの条件に合わせてpostfixの設定を行っていきます。

3-1.postfixのデフォルト設定確認

postfix導入時の初期設定については、postconfコマンドで確認ができます。postconfコマンドはpostfixの設定ファイルを要約した結果を表示するコマンドです。”-d”オプションはデフォルト値が全て取得できますが、余りに項目が多いため、デフォルトパラメーターとは異なる設定のみを明示的に表示する”-n”オプションを付与します。
以下のように実行します。

コマンドを実行すると、以下のように設定内容の要約が表示されます。

postconfで表示される設定内容は、postfixの設定ファイルであるmain.cfから取得しています。main.cfはパッケージからpostfixを導入した場合には”/etc/postfix/”ディレクトリ以下に配置されています。/etc/postfixは以下のようなディレクトリツリーとファイル構成になります。

このディレクトリに含まれるファイル、main.cfを変更していきます。

3-2.main.cfの変更

postfixの設定ファイルであるmain.cfの編集前に、編集前のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

cpコマンドでmain.cfに.orgを付けてファイルをコピーしました。これでバックアップは完了です。
バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本記事ではOSの標準的なエディタである、viエディタを利用しています。

main.cf設定ファイルが開きます。具体的は変更ポイントは以下になります。

3-2-1.myhostnameパラメータ

myhostnameパラメーターには、メールサーバーのホスト名を設定します。この設定はFQDN(ホスト名+ドメイン名)で指定します。デフォルトの設定ではhostnameコマンドで表示されるローカルホスト名(本環境ではsmtp)が設定されます。
本環境ではホスト名がメールサーバーの名前を示していますが、例えばウェブサーバー用のホスト名でwwwなどを指定していた場合は、そのままだと分かり難いため、本パラメーターにメールサーバー用のFQDNを指定します。
以下のように設定しました。(設定ファイルの該当場所を抜粋しています。)

3-2-2.mydomainパラメータ

メールのドメインを設定するパラメータが、mydomainになります。mydomainはデフォルトでは項目.のmyhostnameに設定したドメイン名が利用されます。myhostnameが適切に設定されていれば、ここでの設定は不要ですが、念のため設定を行っておきます。ドメイン名がmyhostnameに設定したドメインと異なる場合には必須の項目です。
以下のように設定しました。(設定ファイルの該当場所を抜粋しています。)

3-2-3.inet_interfacesパラメータ

inet_interfacesパラメータはメールを受け取りインターフェイスを指定します。デフォルトの設定はlocalhostとなり、この場合にはlocalhost(自分自身)からのメールのみ受け取る設定になります。
今回の記事では、配送専用のメール設定になりますので、デフォルトからの変更を行いません。通常、メールを配送するためには、このパラメータをallに設定します。

3-2-4.inet_protocolsパラメータ

inet_protocolsはpostfixが待ち受けを行うプロトコル(ipv4 or ipv6を指定します。デフォルト値はallとなり、ipv4とipv6の両方で待ち受けを行います。もしipv4のみを利用する場合は、このパラメータを

と指定します。本記事では、デフォルト値のままで変更を行いません。例えば環境によってはipv6を無効にしている場合もあると思います。その場合はipv4を明示的に指定します。

スポンサーリンク

3-2-5.masquerade_domainsパラメータ

masquerade_domainsパラメータは送信元メールアドレスのサブドメイン部分(ホスト名の部分)を削除するオプション設定です。
このパラメータを指定しない場合、送信元が以下のような形で表示されます。

通常、メールアドレスにはサブドメインは表示しないパターンが多いかと思います。本記事でもサブドメインを表示しないようにパラメータを設定します。オプションのため、設定ファイルには項目がありません。
設定ファイルの最下行に以下のように追加します。

3-3.main.cf 設定後の確認

上記の5点で配送用メールサーバーの基本的な設定は完了です。
再度、postconfコマンドで設定を確認します。本設定を行った後の出力結果は以下のようになりました。

出力結果を確認して、設定を変更した内容が正常に反映されていれば、設定の確認は完了です。

3-4.main.cf設定ファイル、変更の反映

設定ファイルの変更が完了しましたので、変更した設定を反映するためにpostfixを再起動します。systemctlコマンドを以下のように実行します。

もしpostfixが起動されていない環境の場合には、restartではなく”start”を指定します。
以下のように実行します。

どちらの場合もエラーが無ければ、正常に起動・再起動は実行されています。
再起動後にpostfixのステータスを確認します。

表示された上記のステータスから、postfixが正常に起動していることが確認できました。
ここまでで、postfixのメール配送について最低限の設定が完了しました。

3-5.postfix自動起動の設定

サーバーの再起動や停止の復旧時にpostfixが自動的に起動するように設定します。postfixはインフラストラクチャーの場合、自動起動が設定済みになっていると思います。以下のコマンドで確認を行い、自動起動が有効になっていない場合のみ、有効にして下さい。確認は以下のようにコマンドを実行します。

実行結果として“enabled”と表示されれば自動起動は有効になっています。
postfixに自動起動が設定されていない場合(disabledと表示された場合)には以下のコマンドを実行してpostfixの自動起動を有効にします。

エラーが出力されなければ、自動起動は設定が完了しています。

4.メール配送の確認

メールの設定が完了しましたので、実際にテスト用のメールを配送してみます。telnetコマンドを利用してSMTPプロトコルでメールサーバーへ接続します。以下のように実行します。
尚、telnetコマンドが無い場合は

でtelnetパッケージをインストールして下さい。

4-1.telnetでのSMTP接続

telnetコマンドを利用してのSMTP接続はいかのように実行します。具体的には telnet アドレス ポート名になります。

正常に接続できると、リターンコード220の応答があり、入力待ち状態に入ります。
heloコマンドで応答します。localhostの部分は任意です。

リターンコード250が返ってきます。続いて、送信元のメールアドレスを入力します。”mail from:”コマンドを使います。

リターンコード250で正常に受け付けられました。次に送信先メールアドレスを入力します。”rcpt to:”コマンドを使います。
メールアドレスは実際に確認ができるメールアドレスにして下さい。

メール本文を入力します。”data”コマンドを利用します。

testmailと本文を書きました。入力の終わりには.(ドット)を入力します。

メールがキューに入った旨、表示されれば、メールの送信は完了です。quitコマンドでSMTP接続を切断します。

4-2.メールログの確認

これだけだとメールが配送できたかの確認ができませんので、メールログを確認してみます。
メールログは”/var/log/maillog”に保存されています。lessコマンドなどでログを表示して、メールが配送されているかを確認してみます。
以下のように実行します。

※ログの一部を伏せています。
ログを見ると、fromとtoが正常に処理されて、リレー先のメールサーバーに渡されていることが確認できます。上記からメールが正常に配送されたことが確認できました。基本的には

  • status=sent (250..)
  • Queued mail for delivery

がSMTPログに含まれていれば、メールについては配送されていると思って間違いありません。
実際に配送先のメールボックスを確認してメールが配送されていることを確認して下さい。(配送されていない場合には迷惑メールボックスを確認して下さい。)

5.迷惑メールへの対応 SPFレコード

配送されたメールですが、少しセキュリティレベルの高いメールサーバーを経由する場合、迷惑メールとして処理されることがあります。これは配送されたメールが迷惑メールでない事を証明する設定であるSPF(Sender Policy Framework:送信元認証用の設定)やDKIM(Domainkeys Identified Mail:メール用電子署名)といった設定が行われていないためです。

DKIMについては何れ、別の記事で紹介しますが、本記事では比較的簡単に設定できる方法としてSPFの設定方法を紹介します。SPFを設定した場合でも、完全に迷惑メールとして認識されないということはありませんが、設定しておくことで、迷惑メールとして処理される率が随分と低くなります。

5-1.SPFの設定

SPFはメールサーバー側で設定する機能ではなく、DNS側に設定するものになります。ドメインのDNSレコードのうち、付帯情報を追加するためのレコードである”txt”レコードとしてSPFを登録します。本環境ではメールサーバーのIPアドレスが110.20.3.145で、ドメイン名が”testdom.com”になりますので、txtレコードは以下のようになります。

txtレコード設定追加の方法は利用しているドメインの取得業者(レジストラ)によって異なりますが、弊社で良く利用しているAmazon Web Service (AWS)のドメイン管理機能”route53”では以下のように設定します。
postfix-mail01-5-1-1
お名前.comの場合は以下のようになります。
postfix-mail01-5-1-2
各ドメインのゾーン設定完了後には、有効になるように設定を保存します。

5-2.SPFの設定確認

SPFの動作確認ですが、Linuxサーバーからdigコマンドで確認します。
dnsの動作確認に利用するhostコマンドはbind-utilsパッケージに含まれています。このパッケージはCentOSをインフラストラクチャーでインストールした場合には含まれていませんので、yumコマンドで以下のようにインストールを行います。
※既にbind-utilsパッケージがインストールされている場合、本手順は不要です。

bind-utilsパッケージをインストールすることで、digコマンドが利用できるようになります。txtレコードを確認するためにはいかのようにdigを実行します。尚、DNSの設定後、反映まで30分ほどかかる場合があります。

@で指定している8.8.8.8はGoogleのDNSキャッシュサーバーになります。
txtレコードが設定されていると、以下のように応答があります。

上記のように応答が返ってくればSPFは正常に設定されています。SPFが有効になるとメールヘッダーに以下のような出力されます。

一度、確認してみて下さい。

6.まとめ

メールサーバーの構築手順として、先ずは送信専用の設定を紹介しました。配信専用のメールサーバーはウェブサーバー上でフォームを利用する場合など、利用するシチュエーションが多いので、この機会におさらいしておくと良いかと思います。
postfixの場合、デフォルトの設定でも配信できますので、余り設定変更されていないサーバーも多いのですが、配信されたメールを見ると、「おやっ?」と思うことがあります。
きちんと設定を変更しておくことで、迷惑メールと認識されにくくなりますので、既に運用を行っている方は、是非、設定を確認してみて下さい。
次回は本環境を利用して、外部からメールを受けることが出来る設定と、受信を行うことができる設定を紹介していきます。

関連する記事


Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク