Postfix+SPF+DMARC+DKIM

Установка компонент
yum install opendkim opendkim-tools
Настройка доменов
Если у вас (как и у меня) используется много (почтовых) доменов, вот способ достаточно быстро создать ключи:
прежде всего, создайте текстовый файл со всеми доменами (у меня это /etc/opendkim/domains.txt):
Когда у вас есть все домены в файле, выполните следующее:
while IFS= read -r name; do mkdir -- "/etc/opendkim/keys/$name"; done </etc/opendkim/domains.txt
это создаст подкаталог для каждого домена.
Создание ключей
затем создайте ключи:
поскольку это руководство предназначено для большого количества доменов (электронной почты), у меня есть небольшой скрипт (который я хотел бы назвать: 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
Теперь, когда у вас созданы все ключи, вам нужно выполнить настройку,специально для создания большого количества доменов, вот несколько базовых скриптов, которые немного облегчат вам жизнь:
Заполняем файл 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
Затем для KeyTable
- /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 не будет работать для этого домена
Заполняем 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
Настройка 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' прийдет письмо ответ со всей инфой


