著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。

序章

Postfix は、メール転送エージェント(MTA)であり、メールの送受信に使用されるアプリケーションです。 ローカルアプリケーションのみで電子メールを送信するために使用できるように構成できます。 これは、アプリから定期的にメール通知を送信する必要がある場合や、サードパーティのメールサービスプロバイダーが許可しない大量の送信トラフィックがある場合に役立ちます。 また、必要な機能を維持しながら、本格的なSMTPサーバーを実行するよりも軽量な代替手段です。

このチュートリアルでは、Postfixを送信専用のSMTPサーバーとしてインストールして設定します。 また、ドメインの Let’s Encrypt に無料のTLS証明書をリクエストし、それらを使用して送信メールを暗号化します。

前提条件

独自のメールサーバーの設定と保守は複雑で時間がかかります。 ほとんどのユーザーにとって、代わりに有料のメールサービスに依存する方が現実的です。 独自のメールサーバーの実行を検討している場合は、この記事を確認して、実行したくない理由を確認することをお勧めします。

このガイドに従ってPostfixをインストールして設定することが確実な場合は、最初に次のものが必要です。

  • Ubuntu 20.04を使用した初期サーバーセットアップでセットアップされた1つのUbuntu20.04サーバー(sudo非rootユーザーの作成を含む)。
  • 完全に登録されたドメイン名。 このチュートリアルでは、 your_domain 全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • ADNSレコードと your_domain サーバーのパブリックIPアドレスを指します。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。

注:サーバーのホスト名とドロップレットの名前は一致している必要があります your_domain、DigitalOceanは、ドロップレットのIPアドレスのPTRレコードをその名前に従って自動的に設定するためです。

次のように入力して、サーバーのホスト名を確認できます hostname コマンドプロンプトで。 出力は、ドロップレットの作成時に付けた名前と一致する必要があります。

ステップ1—Postfixをインストールする

このステップでは、Postfixをインストールします。 最速の方法は、 mailutils パッケージ。Postfixに、電子メールの送信をテストするために使用するいくつかの補足プログラムがバンドルされています。

まず、パッケージデータベースを更新します。

  1. sudo apt update

次に、次のコマンドを実行してPostfixをインストールします。

  1. sudo apt install mailutils

インストールプロセスの終わり近くに、Postfix設定ウィンドウが表示されます:

デフォルトのオプションは Internet Site. これがユースケースに推奨されるオプションなので、を押します TAB、 その後 ENTER. 説明テキストのみが表示されている場合は、を押します TAB 選ぶ OK、 それから ENTER.

自動的に表示されない場合は、次のコマンドを実行して起動します。

  1. sudo dpkg-reconfigure postfix

その後、システムメール名に関する別の設定プロンプトが表示されます。

システムメール名は、サーバーの作成時にサーバーに割り当てた名前と同じである必要があります。 終了したら、を押します TAB、 に続く ENTER.

これでPostfixがインストールされ、構成を開始する準備が整いました。

ステップ2—Postfixを設定する

このステップでは、Postfixが実行されているサーバーからのみメールを送受信するようにPostfixを設定します。 localhost.

そのためには、サーバーが内部通信に使用する仮想ネットワークインターフェイスであるループバックインターフェイスでのみリッスンするようにPostfixを設定する必要があります。 変更を加えるには、と呼ばれるメインのPostfix設定ファイルを編集する必要があります main.cf、下に保存 etc/postfix.

お気に入りのテキストエディタを使用して編集するために開きます。

  1. sudo nano /etc/postfix/main.cf

次の行を見つけます。

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

の値を設定します inet_interfaces に設定 loopback-only:

/etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

変更する必要があるもう1つのディレクティブは mydestination、を介して配信されるドメインのリストを指定します local_transport メール配信トランスポート。 デフォルトでは、値は次のようになります。

/etc/postfix/main.cf
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .

次のように行を変更します。

/etc/postfix/main.cf
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .

ドメインが実際にはサブドメインであり、メールメッセージをメインドメインから送信されたように見せたい場合は、次の行を末尾に追加できます。 main.cf:

/etc/postfix/main.cf
...
masquerade_domains = your_main_domain

オプション masquerade_domains 設定は、電子メールアドレスでサブドメインが削除されるドメインを指定します。

完了したら、ファイルを保存して閉じます。

注: 1つのサーバーで複数のドメインをホストしている場合は、他のドメインを使用してPostfixに渡すこともできます。 mydestination 指令。

次に、次のコマンドを実行してPostfixを再起動します。

  1. sudo systemctl restart postfix

サーバーからのみメールを送信するようにPostfixを設定しました。 次に、サンプルメッセージを電子メールアドレスに送信してテストします。

ステップ3—SMTPサーバーをテストする

このステップでは、Postfixがを使用して外部のメールアカウントにメールを送信できるかどうかをテストします mail コマンドの一部です mailutils 最初のステップでインストールしたパッケージ。

テストメールを送信するには、次のコマンドを実行します。

  1. echo "This is the body of the email" | mail -s "This is the subject line" your_email_address

メールの本文と件名をお好みに合わせて変更できます。 交換することを忘れないでください your_email_address アクセスできる有効なメールアドレスを使用してください。

ここで、このメッセージの送信先の電子メールアドレスを確認してください。 受信トレイにメッセージが表示されます。 そこにない場合は、スパムフォルダを確認してください。 この時点で、送信するすべての電子メールは暗号化されていないため、サービスプロバイダーはスパムの可能性が高いと考えています。 後で、手順5で暗号化を設定します。

からエラーを受け取った場合 mail コマンドを実行するか、長期間メッセージを受信しない場合は、編集したPostfix設定が有効であり、サーバーの名前とホスト名がドメインに設定されていることを確認してください。

この構成では、 From 送信するテストメールのフィールドは、次の形式になります your_user_name@your_domain、 どこ your_user_name コマンドを実行したサーバーユーザーのユーザー名です。

これで、サーバーから電子メールが送信され、正常に受信されたことを確認できました。 次のステップでは、次のメール転送を設定します root.

ステップ4—システムメールの転送

このステップでは、ユーザーのメール転送を設定します root、サーバー上で送信されたシステム生成メッセージが外部の電子メールアドレスに転送されるようにします。

The /etc/aliases ファイルには、電子メール受信者の代替名のリストが含まれています。 編集のために開きます:

  1. sudo nano /etc/aliases

デフォルトの状態では、次のようになります。

/ etc / aliases
# See man 5 aliases for format
postmaster:    root

存在する唯一のディレクティブは、システムで生成された電子メールがに送信されることを指定します root.

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

/ etc / aliases
...
root:          your_email_address

この行を使用して、に送信される電子メールを指定します root 最終的にメールアドレスに転送されます。 交換することを忘れないでください your_email_address あなたの個人的なメールアドレスで。 完了したら、ファイルを保存して閉じます。

変更を有効にするには、次のコマンドを実行します。

  1. sudo newaliases

ランニング newaliases エイリアスのデータベースを構築します mail コマンドは、編集したばかりの構成ファイルから取得したものを使用します。

にメールを送信することをテストします root 実行することで動作します:

  1. echo "This is the body of the email" | mail -s "This is the subject line" root

あなたはあなたのメールアドレスでメールを受け取るはずです。 そこにない場合は、スパムフォルダを確認してください。

このステップでは、システムで生成されたメッセージを自分の電子メールアドレスに転送するように設定します。 ここで、メッセージの暗号化を有効にして、サーバーが送信するすべての電子メールが転送中の改ざんの影響を受けず、より正当であると見なされるようにします。

ステップ5—SMTP暗号化を有効にする

次に、ドメインのLet’s Encryptから無料のTLS証明書を要求し( Certbot を使用)、メッセージの送信時にそれを使用するようにPostfixを構成することにより、SMTP暗号化を有効にします。

UbuntuのデフォルトのパッケージリポジトリにはCertbotが含まれているため、次のコマンドを実行してインストールできます。

  1. sudo apt install certbot

確認を求められたら、次のように入力します Y を押して ENTER.

前提条件の初期サーバーセットアップの一部として、 ufw、シンプルなファイアウォール。 HTTPポートを許可するように構成する必要があります 80、ドメインの検証を完了できるようにします。 次のコマンドを実行して有効にします。

  1. sudo ufw allow 80

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

Output
Rule added Rule added (v6)

ポートが開いたので、Certbotを実行して証明書を取得します。

  1. sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain

このコマンドは、Certbotに4096ビットのRSAキーサイズの証明書を発行して、一時的なスタンドアロンWebサーバーを実行するように指示します(--standalone)検証用、およびポート経由でのチェック用 80 (--preferred-challenges http). 交換することを忘れないでください your_domain コマンドを実行する前にドメインを使用し、プロンプトが表示されたらメールアドレスを入力します。

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

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Obtaining a new certificate Performing the following challenges: http-01 challenge for `your_domain` Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-07-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

メモに書かれているように、証明書と秘密鍵ファイルは /etc/letsencrypt/live/your_domain.

証明書を取得したら、開きます main.cf 編集用:

  1. sudo nano /etc/postfix/main.cf

次のセクションを見つけてください。

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

このように変更して、置き換えます your_domain 必要に応じてドメインで。 これにより、PostfixのTLS設定が更新されます。

/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

完了したら、ファイルを保存して閉じます。

Postfixを再起動して変更を適用します。

  1. sudo systemctl restart postfix

ここで、もう一度メールを送信してみてください。

  1. echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address

次に、指定したメールアドレスを確認します。 電子メールプロバイダーは暗号化されていないメッセージをスパムとしてマークする可能性が非常に高いため、受信トレイにメッセージがすぐに表示される可能性があります。

クライアントの電子メールメッセージに関する技術情報をチェックして、メッセージが実際に暗号化されていることを確認できます。

結論

これで、Postfixを利用した送信専用の電子メールサーバーができました。 すべての送信メッセージを暗号化することは、メッセージをスパムとして完全にマークしない電子メールプロバイダーにとって効果的な最初のステップです。 開発シナリオでこれを行う場合は、この対策で十分です。

ただし、ユースケースが潜在的なサイトユーザーにメールを送信する場合(メッセージボードの登録の確認メールなど)は、 SPFレコードの設定を調べて、サーバーのメールの可能性をさらに高めてください。正当なものと見なされます。