前書き

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

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

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

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

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

前提条件

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

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04初期サーバーセットアップガイド]に従って、1つのUbuntu 16.04サーバーをセットアップし、sudo non- rootユーザーとファイアウォール。

  • DigitalOceanのネームサーバーを指す「+ example.com +」などの登録済みドメイン名。 チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean[DigitalOceanでホスト名を設定する方法]に従って設定できます。 ]。

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

ステップ1-Mailgunアカウントのセットアップ

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

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

image:https://assets.digitalocean.com/articles/postfix_mailgun_mailrelay_1604/Tr905Cd.png [初期サンドボックスドメイン]

サンドボックスを使用する代わりに、[新しいドメインを追加]ボタンをクリックしてMailgunのサブドメインを作成します。 このサブドメインには、「+ mailgun.example.com 」や「 bulkemail.example.com 」など、任意の名前を付けることができます。 このチュートリアルでは、例で「 mg.example1.com +」を使用します。

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

image:https://assets.digitalocean.com/articles/postfix_mailgun_mailrelay_1604/arxrFNE.png [サブドメインを追加した後]

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

image:https://assets.digitalocean.com/articles/postfix_mailgun_mailrelay_1604/ErOxwM6.png [サブドメインのDNSレコード]

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

ステップ2-DigitalOceanでDNSレコードを設定する

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

image:https://assets.digitalocean.com/articles/postfix_mailgun_mailrelay_1604/InkTv0R.png [DigitalOceanへのサブドメインの追加]

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

image:https://assets.digitalocean.com/articles/postfix_mailgun_mailrelay_1604/WxbLBE72.png [追加する必要のあるDNSレコード]

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

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

  • * name *には `+ email `を、* hostname *には ` mailgun.org。+`を入力します。 *ホスト名*の最後のピリオドが必要です。

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

  • * name *に「+ @ +」を入力します。

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

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

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

  • * text *については、Mailgunが提供する値全体をコピーし、二重引用符で囲みます。 `” k = rsa; p = MIGfMA0G … AQAB “`のように見えるはずです。

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

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

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

次に、Postfixをセットアップしましょう。

ステップ3-Postfixのインストールと構成

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

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

ssh @

通常、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サブドメインのユーザー名とパスワードを使用して資格情報ファイルを作成する必要があります。

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

sudo nano /etc/postfix/sasl_passwd

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

/ etc / postfix / sasl_password

smtp.mailgun.org @:

次に、読み取りおよび書き込み権限を* 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を再起動して新しい設定をロードします。

sudo systemctl restart postfix

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

sudo ufw status

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

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

出力の* To *列には、「+ 25 」、「 465+」、または「587」のいずれかのポートが含まれていないはずです。 これらのポートはSMTPアクセスに使用され、着信トラフィックがメールリレーを使用することを許可したくありません。 これらのポートが出力に表示される場合は、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04 [このチュートリアルを確認してください]ルールを削除する方法または明示的にアクセスを拒否する方法を学習します。

通常、Postfixを使用してSMTPサーバーをセットアップするには、サーバーのホスト名がWebサイトの_完全修飾ドメイン名_(https://en.wikipedia.org/wiki/Fully_qualified_domain_name[FQDN])と同じである必要があります。 サーバーのホスト名がFQDNである場合、ステップ5にスキップできます。 そうでなければ、読み進めてください。

ステップ4-ドメインマッピングの設定

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

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

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

sudo nano /etc/postfix/generic

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

/ etc / postfix / generic

@ @

「+ sender 」は、「 wordpress 」や「 no-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:

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

sudo systemctl restart postfix

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

手順5-メールリレーのテスト

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

sudo apt -y install mailutils

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

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

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

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

手順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=<[email protected]>, 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: )

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

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

結論

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

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

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

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

ハッピーメール!