Ubuntu16.04でPostfixとMailgunを使用してメールリレーを設定する方法
序章
SMTPサーバーのセットアップは、気の弱い人の仕事ではありません。 セキュリティが大きな懸念事項であるだけでなく、メールの配信可能性もさらに大きな問題です。 今日のほとんどの電子メールプロバイダーが高度なスパム保護を提供しているため、スパムとしてマークされることなく、自家製のSMTPサーバーからの電子メールの高い配信可能性を確保することはあまり実現可能ではありません。
メールリレーは、これらの問題の両方を解決します。 サーバーによって生成された電子メールを専門的に管理されたSMTPサーバーにルーティングするだけなので、本格的なSMTPサーバーよりも構成がはるかに簡単です。 その結果、ほとんどの電子メール配信の煩わしさから解放されます。
メールリレーには、openとclosedの2種類があります。 オープンメールリレーは、内部サーバーメールだけでなく外部ソースからのメールもルーティングします。 このタイプのリレーは、スパマーからの悪用に適しています。 クローズドリレーは、サーバーと内部ネットワークで内部的に生成されたメッセージのみを転送します。
任意の外部SMTPサーバーを使用して電子メールをルーティングできますが、Mailgunには他のSMTPサーバーに比べて多くの利点があります。 1か月あたり最大10,000通のメールが無料で、信じられないほど信頼性が高く、別のドメインからメールを送信できます。 通常のビジネス用メールドメインとは別のドメインを使用することで、誤ってブラックリストに登録されることを防ぐための別の保護レイヤーを追加できます。
このチュートリアルでは、無料のMailgunアカウントとサブドメインを作成して設定し、必要なDigitalOcean DNSレコードを設定し、Postfixを使用して閉じたメールリレーを設定するプロセスについて説明します。
前提条件
このガイドを開始する前に、次のものが必要です。
- Ubuntu16.04初期サーバーセットアップガイドに従ってセットアップされた1つのUbuntu16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
- DigitalOceanのネームサーバーを指す
example.com
のような登録済みドメイン名。 これは、チュートリアルDigitalOceanを使用してホスト名を設定する方法に従って設定できます。 - 送信するテストメッセージを受信できる通常のメールアカウント。
ステップ1—Mailgunアカウントを設定する
https://mailgun.com/signupで新しいアカウントを作成します。 登録が完了したら、ログインしてダッシュボードに移動し、ページ上部のメニューにあるドメインリンクをクリックします。
Mailgunが作成したサンドボックスドメインが表示されます。
サンドボックスを使用する代わりに、 [新しいドメインの追加]ボタンをクリックして、Mailgunのサブドメインを作成します。 このサブドメインには、mailgun.example.com
やbulkemail.example.com
などの任意の名前を付けることができます。 このチュートリアルでは、例でmg.example1.com
を使用します。
サブドメインを作成すると、ドメインページは次の画像のようになります。
次に、その名前のリンクをクリックして、サブドメインのページに移動します。 次の画像に示すように、3セットのDNSレコードが表示されます。
DigitalOceanダッシュボードでドメインのこれらのDNSレコードを追加する必要があります。 送信および追跡のDNSレコードは必須ですが、受信のDNSレコードは無視してかまいません。 次の手順で適切なDNSレコードを作成するためにこのページの情報を使用するので、これらのレコードの値をコピーできるように、このページを開いたままにしておきます。
ステップ2—DigitalOceanでDNSレコードを設定する
DigitalOceanアカウントにログインし、ダッシュボードのネットワークメニューをクリックします。 次に、Mailgunで作成したサブドメインを Domain フィールドに入力し、メールリレーを構成するドロップレットを選択します。 次に、レコードの作成ボタンを押します。
新しいドメインがドメインのリストに表示されます。 それをクリックすると、編集ページが表示されます。 すでに作成されているレコードに加えて、Mailgunで指定された2つのTXTレコードとCNAMEレコードを追加する必要があります。 オプションでMXレコードを追加することもできますが、メールリレーには必要ありません。 レコードを作成するときは、次のスクリーンショットの例を参照してください。
手順1で取得したMailgunから提供された情報を使用して、次のレコードを追加します。
- 新しいを作成します CNAME 記録:
名前とmailgun.orgのメールアドレスを入力します。 ホスト名。 ホスト名の最後のピリオドは必須です。 - 作成する TXT 記録:
名前に@を入力します。 [テキスト]には、Mailgunからの最初のTXTレコードのテキストを二重引用符で囲んで入力します。 この例では、「v = spf1 include:mailgun.org〜all」ですが、Mailgunによって提供される値を確認してこれを確認する必要があります。 - 別の作成 TXT 記録:
Mailgunによって提供された2番目のtxtレコードのホスト名の太字部分を名前フィールドに入力します。 この例では、mallo._domainkeyですが、Mailgunドメインによって異なる場合があります。 テキストについては、Mailgunが提供する値全体をコピーし、二重引用符で囲みます。 「k=rsa; p = MIGfMA0G…AQAB」のようになります。
Mailgunは、続行する前にドメイン設定を検証する必要があります。 DNSレコードが更新されるのを待つか、Mailgunのドメインページに戻ってセクションを見つけることができますドメイン検証とDNS 、ボタンをクリックします今すぐDNSレコードを確認する DNSレコードがチェックアウトされると、検証されたレコードの横に緑色のチェックボックスが表示されます。
DNSレコードの更新には時間がかかる場合があります。 更新時間は数分から数時間までさまざまです。
注: DNSレコードがMailgunで検証されていない場合は、入力した値を再確認して、Mailgunドメインページの値と一致していることを確認してください。 TXT レコード値を二重引用符( “)で囲むことを忘れないでください。 また、最初の(短い) TXT レコードの名前は、Mailgunによって提供されるホスト名ではなく、@
である必要があります。
DNSの更新を待っている間に、SMTPクレデンシャルを表示してMailGunドメインページからコピーします。 これらの値はまもなく必要になります。 ドメイン情報セクションで、ユーザー名はデフォルトSMTPログインの横に表示され、パスワードはデフォルトパスワードの横に表示されます。 必要に応じて、SMTPクレデンシャルの管理リンクをクリックしてこれらの値を変更することもできます。
次に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サブドメインのユーザー名とパスワードを使用して資格情報ファイルを作成する必要があります。
注:各Mailgunサブドメインには独自の資格情報があります。 詳細については、MailgunのドキュメントのAPIキーとSMTPクレデンシャルの場所を参照してください。
新しいクレデンシャルファイルを作成および編集します。
- sudo nano /etc/postfix/sasl_passwd
新しいファイルに次の行を追加します。
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
次の行をファイルの最後に追加します。
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/SMTPD_ACCESS_README.html を参照してください)。 具体的には、main.cf
のこれらの2行は、メールリレーの使用をローカルネットワークと前に定義したSASL許可ユーザーに制限します。
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列に25
、465
、または587
のポートが含まれていない
通常、Postfixを使用してSMTPサーバーをセットアップするには、サーバーのホスト名がWebサイトの完全修飾ドメイン名( FQDN )と同じである必要があります。 サーバーのホスト名がFQDNの場合は、手順5に進んでください。 それ以外の場合は、読み進めてください。
ステップ4—ドメインマッピングの設定
SMTPサーバーにはPostfixの代わりにMailgunを使用しているため、サーバーのホスト名は、電子メールに使用しているFQDNと一致する必要はありません。 これは非常に一般的です。 たとえば、サーバーがデータベースサーバーまたは監視サーバーである場合、FQDNがまったくない可能性があります。 マッピングテーブルを設定して、ある電子メールアドレスを別の電子メールアドレスに置き換えることができます。
この場合、Linuxユーザーの電子メールアカウントを、MailGunドメインで希望する任意のユーザー名にマップします。
ファイル/etc/postfix/generic
を作成して、新しいマッピングテーブルを作成および編集します。
- sudo nano /etc/postfix/generic
この行を、マシンのsammyユーザーをMailgunにマップするファイルに追加します。
sammy@your_hostname sender@your_subdomain_for_mailgun
sender
は、wordpress
やno-reply
などの任意の名前に置き換えることができます。 本当に重要なのはyour_subdomain_for_mailgun
だけです。これは、手順1で定義したMailgunサブドメインである必要があります。
このような行をさらに作成することで、複数のユーザーを指定できます。
次に、postmap
コマンドを使用して、このマッピングをPostfixルックアップテーブルに追加します。
- sudo postmap /etc/postfix/generic
次に、Postfix設定ファイルを編集してマッピングファイルを追加します。
- sudo nano /etc/postfix/main.cf
次の行をファイルの最後に追加します。
smtp_generic_maps = hash:/etc/postfix/generic
最後に、Postfixを再起動して変更を組み込みます。
- sudo systemctl restart postfix
メールリレーをテストして、すべてが正しく構成されていることを確認しましょう。
ステップ5—メールリレーのテスト
新しいメールリレーをテストするには、サーバーから個人の電子メールアドレスにメッセージを送信します。 mailutils
をインストールすると、テストメールをすばやく送信できます。
- sudo apt -y install mailutils
次に、mailutils
を使用して、サーバー上の現在のユーザーから個人の電子メールアカウントにメッセージを作成して送信します。
- mail -s "Test mail" your_email_address <<< "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: 535 5.7.0 Mailgun is not loving your login or password)
サーバーに加えて、Mailgunはトランザクションもログに記録します。 メールガンダッシュボードにアクセスし、ログメニューを選択して、メッセージの配信を妨げた可能性のあるエラーメッセージを表示します。
最後に、サーバーのホスト名がFQDNでない場合は、ユーザーがメッセージを送信できるように、ステップ4を完了してユーザーのマッピングを作成していることを確認してください。
結論
Mailgunを使用して最初の電子メールリレーを設定しました。おめでとうございます。 これで、内部通信やcron
タスクの結果から、顧客のニュースレターやWebアプリケーションからのメッセージまで、サーバーからあらゆる種類の電子メールを安全に送信できるようになりました。
メールの送信に使用するサーバーが追加されている場合は、各サーバーで手順3と4を再度実行するだけで済みます。 同じMailGunドメインを、必要な数のサーバーで再利用できます。 用途に応じてメールを区別するために、複数のドメインを設定することもできます。
一般的なシナリオは、2つのドメインを使用することです。 1つは内部サーバーメール用で、もう1つはバルクメール用です。 内部サーバーメールは、cron
タスクやWordpressなどのサーバーのプログラムの1つから送信される可能性のあるものです。 バルクメールとは、メッセージをメーリングリスト全体に送信することです。 このタイプの電子メールは、スパムのためにブラックリストに登録される可能性が特に高いため、他のドメインを保持したまま、ブロックされた場合に破棄できるドメインを使用することをお勧めします。 いずれにせよ、大量のメールを送信するときは、必ず適切な電子メールの方法を使用してください。 詳細については、 The Art ofInboxingを参照してください。
メールドメインを追加するには、新しいドメインごとに手順1と2を再度実行し、必要に応じて/etc/postfix/sasl_passwd
と/etc/postfix/generic
を編集します。 基本的なPostfix設定は同じままです。
ハッピーメール!