CentOSとpostfixで送信専用のメールサーバーを構築する。(メールサーバー構築 1)
最近ではクラウドでのSaaSによるメールサービス(例えばGoogleのG SuiteやMicrosoftのOffice365など)が一般的になり、以前ほどメールサーバーを構築する機会も少なりましたが、この辺りでメールサーバーの構築手順をおさらいしておきたいと考えるようになりました。
以前のようにメールフローやメールシステムのことを考えないときにこそ、初心に戻ってメールサーバーの構築手順を一から確認したいと思います。
メールサーバーを再構築することで、メールフローや、メールのバックエンドの動作を理解できる、またメールに関するトラブルシューティングを行う際にも、フローのイメージが出来、短時間で収束できるようになるはず。
是非、本記事のシリーズで、メールサーバーを構築して、メールについての理解を深めて下さい。最終的にはセキュアなメールサーバーの構築をゴールとしています。
スポンサーリンク
メールサーバーの構築記事は
「CentOSでメールサーバーを構築。Postfix/Dovecotでメールの送受信を行う(メールサーバー構築 その2)」
「CentOSでメールサーバーを構築。Let’s EncryptでSSL/TLSを設定して安全な通信を行う。(メールサーバー構築 その3)」
「CentOSでメールサーバーを構築。DKIMで迷惑メールと識別されないメールサーバーに。(メールサーバー構築 その4)」
の全4回の記事になっています。
今回の記事では送信専用のメールサーバーの構築手順から紹介していきます。段階的に機能を実装する手順を紹介していきますので、お付き合いください。
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を利用します。
- ホスト名にはmailを設定しています。
- メールサーバーは配送専用として、リレーなどは出来ない構成とします。
以上の環境を元に、メールサーバーの構築を進めていきます。
ご相談は無料ですのでお気軽にレムシステムまでお問い合わせください。
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コマンドで設定を確認します。本設定を行った後の出力結果は以下のようになりました。
出力結果を確認して、設定を変更した内容が正常に反映されていることを確認します。
postfixには設定ファイルの誤りをチェックするためのコマンド”postfix check”が用意されています。
このコマンドで設定ファイルのチェックも行っておきます。
エラーが表示されなければ、設定ファイルには問題がありませんので、確認は完了です。
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”では以下のように設定します。
お名前.comの場合は以下のようになります。
各ドメインのゾーン設定完了後には、有効になるように設定を保存します。
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の場合、デフォルトの設定でも配信できますので、余り設定変更されていないサーバーも多いのですが、配信されたメールを見ると、「おやっ?」と思うことがあります。
きちんと設定を変更しておくことで、迷惑メールと認識されにくくなりますので、既に運用を行っている方は、是非、設定を確認してみて下さい。
次回は本環境を利用して、外部からメールを受けることが出来る設定と、受信を行うことができる設定を紹介していきます。
当サイトの記事をお読み頂いて
などの場合には、エンジニアにご相談頂いた方が早く問題が解決できるかもしれません。 お気軽にレムシステムまでお問い合わせください。
お電話 053-525-7357