Skip to main content

Command Palette

Search for a command to run...

Postfix+SPF+DMARC+DKIM

Updated
3 min read
Postfix+SPF+DMARC+DKIM
  1. Установка компонент

yum install opendkim opendkim-tools
  1. Настройка доменов

Если у вас (как и у меня) используется много (почтовых) доменов, вот способ достаточно быстро создать ключи:
прежде всего, создайте текстовый файл со всеми доменами (у меня это /etc/opendkim/domains.txt):

Когда у вас есть все домены в файле, выполните следующее:

while IFS= read -r name; do mkdir -- "/etc/opendkim/keys/$name"; done </etc/opendkim/domains.txt

это создаст подкаталог для каждого домена.

  1. Создание ключей

затем создайте ключи:
поскольку это руководство предназначено для большого количества доменов (электронной почты), у меня есть небольшой скрипт (который я хотел бы назвать: DKIM-KeyCreat.sh)
В то время как ключ по умолчанию генерация по-прежнему имеет длину 1024 бита, скрипт создаст ключ длиной 2048 бит.
Синтаксис:

-b 2048 - создает 2048-битный ключ
-d - указывает домен.tld. (это происходит из текстового файла, содержащего ваши домены построчно
-D - указывает каталог, в который записывается пара ключей
-s - указывает селектор.

#!/usr/bin/bash

filename="$1"
while read -r line; do
    name="$line"
    selector="$name$2"
    opendkim-genkey -b 2048 -d $name -D /etc/opendkim/keys/$name -s $selector
    ls -l /etc/opendkim/keys/$name
done < "$filename"

Для идентификации каждого домена необходим селектор. Селектор представляет собой произвольное имя.

Когда вы посмотрите на сценарий, вы увидите, что переменная селектора состоит из имени домена (из файла, который вы предоставляете) и «суффикса селектора», который я предлагаю использовать в качестве даты, ГГГГммдд.
Это обеспечит уникальное имя, например: domain.tld20220825.

Этот скрипт должен быть запущен следующим образом:

./DKIM-KeyCreat.sh /etc/opendkim/keys/domains.txt [selector suffix]
пример
./DKIM-KeyCreat.sh /etc/opendkim/keys/domains.txt 20220825

чтобы просмотреть созданные ключи, вы можете запустить следующее:

while IFS= read -r name; do cat /etc/opendkim/keys/$name/$name*[selector suffix]*.txt ; done </etc/opendkim/keys/domains.txt

Теперь, когда у вас созданы все ключи, вам нужно выполнить настройку,специально для создания большого количества доменов, вот несколько базовых скриптов, которые немного облегчат вам жизнь:

  1. Заполняем файл opendkim.conf

Это содержимое файла /etc/opendkim.conf

SendReports     yes   
ReportAddress "domain1.net Postmaster <postmaster@domain1.net>"
ReportAddress "domain2.net Postmaster <postmaster@domain1.net>"
ReportAddress "domain3.net Postmaster <postmaster@domain1.net>"
SoftwareHeader  yes
Canonicalization        relaxed/simple

Вот небольшой скрипт DkimConf-create.sh, чтобы было проще заполнить файл и придать ему нужный формат:

#!/usr/bin/bash
filename="$1"
while read line; do
    name="$line"
    echo "ReportAddress \"$name Postmaster <postmaster@yourmaindomain.com>\""
done < "$filename"

Применение:

./DkimConf-create.sh /path/to/domainlist >> /etc/opendkim.conf
  1. Затем для KeyTable

  1. /etc/opendkim/KeyTable
domain1._domainkey.domain1.net domain1.net:domain1:/etc/opendkim/keys/domain1.net/domain1.private
domain2._domainkey.domain2.net domain2.net:domain2:/etc/opendkim/keys/domain2.net/domain2.private
domain3._domainkey.domain3.net domain3.net:domain3:/etc/opendkim/keys/domain3.net/domain3.privat

KeyTable-create.sh скрипт "заливки" для больших объемов доменов:

#!/usr/bin/bash
filename="$1"
selector="$name$2"
while read -r line; do
    name="$line"
    selector="$name$2"
    echo "$selector._domainkey.$name $name:$selector:/etc/opendkim/keys/$name/$selector.private"
done < "$filename"

использование:

./KeyTable-create.sh /path/to/domainlist [selector suffix] >> /etc/opendkim/KeyTable

/etc/opendkim/SigningTable

*@domain1.net domain1._domainkey.domain1.net
*@domain2.net domain2._domainkey.domain2.net
*@domain3.net domain3._domainkey.domain3.net

Если закоментировать строку для домена в файле SigningTable то DKIM не будет работать для этого домена

  1. Заполняем SigningTable

SigningTable-create.sh скрипт для заполнения файла SigningTable:

#!/usr/bin/bash
filename="$1"
while read -r line; do
    name="$line"
    selector="$name$2"
    echo "$name $selector._domainkey.$name"
done < "$filename"

использовать следующим образом:

SigningTable-create.sh /path/to/domainlist [selector suffix] >> /etc/opendkim/SigningTable

/etc/opendkim/TrustedHosts

mx01.mydomain.net # 1st mail exchanger (MX-Record)
mx02.mydomain.net # 2nd mail exchanger (MX-Record)
192.168.4.5/32 (Mailhost/Exchange Server
  1. Настройка DNS записей

Нужно иметь DNS для всех доменов:
Предостережение:
при создании 2048-битного ключа содержимое сгенерированного текстового файла нельзя просто скопировать 1:1,
содержимое файла выглядит так:


# cat /etc/opendkim/keys/domain1.tld/domain1.tld20220825.txt
domain1.tld20220825._domainkey  IN      TXT     ( "v=DKIM1; k=rsa; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzAzvlGEEl5XLGNwHd/3d8f40+rkqvWVqq82iJFGyFcwXuP90hyyeOhvhZYOtktyrnNWqBEoClp0/0NZyZhxr80kIMLvWawhWtnPllIVOyPMsJ/HZFinWoBGNjW2dXykv7UKsLaGmDcm18k/l+HEcMIncnYGCkEIX6KQDlO8A+pqnfSMZxUP4D9lqUhIPPcl1drGb88boT3rOkO"
          "zBRMzerrrr1qsaXI835PfRb4icDZOxE6c9s3qhWnEmci+qumc69VM02dqsXkDgswYyyn0dWyc1A0GRv9+qMdla3KJw28O7gvWFM7l/Yi/OSJ+tntDD2PhdROwMc368GHwqWT+fFhwIDAQAB" )  ; ----- DKIM key domain1.tld20220825 for domain1.tld

Все файли находятся /etc/opendkim/keys/

В DNS ключ вводим одной строчкой без кавычек!

Проверка успешно добавленной записи: https://toolbox.googleapps.com/apps/dig/#TXT/

https://mxtoolbox.com/SuperTool.aspx?action=dkim#

пример: autotrade.kiev.ua:autotrade.kiev.ua20230706

20230706 - селектор который задается при создании ключа

Еще одна проверка:

Отправить письмо на 'check-auth@verifier.port25.com' прийдет письмо ответ со всей инфой

More from this blog

IT Notes

21 posts