DKIMでPostfixメールサーバーを設定する方法

メールサーバー(メール転送エージェント、MTA)のインストールと構成は、システム管理者が直面する一般的なタスクの1つです。 ここではタスクについて説明し、記事の終わりまでに、25ポート(SMTP)をリッスンし、選択したドメインのメッセージをユーザーのメールボックスに配信するPostfixメールサーバーを備えたCentOS7を用意します。

まず、ドメインのDNSレコードを適切に構成する必要があります。 これは2か所で行われます。

A、TXT、MXレコードは、ドメインのレジストラであるGoDaddyに保存されます。 example。

レコード名とドメイン名を引数として「dig」コマンドを使用してレコードをチェックします。 私たちの中で example、私のドメインandreybondarenko.comは次のように構成されています。

  ┌[root@andreybondarenko]─[~]
  └─10/09 08:37:08-# dig mx andreybondarenko.com
  [...]
  ;; ANSWER SECTION:
  andreybondarenko.com. 1800 IN MX 1 andreybondarenko.com.
  [...]

これは、ホストが1つしかないため、andreybondarenko.comドメイン全体のメールが「andreybondarenko.com」という名前のホストによって提供されていることを示しています。 さらにあれば、mx1.andreybondarenko.comとmx2.andreybondarenko.comを作成すると、クライアントがランダムに選択したメールが配信されます。 これは、安定性、冗長性、および負荷分散に役立ちます。

PTRレコードはホスティングプロバイダー側​​で設定されます。 コントロールパネルでレコードを見つけるか、テクニカルサポートサービスがこれを行います。ホスティングプロバイダーがレコードの変更を拒否した場合、ほとんどの大規模なメールサーバー(Googleを含む)によってメッセージが拒否されます。 このレコードは「リバース」と呼ばれ、接続の開始に使用されるIPアドレスに有効なドメイン名があることを誰でも確認できます。 スパムボットをすばやく簡単に検出する方法です。制御していないIPアドレスを使用するため、PTRレコードを適切に設定できません。

次に、Postfix自体をインストールする必要があります。 柔軟性、安全性、拡張性が高く、大規模なインストールで高いパフォーマンスを提供できるため、メールサーバーとして使用することをお勧めします。 CentOSで実行するだけです:

yum install postfix

そして、パケットマネージャーは必要なすべての依存関係でそれをインストールします。 現時点では、バージョン2.10.1がCentOSリポジトリで利用可能な最新のものであるため、これを使用します。
Postfixには2つの構成ファイルがあります。 /etc/postfix/master.cfは、chrootされた環境を使用するかどうかに関係なく、プロセス数とその動作を制御します。ほとんどの場合、デフォルトで問題ありません。 /etc/postfix/main.cfは他のすべてを制御します、以下を変更する必要があります:

  myhostname = andreybondrenko.com
  mydomain = andreybondarenko.com

この2つの変数は、ホスト自体の有効なホスト名と、ホストがメールを提供しているドメインに設定する必要があります。 私の場合、それらは同じです。

  myorigin = $myhostname

myoriginパラメーターは、ローカルに投稿されたメールの送信元と思われるドメインを指定します。 デフォルトでは、$ myhostnameを追加します。これは、小規模なサイトでは問題ありません。 複数のメールサーバーでドメインを実行している場合は、これを$ mydomainに変更し、各ユーザー[email protected]をエイリアスするドメイン全体のエイリアスデータベースを設定する必要があります。 送信者アドレスと受信者アドレスの間の一貫性を維持するために、myoriginは、@ domain部分を持たない受信者アドレスに追加されるデフォルトのドメイン名も指定します。 デフォルト設定を使用します。

  inet_interfaces = all
  inet_protocols = all

この2つの設定は、すべてのインターフェイスでIPv4とIPv6の両方をリッスンするようにsmtpdに指示します。

  mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, myotherdomainihave.com

この変数は、メールを受け入れるすべてのドメインを設定します。 この場合、それはandreybondarenko.com、myotherdomainihave.com、およびlocalhostです。

relay_domains = $ mydestination
この変数は、受信者がホストにいない場合にメールを中継するためのすべてのドメインを設定します。
これが基本的に必要なすべての初期構成です。smtpdに、すべてのインターフェイスで25ポートをリッスンし、andreybondarenko.com、localhost、およびmyotherdomainihave.comへのメールを受け入れるように指示します。 デフォルトでは、/ var / mail内のユーザーのメールボックスにメールを配信します。将来的には、dovecotをIMAPサーバーとして設定し、SASL認証を提供してから、Postfixをスパムに対して強化し、グレーリストとDKIMを設定できます。 最後に行う必要があるのは、Systemdに起動時にPostfixを起動し、今すぐ実行するように指示することです。

  systemctl enable postfix
  systemctl start postfix

これで、プロセスリストで実行されていることがわかります。

   ┌[root@andreybondarenko]─[~]
   └─10/09 09:16:44-# ps ax|grep postfix
   1764 ? Ss 0:02 /usr/libexec/postfix/master -w

25ポートに接続し、Telnetでメッセージを送信できます。

  ┌[root@andreybondarenko]─[~]
  └─10/09 09:19:13-# telnet localhost 25
  Trying ::1...
  Connected to localhost.
  Escape character is '^]'.
  220 andreybondrenko.com ESMTP Postfix
  helo andreybondarenko.com
  250 andreybondrenko.com
  mail from:
  250 2.1.0 Ok
  rcpt to:
  250 2.1.5 Ok
  data
  354 End data with .
  test
  .
  250 2.0.0 Ok: queued as EBA0881589
  quit
  221 2.0.0 Bye

  Connection closed by foreign host.

そして/ var / log / maillogでそれを見てください

  Sep 10 09:19:18 andreybondarenko postfix/smtpd[10889]: connect from localhost[::1]
  Sep 10 09:19:47 andreybondarenko postfix/smtpd[10889]: EBA0881589: client=localhost[::1]
  Sep 10 09:19:54 andreybondarenko postfix/cleanup[10895]: EBA0881589: message-id=
  Sep 10 09:19:54 andreybondarenko postfix/qmgr[1770]: EBA0881589: from=, size=352, nrcpt=1

次に、DKIMを設定します(https://en.wikipedia.org/wiki/DomainKeys_Identified_Mailを参照)。 実際、ドメインキーテクノロジーが提供するのは、DNSを制御する人がメールサーバーも制御するという情報だけです。 つまり、サーバー側にDNSTXTレコードと特殊デーモンの2つの場所を同時に設定する必要があります。

まず、opendkimパッケージをインストールします。

  yum install opendkim

次に、実行します

┌[root@andreybondarenko]─[~]
└─10/09 18:46:11-# opendkim-default-keygen
Generating default DKIM keys:
Default DKIM keys for freshdaymall.com created in /etc/opendkim/keys.

/ etc / opendkim / keysには、公開鍵と秘密鍵を含む2つのファイルがあります。 秘密鍵について次の権限を確認してください(opendkimユーザーのみが読み取ることができます)。

  ┌[root@andreybondarenko]─[/etc/opendkim/keys]
  └─10/09 18:50:52-# ll default.private
  -r--------. 1 opendkim opendkim 887 Oct 2 2016 default.private

次に、設定を修正する必要があります。

  • /etc/opendkim.conf-opendkimの設定ファイル
  • / etc / opendkim / keytable —ドメインの秘密鍵のパスを定義します
  • / etc / opendkim / signingtable-キーの適用方法をOpenDKIMに指示します。
  • / etc / opendkim / TrustedHosts-キーの使用を許可するホストを定義します。

公開鍵と秘密鍵を/ etc / opendkimにコピーしました

  ┌[root@andreybondarenko]─[/etc/opendkim]
  └─10/09 18:53:40-# ls -la
  total 48K
  drwxr-xr-x. 3 root opendkim 4.0K Jan 9 2017 .
  drwxr-xr-x. 96 root root 12K Sep 8 07:28 ..
  -r--------. 1 opendkim opendkim 887 Oct 2 2016 andreybondarenko.com.private
  -rw-r-----. 1 root opendkim 333 Oct 2 2016 andreybondarenko.com.txt
  drwxr-x---. 2 opendkim opendkim 4.0K Dec 21 2016 keys
  -rw-r--r--. 1 root root 106 Oct 3 2016 keytable
  -rw-r--r--. 1 root root 60 Oct 3 2016 signingtable
  -rw-r-----. 1 opendkim opendkim 378 Dec 21 2016 TrustedHosts

/etc/opendkim.confには、次のパラメーターが必要です。

  • モードsv-送信メッセージに署名して確認する
  • Socket inet:8891 @ localhost-通信にローカルホストのポート8891を使用
  • ReportAddress “andreybondarenko.comPostmaster”-ポストマスターのアドレス。
  • ドメインandreybondarenko.com-私のドメイン
  • セレクターメール-キーのTXTレコードを確認する部分。

他のパラメータはデフォルトで有効にできます。

次に、/ etc / opendkim / keytableを次のように設定します。

  mail._domainkey.andreybondarenko.com andreybondarenko.com:mail:/etc/opendkim/andreybondarenko.com.private

そして/ etc / opendkim / signingtable

  *@andreybondarenko.com mail._domainkey.andreybondarenko.com

最初のファイルは、ドメインの秘密鍵を探す場所を定義し(実際のサーバーはそれらの多くを持つことができることを忘れないでください)、2番目のファイルはすべてのメールがこの鍵で署名される必要があることを定義します。 TrustedHostsは簡単で、デフォルトです。

  127.0.0.1
  ::1

これで、opendkimを実行できます。

  systemctl enable opendkim
  systemctl start opendkim

ホストでの最後の部分は、ローカルmilterを追加して、最初にすべてのメールをopendkimに転送するようにPostfixに指示することです。

  smtpd_milters = inet:127.0.0.1:8891
  non_smtpd_milters = inet:127.0.0.1:8891

それでおしまい! Postfixを再起動して、新しい構成を取得します。

  systemctl restart postfix

最後の非常に重要な部分です。DNSTXTレコードを使用して、世界への鍵のオープン部分を公開する必要があります。 次のようにレコードを作成する必要があります。

  • 名前-mail._domainkey
  • タイプ:TXT
  • TTL:1時間
  • 値:v = DKIM1; k = rsa; P = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvGRWfWPPZVIg0fy7Pr0 + rsBsoL6Imt1GBE / QRd3X5Izv1iAJFUsOteaf9TI9EO / YFwoLLahzuoZM1aUU4ED3fHlItEnqXCKQhX8Zripi7cfIO + DRFEhGuQtG6OIuA6 + c3ivao7DTPk / IFqY7MG5M3wMvAfV + eIBf1VjmajSwe3wIDAQABLast部分は、 ‘値’ はトリッキーで、ミスにつながる可能性があります。 /etc/opendkim/your_domain.txtまたは/etc/opendkim/keys/default.txtを読み取り、値をコピーしてすべての引用記号(つまり、すべて「」)を削除する必要があります。

メールサーバーは、外界と相互作用し、ベストプラクティスに従わなければならないため、一般的ですが複雑なサービスです。そのため、メールは受け入れられ、失われることはありません。