序章

スパマーとして誤ってフラグが立てられることへの欲求不満は、ほとんどのメールサーバー管理者にとって奇妙なことではありません。 サーバーが危険にさらされる可能性を排除することにより、通常、次のいずれかによって偽のフラグが発生します。

  • サーバーはオープンメールリレーです
  • 送信者またはサーバーのIPアドレスがブラックリストに登録されている
  • サーバーに完全修飾ドメイン名( FQDN )とPTRレコードがありません
  • Sender Policy Framework( SPF )DNSレコードが見つからないか、正しく構成されていません
  • DomainKeys Identified Mail( DKIM )の実装が欠落しているか、正しく設定されていません

これらは、プロプライエタリおよびオープンソースのスパムフィルター(SpamAssassinを含む)の大部分によってチェックされている基本的なプロパティの一部です。 これらのテストに合格することは、適切に構成されたメールサーバーにとって非常に重要です。

このチュートリアルでは、DKIM送信者認証システムのオープンソース実装であるOpenDKIM]のインストールと構成に焦点を当てます。

リーダーはSSH経由でサーバーにアクセスする方法を知っていると想定され、PostfixとDovecotはすでにインストールおよび構成されており( tutorial )、ホスト名とFQDNが設定されています( tutorial )。 、 tutorial )であり、SPFレコードが配置されています( tutorial )。

DKIMについて

DKIMは、個人または組織がドメイン名を電子メールメッセージに関連付けることを可能にするインターネット標準です。 これは、事実上、メッセージの責任を主張する方法として機能します。 基本的に、DKIMは非対称暗号化を利用しています。 送信者のメール転送エージェント(MTA)は、すべての送信メッセージに秘密鍵で署名します。 受信者は送信者のDNSレコードから公開鍵を取得し、メッセージの署名が行われてからメッセージ本文と一部のヘッダーフィールドが変更されていないかどうかを確認します。

OpenDKIMをインストールします

インストールを開始する前に、システムアップデートをお勧めします。

sudo apt-get update
sudo apt-get dist-upgrade

OpenDKIMとその依存関係をインストールします。

sudo apt-get install opendkim opendkim-tools

追加のパッケージが依存関係として一覧表示されます。yesと入力し、Enterを押して続行します。

OpenDKIMを構成する

OpenDKIMを構成するには、いくつかのファイルを作成および編集する必要があります。

Nano は、デフォルトでDigitalOceanドロップレットにインストールされ、操作が簡単なため、エディターとして使用されます。

  • 矢印キーでナビゲートする
  • 変更を保存せずに終了します。CTRL + Xを押してからNを押します。
  • 終了して変更を保存します。CTRL + XYの順に押し、最後にEnterを押します。

重要:すべてのコマンドおよび構成ファイルで、example.comのすべてのインスタンスを独自のドメインに置き換えてください。 編集後にファイルを保存することを忘れないでください。

メインの構成ファイルから始めましょう:

sudo nano /etc/opendkim.conf

confファイルの最後に次の行を追加します(各パラメーターについては以下で説明します)。 オプションで、Socketのカスタムポート番号を選択できます。 別のアプリケーションで使用されていないことを確認してください。

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:[email protected]
  • AutoRestart :失敗時にフィルターを自動再起動します

  • AutoRestartRate :フィルターの最大再起動速度を指定します。再起動がこの速度よりも速く発生し始めると、フィルターは終了します。 10/1h-1時間あたり最大10回の再起動が許可されます

  • UMask UserIDで定義されたユーザーグループにすべてのアクセス許可を与え、他のユーザーがファイルを読み取って実行できるようにします。この場合、Pidファイルの作成と変更が可能になります。

  • Syslog SyslogSuccess 、* LogWhy :これらのパラメーターにより、syslogへの呼び出しによる詳細なログ記録が可能になります

  • 正規化:メッセージ署名で使用される正規化メソッドを定義します。simpleメソッドはほとんど変更できませんが、relaxedメソッドは空白の置換などの小さな変更を許容します。 relaxed/simple-メッセージヘッダーはrelaxedアルゴリズムで処理され、本文はsimpleアルゴリズムで処理されます

  • ExternalIgnoreList :資格情報なしで署名ドメインの1つとしてサーバーを介してメールを送信できる外部ホストを指定します

  • InternalHosts :メールを検証せずに署名する必要がある内部ホストのリストを定義します

  • KeyTable :キー名を署名キーにマップします

  • SignatureTable From:ヘッダーフィールドにあるアドレスに基づいてメッセージに適用する署名を一覧表示します

  • モード:動作モードを宣言します。 この場合、ミルターは署名者(s)および検証者(v)として機能します。

  • PidFile :プロセス識別番号を含むPidファイルへのパス

  • SignatureAlgorithm :署名を作成するときに使用する署名アルゴリズムを選択します

  • UserID :opendkimプロセスはこのユーザーとグループの下で実行されます

  • Socket :milterはここで指定されたソケットをリッスンします。Posfixはこのソケットを介して署名と検証のためにopendkimにメッセージを送信します。 [email protected]は、localhost、ポート12301でリッスンするTCPソケットを定義します

この単純な構成は、1つ以上のドメインのメッセージ署名を可能にすることを目的としています。他のオプションについては、こちらにアクセスしてください。

ミルターをPostfixに接続します。

sudo nano /etc/default/opendkim

次の行を追加し、カスタムポート番号を使用する場合にのみポート番号を編集します。

SOCKET="inet:[email protected]"

このmilterを使用するようにpostfixを設定します:

sudo nano /etc/postfix/main.cf

これらの2行がPostfix設定ファイルに存在し、コメントアウトされていないことを確認してください。

milter_protocol = 2
milter_default_action = accept

フィルタ(SpamAssasin、Clamavなど)がPostfixによってすでに使用されている可能性があります。 次のパラメーターが存在する場合は、opendkimミルターを追加するだけです(ミルターはコンマで区切られます)。ポート番号はopendkim.confと同じである必要があります。

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

パラメータが欠落している場合は、次のように定義します。

smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

信頼できるホスト、キーテーブル、署名テーブル、および暗号キーを保持するディレクトリ構造を作成します。

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

信頼できるホストを指定します。

sudo nano /etc/opendkim/TrustedHosts

このファイルを使用して、ExternalIgnoreListInternalHostsの両方を定義します。これらのホスト、ドメイン、およびIPアドレスから発信されたメッセージは信頼され、署名されます。

メインの構成ファイルはTrustedHostsを正規表現ファイル(refile)として宣言しているため、ワイルドカードパターンを使用できます。*.example.comは、example.com[からのメッセージを意味します。 X183X]のサブドメインも、ルートドメインから送信されたものだけでなく、信頼されます。

新しく作成したファイルをカスタマイズして、次の行を追加します。 複数のドメインを指定できます。最初の3行は編集しないでください。

127.0.0.1
localhost
192.168.0.1/24

*.example.com

#*.example.net
#*.example.org

キーテーブルを作成します。

sudo nano /etc/opendkim/KeyTable

キーテーブルには、各セレクター/ドメインペアとそれらの秘密キーへのパスが含まれています。 任意の英数字の文字列をセレクターとして使用できます。この例では、mailが使用されており、変更する必要はありません。

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

署名テーブルを作成します。

sudo nano /etc/opendkim/SigningTable

このファイルは、ドメイン/メールアドレスとそのセレクターを宣言するために使用されます。

*@example.com mail._domainkey.example.com

#*@example.net mail._domainkey.example.net
#*@example.org mail._domainkey.example.org

公開鍵と秘密鍵を生成する

キーディレクトリに移動します。

cd /etc/opendkim/keys

ドメインがキーを保持するための別のフォルダを作成します。

sudo mkdir example.com
cd example.com

キーを生成します。

sudo opendkim-genkey -s mail -d example.com

-sはセレクターを指定し、-dはドメインを指定します。このコマンドは、2つのファイルを作成します。mail.privateは秘密鍵で、mail.txtは公開鍵を含みます。

秘密鍵の所有者をopendkimに変更します。

sudo chown opendkim:opendkim mail.private

ドメインのDNSレコードに公開鍵を追加します

mail.txtを開きます:

sudo nano -$ mail.txt

公開鍵は、pパラメーターで定義されます。 以下のサンプルキーは使用しないでください。これは単なる説明であり、サーバーでは機能しません。

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

そのキーをコピーして、ドメインのDNSエントリにTXTレコードを追加します。

Name: mail._domainkey.example.com.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

DNSの変更が反映されるまでに数時間かかる場合があることに注意してください。

PostfixとOpenDKIMを再起動します:

sudo service postfix restart
sudo service opendkim restart

おめでとう! メールサーバーのDKIMが正常に構成されました。

空の電子メールを[email protected]に送信することで構成をテストでき、応答が受信されます。 すべてが正常に機能する場合は、Summary of Resultsの下にDKIM check: passが表示されます。

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

または、管理しているGmailアドレスにメッセージを送信し、受信したメールのヘッダーをGmailの受信トレイに表示することもできます。dkim=passAuthentication-Resultsヘッダーフィールドに表示されます。

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of [email protected] designates --- as permitted sender) [email protected];
       dkim=pass [email protected];

提出者:P。 セバスチャン