# Postfix+SPF+DMARC+DKIM

1. # Установка компонент
    

```plaintext
yum install opendkim opendkim-tools
```

2. # Настройка доменов
    

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

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

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

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

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

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

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

```plaintext
#!/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**.

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

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

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

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

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

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

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

```plaintext
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**, чтобы было проще заполнить файл и придать ему нужный формат:

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

Применение:

```plaintext
./DkimConf-create.sh /path/to/domainlist >> /etc/opendkim.conf
```

5. # Затем для KeyTable
    

1. /etc/opendkim/KeyTable
    

```plaintext
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** скрипт "заливки" для больших объемов доменов:

```plaintext
#!/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"
```

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

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

/etc/opendkim/SigningTable

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

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

6. # Заполняем SigningTable
    

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

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

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

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

/etc/opendkim/TrustedHosts

```plaintext
mx01.mydomain.net # 1st mail exchanger (MX-Record)
mx02.mydomain.net # 2nd mail exchanger (MX-Record)
192.168.4.5/32 (Mailhost/Exchange Server
```

7. # Настройка DNS записей
    

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

```plaintext

# 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://cdn.hashnode.com/res/hashnode/image/upload/v1688737084385/cebc5e52-c8e7-4845-b271-07b4f6fa53c1.png align="center")

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

[https://mxtoolbox.com/SuperTool.aspx?action=dkim#](https://mxtoolbox.com/SuperTool.aspx?action=dkim#)

*пример:* [*autotrade.kiev.ua*](http://autotrade.kiev.ua)*:autotrade.kiev.ua20230706*

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

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

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1688980226570/4545da57-d1a3-4830-9ef5-9f8714c15bfe.png align="center")
