Ubuntu18.04に送信専用SMTPサーバーとしてPostfixをインストールして設定する方法
序章
Postfixはメール転送エージェント(MTA)であり、メールの送受信に使用されるアプリケーションです。 ローカルアプリケーションのみで電子メールを送信するために使用できるように構成できます。 これは、アプリから定期的にメール通知を送信する必要がある場合や、サードパーティのメールサービスプロバイダーが許可しない大量の送信トラフィックがある場合に役立ちます。 また、必要な機能を維持しながら、本格的なSMTPサーバーを実行するよりも軽量な代替手段です。
このチュートリアルでは、Postfixを送信専用のSMTPサーバーとしてインストールして設定します。 また、ドメインのLet’s Encryptに無料のTLS証明書を要求し、それらを使用して送信メールを暗号化します。
Note: As of June 22, 2022, DigitalOcean is blocking SMTP for all new accounts. As a part of this new policy, we have partnered with SendGrid so our customers can still send emails with ease. You can learn more about this partnership and get started using SendGrid by checking out our DigitalOcean’s SendGrid Marketplace App.
前提条件
- Ubuntu 18.04を使用した初期サーバーセットアップでセットアップされた1つのUbuntu18.04サーバー(sudo非rootユーザーの作成を含む)。
- 完全に登録されたドメイン名。 このチュートリアルでは、
your_domain
全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - のDNSレコード
your_domain
サーバーのパブリックIPアドレスを指します。 それらを追加する方法の詳細については、この紹介に従ってDigitalOceanDNSを参照できます。
注:サーバーのホスト名とドロップレットの名前は一致している必要があります your_domain
、DigitalOceanは、ドロップレットのIPアドレスのPTRレコードをその名前に従って自動的に設定するためです。
次のように入力して、サーバーのホスト名を確認できます hostname
コマンドプロンプトで。 出力は、ドロップレットの作成時に付けた名前と一致する必要があります。
ステップ1—Postfixをインストールする
このステップでは、Postfixをインストールします。 最速の方法は、 mailutils
パッケージ。Postfixに、電子メールの送信をテストするために使用するいくつかの補足プログラムがバンドルされています。
まず、パッケージデータベースを更新します。
- sudo apt update
次に、次のコマンドを実行してPostfixをインストールします。
- sudo apt install mailutils
インストールプロセスの終わり近くに、Postfix設定ウィンドウが表示されます:
デフォルトのオプションは Internet Site
. これがユースケースに推奨されるオプションなので、を押します TAB
、 その後 ENTER
. 説明テキストのみが表示されている場合は、を押します TAB
選ぶ OK
、 それから ENTER
.
自動的に表示されない場合は、次のコマンドを実行して起動します。
- sudo dpkg-reconfigure postfix
その後、システムメール名に関する別の設定プロンプトが表示されます。
システムメール名は、サーバーの作成時にサーバーに割り当てた名前と同じである必要があります。 終了したら、を押します TAB
、 に続く ENTER
.
これでPostfixがインストールされ、構成を開始する準備が整いました。
ステップ2—Postfixを設定する
このステップでは、Postfixが実行されているサーバーからのみメールを送受信するようにPostfixを設定します。 localhost
.
そのためには、サーバーが内部通信に使用する仮想ネットワークインターフェイスであるループバックインターフェイスでのみリッスンするようにPostfixを構成する必要があります。 変更を加えるには、と呼ばれるメインのPostfix設定ファイルを編集する必要があります main.cf
、下に保存 etc/postfix
.
お気に入りのテキストエディタを使用して編集するために開きます。
- sudo nano /etc/postfix/main.cf
次の行を見つけます。
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .
の値を設定します inet_interfaces
に設定 loopback-only
:
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .
変更する必要があるもう1つのディレクティブは mydestination
、を介して配信されるドメインのリストを指定するために使用されます local_transport
メール配信トランスポート。 デフォルトでは、値は次のようになります。
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .
次のように行を変更します。
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .
ドメインが実際にはサブドメインであり、メールメッセージをメインドメインから送信されたように見せたい場合は、次の行を末尾に追加できます。 main.cf
:
...
masquerade_domains = your_main_domain
オプション masquerade_domains
設定は、サブドメイン部分が電子メールアドレスで削除されるドメインを指定します。
完了したら、ファイルを保存して閉じます。
注: 1つのサーバーで複数のドメインをホストしている場合は、他のドメインを使用してPostfixに渡すこともできます。 mydestination
指令。
次に、次のコマンドを実行してPostfixを再起動します。
- sudo systemctl restart postfix
サーバーからのみメールを送信するようにPostfixを設定しました。 次に、サンプルメッセージを電子メールアドレスに送信してテストします。
ステップ3—SMTPサーバーをテストする
このステップでは、Postfixがを使用して外部のメールアカウントにメールを送信できるかどうかをテストします mail
コマンドの一部です mailutils
最初のステップでインストールしたパッケージ。
テストメールを送信するには、次のコマンドを実行します。
- 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
ファイルには、電子メール受信者の代替名のリストが含まれています。 編集のために開きます:
- sudo nano /etc/aliases
デフォルトの状態では、次のようになります。
# See man 5 aliases for format
postmaster: root
存在する唯一のディレクティブは、システムで生成された電子メールがに送信されることを指定します root
.
ファイルの最後に次の行を追加します。
...
root: your_email_address
この行を使用して、に送信される電子メールを指定します root
最終的にメールアドレスに転送されます。 交換することを忘れないでください your_email_address
あなたの個人的なメールアドレスで。 完了したら、ファイルを保存して閉じます。
変更を有効にするには、次のコマンドを実行します。
- sudo newaliases
ランニング newaliases
エイリアスのデータベースを構築します mail
コマンドは、編集したばかりの構成ファイルから取得したものを使用します。
にメールを送信することをテストします root
実行することで動作します:
- 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が含まれていますが、古くなっている可能性があります。 代わりに、次のコマンドを実行して公式リポジトリを追加します。
- sudo add-apt-repository ppa:certbot/certbot
プレス ENTER
受け入れるように求められたとき。 次に、サーバーのパッケージマネージャーキャッシュを更新します。
- sudo apt update
最後に、最新バージョンのCertbotをインストールします。
- sudo apt install certbot -y
前提条件の初期サーバーセットアップの一部として、 ufw
、シンプルなファイアウォール。 HTTPポートを許可するように構成する必要があります 80
、ドメインの検証を完了できるようにします。 次のコマンドを実行して有効にします。
- sudo ufw allow 80
出力は次のようになります。
OutputRule added
Rule added (v6)
ポートが開いたので、Certbotを実行して証明書を取得します。
- 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
コマンドを実行する前にドメインを使用し、プロンプトが表示されたらメールアドレスを入力します。
出力は次のようになります。
OutputSaving 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
編集用:
- sudo nano /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_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
このように変更して、置き換えます your_domain
必要に応じてドメインを使用して、PostfixのTLS設定を更新します。
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtp_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
完了したら、ファイルを保存して閉じます。
Postfixを再起動して変更を適用します。
- sudo systemctl restart postfix
ここで、もう一度メールを送信してみてください。
- echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address
次に、指定したメールアドレスを確認します。 電子メールプロバイダーは暗号化されていないメッセージをスパムとしてマークする可能性が非常に高いため、受信トレイにメッセージがすぐに表示される可能性があります。
クライアントの電子メールメッセージに関する技術情報をチェックして、メッセージが実際に暗号化されていることを確認できます。
結論
これで、Postfixを利用した送信専用の電子メールサーバーができました。 すべての送信メッセージを暗号化することは、メッセージをスパムとして完全にマークしない電子メールプロバイダーにとって良い最初のステップです。 開発シナリオでこれを行う場合は、この対策で十分です。
ただし、ユースケースが潜在的なサイトユーザーにメールを送信する場合(メッセージボードの登録の確認メールなど)は、 SPFレコードの設定を調べて、サーバーのメールが均等になるようにする必要があります。正当なものと見なされる可能性が高くなります。