序章

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

  • サーバーはオープンメールリレーです
  • 送信者またはサーバーの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 + X その後 Y、最後にを押します 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:12301@localhost
  • AutoRestart :失敗時にフィルターを自動再起動します

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

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

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

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

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

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

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

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

  • モード:動作モードを宣言します。 この場合、ミルターは署名者として機能します(s)とベリファイア(v)

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

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

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

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

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

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

sudo nano /etc/default/opendkim

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

SOCKET="inet:12301@localhost"

この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のサブドメインからのメッセージも信頼されることを意味します。

新しく作成したファイルをカスタマイズして、次の行を追加します。 複数のドメインを指定できます。最初の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] 返信が届きます。 すべてが正しく機能する場合は、 DKIM check: passSummary of Results.

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

または、管理しているGmailアドレスにメッセージを送信し、Gmailの受信トレイで受信したメールのヘッダーを表示することもできます。 dkim=pass に存在する必要があります Authentication-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。 セバスチャン