Ubuntu 16.04でPostfixとMailgunを使用してメールリレーを設定する方法

前書き

SMTPサーバーをセットアップすることは、気弱な人にとってのタスクではありません。 セキュリティが大きな懸念事項であるだけでなく、メールの配信可能性もさらに大きな問題です。 現在、ほとんどの電子メールプロバイダーが提供する高度なスパム保護のため、スパムとしてマークされることなく、自作のSMTPサーバーからの電子メールの高い配信可能性を確保することはあまり現実的ではありません。

メールリレーはこれらの問題の両方を解決します。 サーバーによって生成された電子メールをプロが管理するSMTPサーバーにルーティングするだけなので、本格的なSMTPサーバーよりも構成がはるかに簡単です。 その結果、ほとんどのメール配信の面倒から解放されます。

メールリレーには、openclosedの2種類があります。 オープンメールリレーは、内部サーバーメールだけでなく外部ソースからのメールもルーティングします。 このタイプのリレーは、スパマーによる悪用の機が熟しています。 クローズドリレーは、サーバーと内部ネットワークで内部的に生成されたメッセージのみを転送します。

外部のSMTPサーバーを使用して電子メールをルーティングできますが、Mailgunは他のSMTPサーバーよりも多くの利点を提供します。 1か月あたり最大10,000通のメールを無料で送信でき、信じられないほど信頼性が高く、別のドメインからメールを送信できます。 通常のビジネス用メールドメインとは別のドメインを使用することにより、誤ってブラックリストに登録されないように別の保護層を追加します。

このチュートリアルでは、無料のMailgunアカウントとサブドメインを作成および設定し、必要なDigitalOcean DNSレコードを設定し、Postfixを使用して閉じたメールリレーを設定するプロセスを説明します。

前提条件

このガイドを始める前に、次のものが必要です。

  • sudo非rootユーザーとファイアウォールを含むthe Ubuntu 16.04 initial server setup guideをフォローしてセットアップされた1つのUbuntu16.04サーバー。

  • DigitalOceanのネームサーバーを指すexample.comなどの登録済みドメイン名。 チュートリアルHow to Set Up a Host Name with DigitalOceanに従って設定できます。

  • 送信するテキストメッセージを受信できる通常のメールアカウント。

[[step-1 -—- setting-up-a-mailgun-account]] ==ステップ1—Mailgunアカウントを設定する

https://mailgun.com/signupに新しいアカウントを作成します。 登録が完了したら、ログインしてdashboardに移動し、ページ上部のメニューにあるDomainsリンクをクリックします。

Mailgunが作成したサンドボックスドメインが表示されます。

Initial Sandbox Domain

サンドボックスを使用する代わりに、Add New DomainボタンをクリックしてMailgunのサブドメインを作成します。 このサブドメインには、mailgun.example.combulkemail.example.comなどの任意の名前を付けることができます。 このチュートリアルでは、例でmg.example1.comを使用します。

サブドメインを作成すると、Domainsページは次の画像のようになります。

After Adding SubDomain

次に、名前のリンクをクリックして、サブドメインページに移動します。 次の図に示すように、3セットのDNSレコードが表示されます。

SubDomain’s DNS records

DigitalOceanダッシュボードでドメインのこれらのDNSレコードを追加する必要があります。 SendingTrackingのDNSレコードは必須ですが、ReceivingのDNSレコードは無視してかまいません。 次の手順で適切なDNSレコードを作成するには、このページの情報を使用します。したがって、これらのレコードの値をコピーできるように、このページを開いたままにしてください。

[[step-2 -—- setting-up-dns-records-on-digitalocean]] ==ステップ2—DigitalOceanでのDNSレコードの設定

DigitalOceanアカウントにログインし、ダッシュボードのNetworkingメニューをクリックします。 次に、Mailgunで作成したサブドメインをDomainフィールドに入力し、メールリレーを構成するドロップレットを選択します。 次に、Create Recordボタンを押します。

Adding SubDomain to DigitalOcean

ドメインのリストに新しいドメインが表示されます。 クリックして編集ページを表示します。 すでに作成されているレコードに加えて、2つのTXTレコードとMailgunによって指定されたCNAMEレコードを追加する必要があります。 オプションでMXレコードを追加することもできますが、メールリレーには必要ありません。 レコードを作成するときに、このスクリーンショットの例を参照してください。

DNS Records that need to be added

手順1で取得したMailgunから提供された情報を使用して、次のレコードを追加します。

  • 新しいCNAMEレコードを作成します。

    • nameにはemailを入力し、hostnameにはmailgun.org.を入力します。 hostnameの終わりのピリオドが必要です。

  • TXTレコードを作成します。

    • name@を入力します。

    • Textには、Mailgunからの最初のTXTレコードのテキストを二重引用符で囲んで入力します。 この例では、"v=spf1 include:mailgun.org ~all"ですが、Mailgunによって提供される値を調べてこれを確認する必要があります。

  • 別のTXTレコードを作成します。

    • Mailgunによって提供された2番目のtxtレコードのHostnameの太字部分をnameフィールドに入力します。 この例では、mallo._domainkeyですが、Mailgunドメインによって異なる場合があります。

    • textの場合は、Mailgunから提供された値全体をコピーし、二重引用符で囲みます。 "k=rsa; p=MIGfMA0G...AQAB"のようになります。

Mailgunは、続行する前にドメイン設定を検証する必要があります。 DNSレコードが更新されるのを待つか、Mailgunのドメインページに戻ってセクションDomain Verification & DNSを見つけ、ボタンCheck DNS Records Nowをクリックします。DNSレコードがチェックアウトされると、緑色で表示されます。検証されたレコードによるチェックボックス。

DNSレコードの更新には時間がかかる場合があります。 更新時間は数分から数時間までさまざまです。

[.note]#Note: DNSレコードがMailgunで検証されていない場合は、入力した値を再確認して、Mailgunドメインページの値と一致していることを確認してください。 TXTのレコード値を二重引用符(“)で囲むことを忘れないでください。 また、最初の(短い)TXTレコードの名前は、Mailgunによって提供されるhostnameではなく、@である必要があります。

DNSの更新を待っている間に、MailGunドメインページからSMTP資格情報を表示してコピーします。 これらの値はすぐに必要になります。 Domain Informationセクションの下で、ユーザー名はDefault SMTP Loginの横に表示され、パスワードはDefault Passwordの横に表示されます。 必要に応じて、リンクManage SMTP credentialsをクリックしてこれらの値を変更することもできます。

次に、Postfixを設定しましょう。

[[step-3 -—- installing-and-configuring-postfix]] ==ステップ3—Postfixのインストールと設定

組み込みのpacakgeマネージャーを使用して、Postfixをインストールします。

非rootユーザーとしてサーバーに接続します。

ssh sammy@your_server_ip

通常、Postfixのインストールプロセスでは、いくつかの対話型画面を使用して、情報の入力を求めます。 このセットアップ中に発生する可能性のあるエラーを防ぐため、インストールプロセスを開始する前にこの情報を事前に設定してみましょう。

まず、Postfixをメールリレーとして機能するように設定します。

sudo debconf-set-selections <<< "postfix postfix/main_mailer_type select Satellite system"

次に、Postfixにメールサーバーのホスト名にサーバーのホスト名を使用するように指示します。

sudo debconf-set-selections <<< "postfix postfix/mailname string $HOSTNAME"

次に、中継メールにMailgunのSMTPサーバーを使用するようにPostfixを構成します。

sudo debconf-set-selections <<< "postfix postfix/relayhost string smtp.mailgun.org"

これらの構成を設定したら、Postfixをインストールします。

sudo apt -y install postfix

PostfixがMailgunに接続するには、ステップ2で取得したMailgunサブドメインのユーザー名とパスワードを使用して資格情報ファイルを作成する必要があります。

[.note] #Note:各Mailgunサブドメインには独自の認証情報があります。 詳細については、MailgunドキュメントのWhere Can I Find My API key and SMTP Credentialsを参照してください。

新しい資格情報ファイルを作成および編集します。

sudo nano /etc/postfix/sasl_passwd

新しいファイルに次の行を追加します。

/etc/postfix/sasl_password

smtp.mailgun.org your_mailgun_smtp_user@your_subdomain_for_mailgun:your_mailgun_smtp_password

次に、読み取りと書き込みのアクセス許可をrootに制限してファイルを保護し、postmapコマンドを使用してPostfixのルックアップテーブルを更新して、この新しいファイルを使用します。

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

次に、匿名ログインを防止し、クレデンシャルファイルを指定してMailgunに安全なログインを提供することにより、メールリレーのセキュリティを強化します。 Postfix構成ファイルを編集します。

sudo nano /etc/postfix/main.cf

ファイルの最後に次の行を追加します。

/etc/postfix/main.cf

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = AUTH LOGIN

[。注意]##

注:Postfixには、スパムボットによるメールリレーの使用を防ぐためのさまざまなセキュリティ対策が講じられています(詳細については、http://www.postfix.org/SMTPDACCESSREADME.htmlを参照してください)。 具体的には、 `main.cf`のこれらの2行は、メールリレーの使用をローカルネットワークと前に定義したSASL許可ユーザーに制限します。

/etc/postfix/main.cf

smtpd_relay_restrictions = permit_mynetworks
permit_sasl_authenticated defer_unauth_destination

次に、Postfixを再起動して新しい設定をロードします。

sudo systemctl restart postfix

また、次のコマンドを実行してファイアウォールのステータスを確認し、受信SMTPポートが開いていないことを確認する必要があります。

sudo ufw status

出力は次のようになります。

OutputTo                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

出力には、To列に25465、または587のいずれかのポートが含まれている必要があります。 これらのポートはSMTPアクセスに使用され、着信トラフィックがメールリレーを使用することを許可したくありません。 これらのポートが出力に表示される場合は、this tutorialを確認して、ルールを削除する方法、またはアクセスを明示的に拒否する方法を確認してください。

通常、Postfixを使用してSMTPサーバーをセットアップするには、サーバーのホスト名がWebサイトのfully-qualified domain nameFQDN)と同じである必要があります。 サーバーのホスト名がFQDNである場合、ステップ5にスキップできます。 そうでなければ、読み進めてください。

[[step-4 -—- setting-up-domain-mapping]] ==ステップ4—ドメインマッピングの設定

SMTPサーバーにはPostfixではなくMailgunを使用しているため、サーバーのホスト名はメールに使用しているFQDNと一致する必要はありません。 これは非常に一般的です。 たとえば、サーバーがデータベースサーバーまたは監視サーバーの場合、FQDNがまったくない場合があります。 ある電子メールアドレスを別の電子メールアドレスに置き換えるmapping tableを設定できます。

この場合、Linuxユーザーのメールアカウントを、MailGunドメインで希望する任意のユーザー名にマッピングします。

ファイル/etc/postfix/genericを作成して、新しいマッピングテーブルを作成および編集します。

sudo nano /etc/postfix/generic

この行を、マシンのsammyユーザーをMailgunにマップするファイルに追加します。

/etc/postfix/generic

sammy@your_hostname sender@your_subdomain_for_mailgun

senderは、wordpressno-replyなどの任意の名前に置き換えることができます。 本当に重要なのはyour_subdomain_for_mailgunだけです。これは、手順1で定義したMailgunサブドメインである必要があります。

このような行をさらに作成することにより、複数のユーザーを指定できます。

次に、postmapコマンドを使用して、このマッピングをPostfixルックアップテーブルに追加します。

sudo postmap /etc/postfix/generic

次に、Postfix構成ファイルを編集して、マッピングファイルを追加します。

sudo nano /etc/postfix/main.cf

この行をファイルの最後に追加します。

/etc/postfix/main.cf

smtp_generic_maps = hash:/etc/postfix/generic

最後に、Postfixを再起動して変更を組み込みます。

sudo systemctl restart postfix

メールリレーをテストして、すべてが正しく構成されていることを確認します。

[[step-5 -—- testing-your-mail-relay]] ==ステップ5—メールリレーのテスト

新しいメールリレーをテストするには、サーバーから個人のメールアドレスにメッセージを送信します。 mailutilsをインストールして、テストメールをすばやく送信できるようにします。

sudo apt -y install mailutils

次に、mailutilsを使用して、サーバー上の現在のユーザーから個人の電子メールアカウントにメッセージを作成して送信します。

mail -s "Test mail" your_email_address <<< "A test message using Mailgun"

メッセージは好きなように変更できます。

メールクライアントを確認し、テストメッセージを受信したかどうかを確認してください。 行った場合は、メールリレーが正常に設定されたことをお祝いします。 そうでない場合は、読み進めてトラブルシューティングを行います。

[[step-6 -—- troubleshooting-your-mail-relay]] ==ステップ6—メールリレーのトラブルシューティング

前のステップのいずれかを間違えるなど、間違った方向に進む可能性のあるものがいくつかありますが、ここでは、発生する可能性のあるいくつかの一般的な問題を示します。

まず、MailgunがDNSレコードを検証したことを確認してください。 そのステップが成功するまで、何も起こり得ません。 Mailgunのユーザーインターフェースを再確認し、ドメインが検証済みであることを確認します。

次に、資格情報ファイル(/etc/postfix/sasl_passwd)を再確認します。 ユーザー名とパスワードがMailgunの対応するサブドメインのものと一致することを確認してください。 Mailgunの資格情報は使用できないため、使用しないでください。 Mailgunがサブドメインに提供する特定の資格情報を使用します。

役立つエラーメッセージについては、メールログを確認してください。 確認したい場所は2つあります。 まず、サーバーのログを確認します。このログは、ファイル/var/log/mail.logにあります。 で最新のエントリを表示できます

tail -f /var/log/mail.log

これにより、ログファイルの最後の数行が表示されますが、出力も「追跡」されます。つまり、新しいログエントリがログに書き込まれると表示されます。 出力を調べて、問題の診断に役立つエラーメッセージを探します。 たとえば、Mailgunのパスワードが間違っていると、次のエラーが表示されます。

Output> Nov 1 16:07:45 cart-1268 postfix/smtp[30082]: 0E8062038A: to=, relay=smtp.mailgun.org[173.203.37.114]:25, delay=2.3, delays=0.02/0/2.3/0, dsn=4.7.0, status=deferred (SASL authentication failed; server smtp.mailgun.org[173.203.37.114] said: 535 5.7.0 Mailgun is not loving your login or password)

サーバーに加えて、Mailgunはトランザクションもログに記録します。 Mailgunダッシュボードにアクセスし、Logsメニューを選択して、メッセージの配信を妨げる可能性のあるエラーメッセージを表示します。

最後に、サーバーのホスト名がFQDNでない場合は、ステップ4を完了して、ユーザーがメッセージを送信できるようにユーザーのマッピングを作成してください。

結論

Mailgunを使用して最初の電子メールリレーを設定できました。おめでとうございます。 これで、内部通信やcronのタスク結果から、顧客のニュースレターやWebアプリケーションからのメッセージまで、サーバーからあらゆる種類の電子メールを安全に送信できるようになりました。

メールの送信に使用する追加のサーバーがある場合は、各サーバーで手順3と4を再度実行するだけで済みます。 同じMailGunドメインを任意の数のサーバーで再利用できます。 複数のドメインを設定して、用途に応じてメールを区別することもできます。

一般的なシナリオは、2つのドメインを使用することです。 1つは内部サーバーメール用で、もう1つはバルクメール用です。 内部サーバーメールは、cronタスクやWordpressなど、サーバーのプログラムの1つから送信される可能性のあるものです。 バルクメールとは、メーリングリスト全体にメッセージを送信することです。 このタイプの電子メールは、特にスパムのためにブラックリストの影響を受けやすいため、他のドメインを保持したまま、ブロックされた場合に破棄できるドメインを使用することをお勧めします。 いずれにしても、バルクメールを送信するときは、必ず適切な電子メールを使用してください。 詳細については、The Art of Inboxingを参照してください。

電子メールドメインを追加するには、新しいドメインごとに手順1と2を再度実行し、必要に応じて/etc/postfix/sasl_passwd/etc/postfix/genericを編集します。 基本的なPostfix設定は同じままです。

ハッピーメール!

Related