パート1とパート2を完了すると、PostfixSMTPサーバーとDovecotIMAPサーバーが機能するようになります。デスクトップメールクライアントを使用してメールを送受信できます。正しいMXを作成しましたが 、 A およびPTR 記録、私のメールはGmailとOutlookメールによってスパムとしてフラグが立てられました。そのため、このパートでは、CentOS / RHELサーバーでSPFとDKIMを設定することにより、受信者の受信トレイへのメール配信を改善する方法を見ていきます。
SPFおよびDKIMレコードとは何ですか?
SPFとDKIMはDNSの2種類のTXTレコードであり、電子メールのなりすましを防ぎ、正当な電子メールをスパムフォルダではなく受信者の受信トレイに配信するのに役立ちます。ドメインが電子メールのなりすましによって悪用された場合、受信者があなたをアドレスブックに追加していなければ、電子メールは受信者のスパムフォルダに届く可能性があります。
SPF (Sender Policy Framework)レコードは、ドメインに代わってメールを送信できるホストまたはIPアドレスを指定します 。自分のメールサーバーまたはISPのサーバーのみがドメインのメールを送信できるようにする必要があります。
DKIM (DomainKeys Identified Mail)は、秘密鍵を使用してドメインから送信されたメールに署名を追加します 。受信SMTPサーバーは、ドメインのDNSレコードで公開されている対応する公開鍵を使用して署名を検証します。
DNSでSPFレコードを作成する
DNS管理インターフェイスで、次のような新しいTXTレコードを作成します。
TXT @ v=spf1 mx ~all
場所:
- TXT これがTXTレコードであることを示します。
- @と入力します 名前フィールドに、apexドメイン名を表します。
- v =spf1 これがSPFレコードであり、SPFレコードのバージョンがSPF1であることを示します。
- mx MXレコードにリストされているすべてのホストがドメインにメールを送信することを許可され、他のすべてのホストは許可されないことを意味します。
- 〜すべて ドメインからのメールは、SPFレコードで指定されたホストからのみ送信される必要があることを示します。他のホストから送信された電子メールには、信頼できないものとしてフラグが付けられます。可能な代替案は
+all
です 、-すべて
、?all
、しかしそれらはめったに使用されません。
-すべて
つまり、許可されていないホストから送信された電子メールは拒否され、受信者の受信トレイやスパムフォルダに届かないようにする必要があります。 facebook.comで使用されているのを見たことがありますが、通常、このような厳格なポリシーは必要ありません。
-all
と考える人もいるかもしれませんが、 信頼できないホストからの電子メールを拒否するので、より良いでしょう。ええと、 -all
を使用します SPFポリシーで、受信者に2つのSMTPサーバーがあり、メインのSMTPサーバーがオフラインになると、自分の電子メールが拒否される可能性があります。電子メールは一時的にバックアップSMTPサーバーに保存されます。メインSMTPサーバーがオンラインに戻ると、電子メールはバックアップSMTPサーバーからメインSMTPサーバーに中継されます。 SPFポリシーに受信者のバックアップSMTPサーバーをリストしなかったため、電子メールは受信者のメインSMTPサーバーによって拒否されます。したがって、〜all
を使用する必要があります SPFポリシーで。
一部のDNSマネージャーでは、SPFレコードを以下のように二重引用符で囲む必要があることに注意してください。
TXT @ "v=spf1 mx ~all"
SPFレコードがパブリックインターネットに伝播されているかどうかを確認するには、 dig
を使用できます 以下のようなLinuxボックスのユーティリティ。 (CentOS / RHELでは、 bind-utils
をインストールする必要があります dig
を使用するためのパッケージ コマンド: sudo dnf install bind-utils
。)
dig your-domain.com txt
txt
オプションはdig
に指示します TXTレコードのみをクエリしたいということです。
オンラインのSPFバリデーターを使用することもできます spf.myisp.chなどを使用して、ドメインに電子メールを送信できるホストを確認し、エラーが発生した場合にSPFレコードをデバッグします。 dmarcian SPFサーベイヤーは、SPFレコード構文のテストに役立ちます。
SPFポリシーエージェントの構成
また、Postfix SMTPサーバーに、受信メールのSPFレコードをチェックして、偽造されたメールを検出するように指示する必要があります。必要なパッケージを最初にインストールします:
sudo dnf install epel-release sudo dnf install pypolicyd-spf
次に、policyd-spfのユーザーを追加します。
sudo adduser policyd-spf --user-group --no-create-home -s /bin/false
Postfixマスタープロセス設定ファイルを編集します。
sudo nano /etc/postfix/master.cf
ファイルの最後に次の行を追加します。これにより、PostfixはSPFポリシーデーモンが起動したときに起動するように指示されます。 Policyd-spfはpolicyd-spf
として実行されます ユーザー。
policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/libexec/postfix/policyd-spf
注 :chroot環境でpolicyd-spfを実行しないでください。
ファイルを保存して閉じます。次に、Postfixメイン設定ファイルを編集します。
sudo nano /etc/postfix/main.cf
ファイルの最後に次の行を追加します。最初の行は、Postfixポリシーエージェントのタイムアウト設定(DNSのクエリ用)を指定します。次の行は、SPFレコードをチェックすることにより、受信メールに制限を課します。
policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf
ファイルを保存して閉じます。次に、Postfixを再起動します。
sudo systemctl restart postfix
次回、SPFレコードを持つドメインからメールを受信すると、生のメールヘッダーでSPFチェックの結果を確認できます。次のヘッダーは、送信者が承認されたホストからメールを送信したことを示しています。
Received-SPF: Pass (mailfrom) identity=mailfrom;
DKIMのセットアップ
LinuxでDKIMの署名と検証を実行できる2つの一般的なソフトウェアは、OpenDKIMとAmavisです。 OpenDKIMは軽量であり、OpenDMARCはAmavisで動作しないため、ここで使用します。
CentOS 8/RHEL8にOpenDKIMをインストールして構成する
EPEL(Enterprise Linux用の追加パッケージ)リポジトリからOpenDKIMをインストールします。
sudo dnf install epel-release sudo dnf install opendkim perl-Getopt-Long
OpenDKIMのメイン構成ファイルを編集します。
sudo nano /etc/opendkim.conf
次の行を見つけます。
Mode v
デフォルトでは、OpenDKIMは検証モード(v)で実行され、受信電子メールメッセージのDKIM署名を検証します。送信メールに署名する必要があるため、この行を次のように変更して、署名モードを有効にします。
Mode sv
次に、次の行を見つけます。
## Specifies whether or not the filter should generate report mail back ## to senders when verification fails and an address for such a purpose ## is provided. See opendkim.conf(5) for details. SendReports yes ## Specifies the sending address to be used on From: headers of outgoing ## failure reports. By default, the e-mail address of the user executing ## the filter is used ([email protected]). # ReportAddress "Example.com Postmaster" <[email protected]>
署名の検証が失敗し、署名にレポート要求( "r =y")が含まれ、署名ドメインがDNSのレポートレコードでレポートアドレス(つまり、ra =user)をアドバタイズすると、OpenDKIMはそのアドレスに構造化レポートを送信します問題を再現するために必要な詳細が含まれています。特定の差出人の電子メールアドレスを使用してレポートを送信することをお勧めします。 ReportAddress
のコメントを解除します パラメータを設定し、メールアドレスを変更します。レポートのメールは送信者ドメインのDNSレコードで指定されたメールアドレスに送信されるため、これによって後方散乱の問題が発生することはありません。
ドメイン名ごとに個別のキーを使用するため、次の行を見つけてコメントアウトします。
KeyFile /etc/opendkim/keys/default.private
次に、次の4行を見つけて、コメントを外します。
# KeyTable /etc/opendkim/KeyTable # SigningTable refile:/etc/opendkim/SigningTable # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts # InternalHosts refile:/etc/opendkim/TrustedHosts
ファイルを保存して閉じます。
署名テーブル、キーテーブル、信頼できるホストファイルを作成する
署名テーブルを編集します ファイル。
sudo nano /etc/opendkim/SigningTable
このファイルの最後に次の行を追加します。これは、サーバー上の送信者が @ your-domain.com
を使用している場合にOpenDKIMに通知します。 アドレスの場合は、 20200308._domainkey.your-domain.com
で識別される秘密鍵で署名する必要があります 。
*@your-domain.com 20200308._domainkey.your-domain.com
20200308はDKIMセレクターです。ドメイン名には複数のDKIMキーが含まれる場合があります。 DKIMセレクターを使用すると、特定のDKIMキーを選択できます。 DKIMセレクターには任意の名前を使用できますが、現在の日付(2020年3月8日)をDKIMセレクターとして使用すると便利です。ファイルを保存して閉じます。次に、キーテーブルを編集します ファイル。
sudo nano /etc/opendkim/KeyTable
DKIM秘密鍵の場所を指定する次の行を追加します。
20200308._domainkey.your-domain.com your-domain.com:20200308:/etc/opendkim/keys/your-domain.com/20200308.private
ファイルを保存して閉じます。次に、trustedhostsファイルを編集します。
sudo nano /etc/opendkim/TrustedHosts
127.0.0.0.1と::1は、デフォルトでこのファイルに含まれています。次に、次の行を追加します。これにより、OpenDKIMは、電子メールが自分のドメイン名から送信されている場合、OpenDKIMはその電子メールに対してDKIM検証を実行しないように指示します。
*.your-domain.com
ファイルを保存して閉じます。
プライベート/パブリックキーペアを生成する
DKIMは送信メッセージの署名と受信メッセージの検証に使用されるため、送信電子メールに署名するための秘密鍵と、電子メールのDKIM署名を検証するためのSMTPサーバーを受信するための公開鍵を生成する必要があります。公開鍵はDNSで公開されます。
ドメイン用に別のフォルダを作成します。
sudo mkdir /etc/opendkim/keys/your-domain.com
opendkim-genkey
を使用してキーを生成します ツール。
sudo opendkim-genkey -b 2048 -d your-domain.com -D /etc/opendkim/keys/your-domain.com -s 20200308 -v
上記のコマンドは、2048ビットのキーを作成します。 -d(ドメイン)
ドメインを指定します。 -D(ディレクトリ)
キーが保存されるディレクトリを指定します。 20200308
を使用しています DKIMセレクターとして。コマンドが実行されると、秘密鍵は 20200308.private
に書き込まれます。 ファイルと公開鍵は20200308.txt
に書き込まれます ファイル。
デフォルトでは、rootのみがキーファイルの読み取りと書き込みを行うことができます。 opendkim
を作成します 秘密鍵の所有者として。
sudo chown opendkim:opendkim /etc/opendkim/keys/ -R
DNSレコードで公開鍵を公開する
公開鍵を表示する
sudo cat /etc/opendkim/keys/your-domain.com/20200308.txt
p
の後の文字列 パラメータは公開鍵です。
DNSマネージャーで、TXTレコードを作成し、 20200308._domainkey
と入力します 名前フィールドに。 (20200308を独自のDKIMセレクターに置き換える必要があります。)次に、ターミナルウィンドウに戻り、括弧内のすべてをコピーして、DNSレコードの値フィールドに貼り付けます。値フィールドのすべての二重引用符と改行を削除する必要があります。それらを削除しないと、次のステップのキーテストはおそらく失敗します。
DKIMキーのテスト
CentOS 8 / RHEL 8サーバーで次のコマンドを入力して、キーをテストします。
sudo opendkim-testkey -d your-domain.com -s 20200308 -vvv
すべて問題がなければ、 key OK
が表示されます。 メッセージ。
opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key '20200308._domainkey.linuxbabe.com' opendkim-testkey: key OK
DKIMレコードがインターネットに伝播するまでに時間がかかる場合があることに注意してください。使用するドメインレジストラによっては、DNSレコードが即座に伝播される場合と、伝播に最大24時間かかる場合があります。 https://www.dmarcanalyzer.com/dkim/dkim-check/にアクセスし、 20200308
と入力します。 セレクターとしてドメイン名を入力し、DKIMレコードの伝播を確認します。
「キーが安全ではありません」と表示されても、慌てないでください。これは、ドメイン名でDNSSECが有効になっていないためです。 DNSSECは、安全なDNSクエリのセキュリティ標準です。ほとんどのドメイン名はDNSSECを有効にしていません。引き続きこのガイドに従うことができます。
これで、opendkimサービスを開始できます。
sudo systemctl start opendkim
また、起動時に自動起動を有効にします。
sudo systemctl enable opendkim
OpenDKIMは<code>127.0.0.1:8891をリッスンします 。
PostfixをOpenDKIMに接続する
Postfixのメイン設定ファイルを編集します。
sudo nano /etc/postfix/main.cf
このファイルの最後に次の行を追加して、Postfixがmilterプロトコルを介してOpenDKIMを呼び出すことができるようにします。 127.0.0.1
を使用する必要があることに注意してください アドレスとして。 localhost
は使用しないでください 。
# Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters
ファイルを保存して閉じます。次に、 postfix
を追加します opendkim
へのユーザー グループ。
sudo gpasswd -a postfix opendkim
postfix
を再起動します サービス。
sudo systemctl restart postfix
SPFおよびDKIMチェック
これで、メールサーバーからGmailアカウントにテストメールを送信して、SPFとDKIMのチェックに合格したかどうかを確認できます。 Gmailで開いたメールメッセージの右側で、[ show original
]をクリックすると、 ドロップダウンメニューのボタンをクリックすると、認証結果を確認できます。
メッセージが署名されておらず、DKIMチェックが失敗した場合は、postfixログ( / var / log / maillog
)をチェックすることをお勧めします )構成の何が問題になっているのかを確認します。メールサーバーは、送信者のドメインでSPFとDKIMのチェックも実行します。結果はメールヘッダーで確認できます。以下は、Gmailを使用した送信者のSPFとDKIMのチェックです。
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::c2d; helo=mail-yw1-xc2d.google.com; [email protected]; receiver=<UNKNOWN> Authentication-Results: mail.linuxbabe.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com [email protected] header.b="XWMRd2co"; dkim-atps=neutral
メールのスコアと配置のテスト
これで、https://www.mail-tester.comにアクセスできます。一意のメールアドレスが表示されます。ドメインからこのアドレスにメールを送信してから、スコアを確認してください。ご覧のとおり、満点です。
Mail-tester.comは、送信者のスコアのみを表示できます。 GlockAppsと呼ばれる別のサービスがあり、メールが受信者の受信トレイまたはスパムフォルダに配置されているか、完全に拒否されているかを確認できます。 Gmail、Outlook、Hotmail、YahooMail、iCloudメールなどの多くの人気のあるメールプロバイダーをサポートしています
Microsoftメールボックス(Hotmail.com、Outlook.com)
Microsoftは、多くの正当なIPアドレスをブロックする内部ブラックリストを使用しているようです。 OutlookまたはHotmailによって電子メールが拒否された場合は、送信者情報フォームを送信する必要があります。その後、あなたの電子メールはoutlook / hotmailによって受け入れられますが、それでもスパムとしてラベル付けされる可能性があります。私のテストでは、メールはGmailの受信トレイに届きました。ただし、SPFとDKIMの両方が渡されたとしても、outlook.comの電子メールではスパムとしてラベル付けされたままです。
メールがまだスパムとしてマークされている場合はどうなりますか?
この記事には、さらに多くのヒントがあります。メールがスパムとしてマークされるのを防ぐ方法。
次のステップ
パート5では、ドメインを電子メールのなりすましから保護するためにDMARCレコードを作成する方法を説明します。いつものように、この投稿が役に立った場合は、無料のニュースレターを購読して、より役立つ記事を受け取るか、TwitterまたはFacebookページでフォローしてください。