Настройка и установка dkim для postfix под debian wheezy


Содержание

Настройка Exim DKIM в Debian

Настроим на нашем почтовым сервере Exim DKIM подписи, для того чтобы письма с нашего почтового сервера не попадали в спам и быстрее проходили проверку в различных спам-фильтрах, а также повысить доверие к нашему почтовому серверу со стороны популярных почтовых систем mail, yandex, gmail.

И добавим в DNS нашего домена необходимых записей о наличии поддержки DKIM.

Рассмотрим настройку DKIM при помощи opendkim-tool

создаем папку dkim в которой будет лежать наш приватный ключ

Меняем права на папку с root на Debian-exim

Генерируем открытый и закрытый ключи для домена adminunix.ru:

D

        Каталог в который будут сгенерированы ключи

d

      Называет домена, который будет использовать этот ключ для подписания

После выполнения будут созданы файлы etc/exim4/dkim/mail.private и /etc/exim4/dkim/email.txt, с секретным и публичными ключами соответственно.

переходим в папку /etc/exim4/dkim/ и переименовываем mail.private в adminunix.ru.key

Меняем права adminunix.ru.private (файл закрытого ключа) с root на Debian-exim

Настройки DNS

посмотрим содержимое файла mail.txt

email._domainkey В TXT «v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxweK5
+F42YFdkRQqZI922yCQc68pdgWUhYr7CSeCxcQ5P10oKi2mXtYxOOKmeA7NExY6U5jrGEJ6gyr
BfsJPUp25PwApbpGZ+cIRB2/N3KcevEfiOVyyO7f7WduM+jmz69nyLozWO7QM2QjCCxWx6aKZm» ; —— DKIM ключ почты для adminunix.ru

И добавляем эту информацию в нашу DNS зону в TXT запись.

Добавляем в поле имя
email._domainkey

а в поле Контент

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxweK5
+F42YFdkRQqZI922yCQc68pdgWUhYr7CSeCxcQ5P10oKi2mXtYxOOKmeA7NExY6U5jrGEJ6gyr
BfsJPUp25PwApbpGZ+cIRB2/N3KcevEfiOVyyO7f7WduM+jmz69nyLozWO7QM2QjCCxWx6aKZm

После того как мы добавили запись в DNS домена то mail.txt можно удалять файл.

Проверяем добавление записи в DNS

в ответ должны получить

email._domainkey.adminunix.ru. 2214 IN TXT «v=DKIM1\; k=rsa\; t=s\; p=MIIBIj.

Последним этапом настройки DKIM подписи является определение DKIM Author Domain Signing Practices (DKIM ADSP)
Добавляем еще одну запись TXT в DNS домена.

all

        — отправка неподписанных сообщений запрещена,

discardable

        — все неподписанные сообщения должны быть заблокированы на стороне получателя.

unknown

      — домен может подписывать некоторые или все письма

Настройка Exim

Добавляем в конфиг /etc/exim4/exim4.conf.template перед секцией remote_smtp:

# DKIM:
DKIM_DOMAIN = $>
DKIM_KEY_FILE = /etc/exim4/dkim/DKIM_DOMAIN.key
DKIM_PRIVATE_KEY = $<0>>
DKIM_SELECTOR = email

или если конфиг разделен (при установке exim4 был вопрос «разделить конфиги на мелкие файлы?»), то писать в /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp

Если вы в ручную создали конфигурационный файл /etc/exim4/exim4.conf, то добавлять надо в него.

И так для каждого домена. И потом рестарт екзима:
/etc/init.d/exim4 restart

Посмотрим наши записи в конфигурационным файлом Exim

где dkim_selector это первое слово перед ._domainkey в открытом ключе

И проверяем через сервис [urlspan]сервис[/urlspan] всели у нас получилось.

Читайте другие интересные статьи

Понравилась статья, расскажи о ней друзьям, нажми кнопку!

How to Setup DKIM (DomainKeys) with Postfix on Ubuntu & Debian

DKIM (DomainKeys Identified Mail) is a method of signing electronic emails using public-private key pair. DKIM is used by receiving mail server for identifying email, that they are sent by authorized mail servers. It also minimizes the possibility of getting emails SPAM.

This tutorial will provide you a quick and easy way to setup DKIM (DomainKeys) with your POSTFIX running on Debian based systems.

Step 1 – Install opendkim Package

First we need to install opendkim and opendkim-tools packages using following command.

Step 2 – Generate Key Pair

Now create DKIM key pair using opendkim-genkey command line utility. For this tutorial we are using domain name “example.com”, Change this name with your actual domain name.

Above command will generate two files default.private and default.txt. You can created multiple DKIM keys for different-2 domains and configure with your postfix server.

Step 3 – Configure DKIM and POSTFIX


First edit the domain keys lists setting file /etc/mail/dkim.key and add following entry.

Edit DKIM configuration file /etc/opendkim.conf and update below values in configuration file.

Now edit POSTFIX configuration file /etc/postfix/main.cf and add following values at the end of file

Step 4 – Configure DNS Entry

After configuring private key in postfix server. there will be another file default.txt generated by opendkim-genkey. Edit your DNS zone file and add this as TXT record found in default.txt.

Step 5 – Restart Service

After making all above configuration’s restart dkim and postfix services

Step 6 – Verify DKIM

And you have all done. Let’s verify that DKIM is working properly. Let’s send a test email through command line

In received email in our mailbox, open the source of email and search for «DKIM-Signature». You will find some thing like below

matoski.com

Setting up SPF + DK + DKIM with Postfix in Plesk 11.5 on Debian Wheezy

Shows up a detailed process on how to set up SPF + DK + DKIM with Postfix in Plesk 11.5 on Debian Wheezy, step by step, and how to test to make sure everything is working correctly

I leased a dedicated server from Hetzner, and I got the Plesk option, for administration, so I don’t have to bother with administration, but turns out I’m not so lucky, I’ve ran into a lot of issues with using Plesk, so I had to do my own fixes.

So let’s take a look at how we can integrate SPF + DK + DKIM with Postfix in Plesk 11.5 on Debian Wheezy.

First things, first, if you are using QMail switch to Postfix, to install Postfix you can either use the GUI, or you can do it from a console.

Here is how to do it from the console.

Let’s open the DNS Template, you will see there that, there is an entry for SPF

This means the SPF is enabled on our domain.

Let’s modify it a little bit to be better, if you are gonna host multiple domains from your server, then you should probably modify it too.

  • — Is the IP of the mail server that is responsible for sending the mails, it is automatically filled in when you apply the zones

After you do this modification you should apply it

So now my configuration looks like this:

Now let’s check with dig if the SPF is OK.

You will see in the Answer section I have the following entry

So everything is ok, next onto DomainKeys

DomainKeys

First let’s activate DomainKeys, take a look at the screenshot, and compare my options with yours.

Ok, now that this has been enabled, let’s go and enable for the domain in question, if it was already checked, uncheck it press OK, and then check it again and press OK, this is so it will regenerate the DomainKeys data in the DNS zone, as I’ve had some problems with the data not present in the DNS zone file

OK, now let’s see if the correct data is there, usually it takes a long time for DNS to propagate between 24-48h, there is a simple way to test if the data is there, by querying the Nameserver that hosts your DNS zone, in my case I host my own Nameserver

You will see in the Answer section I have the following entry

Now let’s see if the DomainKey is there too

In the Answer section you should see something like

As you can see everything is in place now for DomainKeys to work, now let’s continue on to DKIM

DKIM (DomainKeys Identified Mail)

As always lets update the system first

Now we need to install the DKIM filter, or as it’s called now OpenDKIM, for full specification take a look at their site.

Now we need to create the necessary folders so OpenDKIM can work proplery

This will create the directory where we will hold the keys for OpenDKIM, after this step let’s take a look at how the process will look like, so we can create a script to automate this.

This easily understandble, what happens here.

Now you have two files /etc/opendkim/keys/myserverplace.de

  • /etc/opendkim/keys/myserverplace.de/mail.private

contains the RSA PRIVATE KEY

  • /etc/opendkim/keys/myserverplace.de/mail.txt

Contains the record you need to add to your DNS zone

Next set is to setup the key tables, signing tables, and trusted hosts

First let’s prepare the files

/etc/opendkim/TrustedHosts

needs to contain some data before we continue, so add the following information to this file, and adjust accordingly

So let’s see what does what:

  • /etc/opendkim/KeyTable
  • /etc/opendkim/SigningTable

The filter used is programmed to read the table by looking for matched domain

  • /etc/opendkim/TrustedHosts

It will list the top trusted hosts as you desire

Those three files contain all the necessary information for the signing to work.

So in my case for my domain I do.


So let’s put all this together in a script so we don’t have to do it all the time

So if we run the script, we should get output like this, and this is the data we need to put in the DNS zone.

Unfortunatly I don’t have time to create a script to do this automatically, you can always insert a record in MySQL database so it’s in the ZONE and you can regenerate the DNS Zone from the command line, and I won’t be having a lot of domains, so I can add this entry manually to a domain I want DKIM enabled

Let’s open the domain and go to DNS Settings, and you can click ** Add Resource **

You popuplate the following data in the inputboxes

In the text record you copy a part of the contents from the file /etc/opendkim/keys/myserverplace.de/mail.txt, it data should start from v=DKIM1; k=rsa; to the end, without the quotes as you can see it’s in quotes.

In the example above for domain test.de you add only the following contents in the input box

Well that’s it for this, now let’s check with dig if the record is there

You will see in the Answer section I have the following entry

Well everything is setup up at least from the DNS side, now we need to configure Postfix to use this data and sign the emails.

You can also use the following URLs to check the validity of your key

In the selector fields try with both mail, and default, you shold be getting valid results

OpenDKIM

We need to edit the configuration file to configure DKIM, open /etc/opendkim.conf with your favorite editor and add the following lines to the end of the file

That’s it for OpenDKIM, now we should restart the service

Postfix

Now let’s see what we need to do to configure Postfix to use OpenDKIM.

Execute the following command to see the milters configured

You can see that we have additional milters we need to put, this one is from the process psa-pc-remote, and it’s part of Plesk

Open /etc/postfix/main.cf with your favorite editor, and add the following to the end of the file

As you can see we added the OpenDKIM milter too, and milter_protocol is set to 6, this is important, if it’s not set to 6, the psa-pc-remote process will segfault like so,

And your messages won’t be signed with DomainKey, only with DKIM

Testing

There is an easy way to test if everything is correct, create an email account if you haven’t already and send a test mail to the following recepients, and the results are cut down because the text is too big

You can check the following locations to see if there are errors

Make sure you enable testing mode for DKIM if you plan to test, you can also cut down the EXPIRY time so the results propagate faster, so to enable testing mode set the key _domainkey to t=y; o=-

Настройка SPF, DKIM и DMARC без панели для postfix

В предыдущих статьях мы рассказывали о подготовительных работах на сервере и двух способах установки и настройки почтового сервера — с хранением почтовых паролей в файле и в базе данных.

Теперь пришло время повысить лояльность почтовых сервисов к письмам, отправляемым с сервера, чтобы они не попадали в спам. Для этого мы настроим несколько дополнительных параметров.

Настраиваем spf

SPF-запись указывает, с каких серверов может отправляться почта для домена.

Для домена нужно добавить TXT-запись на серверах имён следующего вида:
Имя: ВАШ_ДОМЕН.
Значение: v=spf1 ip4:IP_ПОЧТОВОГО_СЕРВЕРА a mx

all
Где вместо IP_ПОЧТОВОГО_СЕРВЕРА нужно указать ip вашего сервера.

Так это будет выглядеть при использовании наших серверов имён:

Настраиваем DKIM

DKIM добавляет в заголовки письма цифровую подпись, которая подтверждает подлинность отправителя и гарантирует целостность письма.

Centos:

Debian/Ubuntu:

Запускаем службу и добавляем ее в автозагрузку:

Создаём директорию, где будут лежать ключи:

*домен mailtest.fvds.ru нужно заменить на свой домен

Правим права на ключи:

В конец файла /etc/opendkim.conf добавляем следующие настройки:

В файл /etc/opendkim/TrustedHosts вносим наш домен:

Файл должен выглядеть таким образом:

Открываем файл /etc/opendkim/KeyTable и приводим к такому виду:

Нужно заменить домен на свой и указать ваш путь до приватного ключа.

Правим файл /etc/opendkim/SigningTable и указываем в нём следующие данные:

Домен также нужно поменять на свой.

Для Debian/Ubuntu указываем порт, на котором будет работать opendkim :

И добавляем работу с DKIM в настройку postfix :

Перезапускаем службы для применения настроек:

Теперь нужно разместить публичный ключ на серверах имён домена, узнать его можно в файле /etc/opendkim /keys/mailtes.fvds.ru/dkim.txt :

Запись должна быть следующего вида:
Имя: dkim._domainkey.ВАШ_ДОМЕН.
Значение (подставить свой ключ): v=DKIM1; k=rsa;

Пример, как это выглядит в нашей панели управления записями доменов:

Настраиваем DMARC

DMARC — это ещё одна настройка, которая позволяет идентифицировать отправителя и снизить количество спама и фишинга.

На серверах имён нужно разместить TXT-запись со следующим содержанием:
Имя: _dmarc.ВАШ_ДОМЕН.
Значение: v=DMARC1; p=none; aspf=r; sp=none

Вот так это будет выглядеть в DNSmanager:

Теперь при отправлении писем с сервера принимающая сторона не будет расценивать их как спам и ваши сообщения дойдут до адресата.

flops.ru

  • Настройка DKIM/SPF в postfix

  • Настройка DKIM/SPF в postfix

    Для примера будет использоваться домен example.com

    1. Установка postfix и mailutils

    2. Настройка postfix через конфигуратор пакета

    На первом шаге в конфигураторе пакета необходимо выбрать опцию Internet site

    На втором шаге необходимо задать имя почтовой системы

    3. Настройка SPF

    Настроенный SPF и DKIM снизит вероятность попадания письма в спам.

    Для настройки SPF необходимо создать TXT-запись следующего вида:

    server_ip необходимо заменить на IP-адрес сервера, который отправляет письма

    4. Настройка DKIM

    После выполнения последней команды в директории /etc/postfix/dkim/ появятся ключевая пара (публичный и приватный ключ) для домена example.com.

    Файл /etc/opendkim.conf необходимо привести к следующему виду:

    В файле /etc/postfix/dkim/keytable необходимо указать информацию о приватном ключе:

    В файле /etc/postfix/dkim/signingtable указываются домены, которые необходимо подписывать:

    В /etc/default/opendkim необходимо указать сокет, который будет слушать opendkim (другие директивы SOCKET необходимо закоментировать):

    Добавляем в /etc/postfix/main.cf:

    Затем перезапускаем postfix и opendkim:

    Осталось настроить DNS.

    Необходимо создать TXT-записи следующего вида:

    5. Тестирование

    Для проверки можно отправить тестовое сообщение на свой почтовый ящик с помощью утилиты mail.

    В заголовках полученного сообщения проверки SPF и DKIM должны быть успешно пройдены:

    Также проверить DKIM можно с помощью утилиты opendkim-testkey:

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

    Настройка и установка dkim для postfix под debian wheezy

    В Debian настройка почтового сервера чаще всего предполагает использование связки из Postfix — SMTP сервера, отвечающего за передачу писем и Dovecot, обеспечивающего их хранение.

    Альтернативными Postfix вариантами являются Sendmail и Exim, но применяются они значительно реже ввиду меньшего удобства эксплуатации и меньших возможностей (в случае с Sendmail) и большей сложности настройки (в случае с Exim).

    В распределенных системах Dovecot работает с сервером баз данных (чаще всего — MySQL) храня данные о ящиках и доменах в базе, письма хранятся на диске.

    По умолчанию же Dovecot используем системных пользователей и хранит письма в их домашних каталогах. Поскольку рассматривать в рамках статьи довольно сложную конфигурацию почтового сервера, хранящего информацию в базе, будет разобрана настройка связки Postfix + Dovecot для случая когда последний использует системных пользователей.

    Илон Маск рекомендует:  Что такое код swf_perspective

    Почтовый сервер будет работать по защищенному соединению, SSL сертификат и ключ сгенерируем самостоятельно.

    Когда ключ и сертификат сгенерированы — начинаем настройку. Используется машина, созданная на основе дистрибутива Debian 8. Аутентификаиця пользователей будет осуществляться посредством SSL + TLS.

    Настройка почтового сервера Debian Postfix + Dovecot

    Убедимся в том, что для сервера используется статический IP-адрес (установлен параметр static)

    Если в настройки сети вносились изменения — перезагружаем серввер

    Устанавливаем Postfix из репозитория

    В первом окне выбираем опцию Internet site

    При запросе System mail name вводим имя домена

    Те же параметры в любой момент можно изменить в конфиге пакета, также можно запустить реконфигуратор

    Открываем при помощи текстового редактора основной конфигурационный файл postfix

    home_mailbox = Maildir/
    mailbox_command =

    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_enable = yes

    myorigin=$mydomain

    В конфиге указываем директорию, в которой будут храниться письма пользователя и задаем параметры аутентификации, которые будут применяться при работе почтовой системы.

    SASL (Simple Authentication and Security Layer)

    Если в файле присутствовала строка mailbox_command с определенным значением — комментируем ее.

    Конфигурационный файл postfix можно не редактировать вручную, вместо этого можно вводить в консоль команды вида postconf -e «команда».

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

    Будем использовать tls

    postconf -e «smtp_tls_note_starttls_offer=yes»

    Задаем пути к ключу и сертификату SSL

    postconf -e «smtp_tls_key_file=/etc/ssl/private/example.key»

    postconf -e «smtp_tls_cert_file=/etc/ssl/private/example.crt»

    postconf -e «smtp_tls_CAfile=/etc/ssl/certs/example.pem»

    postconf -e «smtp_tls_received_header=yes»

    postconf -e «smtp_tls_session_timeout=3600s»

    Ниже приведен минимальный, но полностью рабочий конфигурационный файл /etc/postfix/main.cf

    mydomain = example.com
    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no

    append_dot_mydomain = no

    readme_directory = no

    smtpd_tls_cert_file=/etc/dovecot/dovecot.crt
    smtpd_tls_key_file=/etc/dovecot/private/dovecot.key
    smtpd_use_tls = yes
    smtp_use_tls = yes
    smtpd_tls_auth_only = no
    smtpd_tls_session_cache_database = btree:$/smtpd_scache
    smtp_tls_session_cache_database = btree:$/smtp_scache
    smtp_tls_note_starttls_offer = yes


    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth

    smtpd_tls_received_header = yes
    smtpd_tls_loglevel = 1
    tls_random_source = dev:/dev/urandom

    smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
    myhostname = example.com
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = $mydomain
    mydestination = example.com, localhost
    mynetworks = 127.0.0.0/8
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    inet_protocols = ipv4
    home_mailbox = Maildir/
    mailbox_command =

    Устанавливаем dovecot, письма будем забирать по imap

    apt-get install dovecot-common dovecot-imapd

    Добавляем в конфиг пути к файлам с ключом и сертификатом, а также указание на необходимость использования SSL

    ssl = required
    ssl_certs = Запись опубликована 23.02.2020 автором admin в рубрике Почтовые серверы.

    Поиск

    Последние статьи

    Рубрики

    • Apache (20)
    • AWS (10)
    • Bash (13)
    • CRON (5)
    • CSS / изображения (6)
    • DNS (8)
    • ELK (1)
    • FastCGI (4)
    • JS (6)
    • Memcached (1)
    • MongoDB (3)
    • MySQL (52)
    • Networking (43)
    • Nginx (39)
    • PHP (13)
    • Python (28)
    • Ruby (6)
    • Search (1)
    • Virtualization / Containers (27)
    • Базы данных (12)
    • Безопасность (25)
    • Высокие нагрузки (23)
    • Контроль версий (14)
    • Мониторинг (17)
    • Обзоры сервисов (23)
    • Оптимизация (1)
    • Ошибки (24)
    • Почтовые серверы (10)
    • Работа сайтов (17)
    • Распределенные системы (8)
    • Телефония (10)
    • Типовые задачи (54)
    • Ядро и ОС (23)
    Подключить мониторинг

    Уведомления позволят узнать о проблемах на вашем сайте вперед клиентов

    Настройка Postfix на Debian с пользователями в базе данных

    Всем привет! И вот наконец дописал я эту статью, которая стала сборником различных методов настройки почты на сервере Debian.

    При написании использовались разные источники, поэтому элементы кода могут вам быть знакомыми. Я благодарен форумам за то, что наставили на путь истинный в войне с postfix!

    В начале нам потребуется вот что:

    1. Регистрируем доменное имя, какое нам больше нравится. Если хотите почту вида @litl-admin.ru, то регистрировать нужно litl-admin.ru. Конечно, придумайте своё; Сделать это можно у крупных регистраторов или у, практически, любого хостера.
    2. Арендуем VDS с предустановленной Linux. В общем виде – это виртуальная машина с выделенным IP, на которой мы являемся root и можно ставить все, что угодно. Само-собой и настраивать тоже. Обходится эта услуга не очень дорого, порядка 1400 рублей в год, что весьма и весьма неплохо;
    3. Прописываем MX запись в DNS настройках нашего доменного имени с указанием IP-адреса нашего VDS;

    Так, это всё организационные моменты. Теперь будем настраивать наш сервер.

    Шаг 1. Удаление предыдущего MTA.

    Удаляем exim4 из системы. У меня в Debian это был почтовый MTA по умолчанию, от которого я поспешил избавиться. Если в системе фурычит sendmail (проверить можно по # netstat -an | grep :25 ) то # kill -9 этот PID и продолжаем работу дальше;

    Шаг 2. Настраиваем имя хоста.

    Для этого посмотрите вывод команд:

    – выводит короткое имя узла и

    – выводит полное FQDN имя узла. Эти имена нужно будет прописать сразу в файл /etc/hosts в виде:

    Попутно запишите себе этот FQDN, он нам ещё пригодится.

    Шаг 3. Начинаем установку необходимых пакетов:

    # apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-common dovecot-imapd dovecot-pop3d libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailutils


    Установка всех пакетов

    Во время установки вам будет задан ряд наводящих на мысли вопросов навроде пароля суперпользователя mysql. Указывайте то, что не забудете. И лучше сразу записывать куда-нибудь подальше.

    Далее, начнется конфигурирование Postfix (диалоговые окна), в которых нужно указать, что наш почтовый сервер является Интернет-сайтом, после чего указать наше hostname в поле ввода имени хоста. Тут указываем полное FQDN-имя:

    Конфигурирование Postfix Вводим FQDN-имя хоста

    Остальные настройки будем вносить непосредственно в файл /etc/postfix/main.cf.

    Шаг 4. Настройка сервера MySQL

    Настройка проста и богата дефолтами. Прежде всего убедимся, что работать будем с локальным хостом, для чего в файле /etc/mysql/my.cnf отметим параметр:

    Перезапускаем / запускаем службу mysql:

    # service mysql restart (или start , если не была запущена ранее)

    Обратите внимание, что пробелы между -p и паролем не ставятся! Если увидели приглашение mysql> значит всё ок! Идём дальше.

    Шаг 5. Создаем служебные таблицы MySQL

    Выполняем, как указано выше:

    и попадаем в командный режим mysq.

    Далее, переписываем туда нижеуказанные команды (можно сделать копипаст):

    CREATE DATABASE mail;
    USE mail;
    GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO ‘postfixadmin’@’localhost’ IDENTIFIED BY ‘postfixpassword’;
    GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO ‘postfixadmin’@’localhost.localdomain’ IDENTIFIED BY ‘postfixpassword’;
    FLUSH PRIVILEGES;
    CREATE TABLE domains (domain varchar(30) NOT NULL, PRIMARY KEY (domain) );
    CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
    CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
    QUIT;

    Не забудьте поменять логин с паролем для пущей безопасности!

    Шаг 6. Настраиваем Postfix для работы с MySQL

    Для того, чтобы Postfix мог брать информацию не из файлов, а из нашей базы данных (какие аккаунты есть, какие домены обслуживать, куда почту перенаправлять), нужно предусмотреть его работу с движком mysql. Для этого создаем служебные файлы следующего содержания:

    Файл /etc/postfix/mysql-virtual_domains.cf
    user = postfixadmin
    password = postfixpassword
    dbname = mail
    query = SELECT domain AS virtual FROM domains WHERE domain=’%s’
    hosts = 127.0.0.1

    Файл /etc/postfix/mysql-virtual_forwardings.cf
    user = postfixadmin
    password = postfixpassword
    dbname = mail
    query = SELECT destination FROM forwardings WHERE source=’%s’
    hosts = 127.0.0.1

    Файл /etc/postfix/mysql-virtual_mailboxes.cf
    user = postfixadmin
    password = postfixpassword
    dbname = mail
    query = SELECT CONCAT(SUBSTRING_INDEX(email,’@’,-1),’/’,SUBSTRING_INDEX(email,’@’,1),’/’) FROM users WHERE email=’%s’
    hosts = 127.0.0.1

    Файл /etc/postfix/mysql-virtual_email2email.cf
    user = postfixadmin
    password = postfixpassword
    dbname = mail
    query = SELECT email FROM users WHERE email=’%s’
    hosts = 127.0.0.1

    Сразу расскажу, для чего нужна та или иная таблица:

    1. domain – в этой таблице хранятся домены, обслуживаемые нашим сервером. Для моего сайта будет litl-admin.ru, если вы купите ещё одно доменное имя, то укажите и его сюда, чтобы наш почтовый сервер мог обслуживать несколько доменов.
    2. forwardings – в этой таблице хранятся данные для перенаправления входящей почты. Например, если мы хотим завести почту с нашим красивым доменом, но не хотим хранить там письма, то можно редиректить всю входящую почту на наш ящик на mail.ru например;
    3. users – в этой таблице хранятся пользователи, созданные на нашем сервере. Хотите добавить нового юзера – просто добавьте запись в эту таблицу. Указывать нужно вместе с доменом.

    На все созданные выше файлы назначаем привилегии, для того, чтобы увеличить безопасность. Конечно, чтобы никто другой не прочитал.

    # chmod o= /etc/postfix/mysql-virtual_*.cf

    Напомню, что формулировка 0= выставляет права для других (Other) равными … ну то есть убирает, при этом не трогая другие права. То есть права владельца и группы остаются неизменными.

    Назначим так же группу на эти файлы:

    # chgrp postfix /etc/postfix/mysql-virtual_*.cf

    Готово! Идём дальше.

    Шаг 7. Создаем пользователя для хранения почты

    Первым делом, создаем группу virtualmail с gid-ом 5000, конечно можно указать любой gid из не существующих ранее, но почему-то полюбился для постфикса именно этот:

    # groupadd -g 5000 virtualmail

    Теперь создаем одноименного пользователя с аналогичным uid и домашний каталог для него.

    # useradd -g virtualmail -u 5000 virtualmail -d /home/virtualmail -m

    Шаг 8. Конфигурируем Postfix

    #Указываем баннер для нашего сервера)
    smtpd_banner = Welcome to SMTP by Litl-admin.ru
    biff = no

    # Не будем добавлять .домен, это работа почтового
    append_dot_mydomain = no

    # Uncomment the next line to generate «delayed mail» warnings
    #delay_warning_time = 4h

    readme_directory = /usr/share/doc/postfix

    # TLS parameters
    # Путь к сертификату, сгенерируем его попозже
    smtpd_tls_cert_file = /etc/postfix/smtpd.cert
    smtpd_tls_key_file = /etc/postfix/smtpd.key
    smtpd_use_tls = yes
    smtpd_tls_session_cache_database = btree:$/smtpd_scache
    smtp_tls_session_cache_database = btree:$/smtp_scache

    # Имя хоста, совпадает с сайтом
    myhostname = litl-admin.ru
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = localhost, localhost.localdomain
    relayhost =
    # Замените [My.Site.Ip.Addr] на ваш IP-адрес
    mynetworks = 127.0.0.0/8 [My.Site.Ip.Addr]/32

    mailbox_command = procmail -a «$EXTENSION»
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    html_directory = /usr/share/doc/postfix/html

    # 30 мегабайт вполне достаточно
    message_size_limit = 30720000

    # Вот тут используем виртуальные адреса для пересылки почты
    virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf

    # Обслуживаемые виртуальные домены
    virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
    # Обслуживаемые ящики
    virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf

    # Каталог для почты
    virtual_mailbox_base = /home/virtualmail
    # Владелец каталога (UID, GID)
    virtual_u > virtual_g >

    # Испольуем SASL для аутентификации
    smtpd_sasl_auth_enable = yes
    broken_sasl_auth_clients = yes
    smtpd_sasl_authenticated_header = yes

    # Обязательно наличие HELO
    smtpd_helo_required = yes

    # Отбрасываем тормозов
    smtpd_delay_reject = yes

    # Команда VRFY помогает злоумышленникам подбирать адреса (можно узнать о существовании адреса)
    disable_vrfy_command = yes

    # Отсекаем на уровне HELO. Разрешаем всех из mynetworks и успешно аутентифицированных, режем всех, кто представляется инвалидным именем
    smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_invalid_hostname
    permit

    # Отсекаем на уровне MAIL FROM. Разрешаем аутентифицированных и из наших подсетей, режем всех, кто представляется не FQDN или неизвестным нам доменом (не пошлют письмо с обратным адресом billi@gates.ass и подобным.
    smtpd_sender_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    reject_non_fqdn_sender
    reject_unknown_sender_domain
    permit

    # Отсекаем на уровне RCPT TO. Разрешаем аналогично. Режем всех, кто шлёт письма в потоке, а так же когда адрес назначения не соответствует нашему серверу или FQDN-записи.
    smtpd_recipient_restrictions =
    reject_unauth_pipelining
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
    reject_non_fqdn_recipient
    permit

    # Отсекаем на уровне DATA. Разрешаем аналогично, режем всех, кто шлет в потоке.
    smtpd_data_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_pipelining
    permit

    # Отсекаем на уровне End data, режем всех, кто осуществляет множественную пересылку от пустого имени.
    smtpd_end_of_data_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_multi_recipient_bounce
    permit

    virtual_create_maildirsize = yes
    virtual_maildir_extended = yes
    proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
    virtual_transport = dovecot

    Шаг 9. Создаем SSL-сертификат

    Переходим в каталог с postfix (по умолчанию это /etc/postfix/, ну вы знаете уже)

    # openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

    Начнутся допросы с пристрастием, отвечаем честно, то есть первое, что придёт в голову. Важно только предпоследнее поле, туда указываем то имя хоста, что у нас в конфиге postfix-а:

    Country Name (2 letter code) [AU]:RU
    State or Province Name (full name) [Some-State]:Sakhalin isl.
    Locality Name (eg, city) []:Yuzhno-Sakhalinsk
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Litl-admin Ltd
    Organizational Unit Name (eg, section) []:My Mail Service
    Common Name (eg, YOUR name) []: litl-admin.ru
    Email Address []:root@litl-admin.ru

    Вот и всё. Не забываем защитить сертификат от посягательств:


    # chmod o= /etc/postfix/smtpd.key

    Шаг 9. Учим saslauthd работать с MySQL

    Создаем директорию для saslauthd

    # mkdir -p /var/spool/postfix/var/run/saslauthd

    Начинаем редактировать файл /etc/default/saslauthd, предварительно создав его резервную копию. Вообще, поверьте, перед любым редактированием конфига полезно сделать его резервную копию:

    # cp -a /etc/default/saslauthd /etc/default/saslauthd.old

    Содержимое конфига /etc/default/saslauthd:

    START=yes
    DESC=»SASL Authentication Daemon»
    NAME=»saslauthd»
    MECHANISMS=»pam»
    MECH_OPTIONS=»»
    THREADS=5
    OPTIONS=»-c -m /var/spool/postfix/var/run/saslauthd -r»

    Вслед за этим создаем файл /etc/pam.d/smtp и вставляем в него строки:

    auth required pam_mysql.so user=postfixadmin passwd=postfixpassword host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
    account sufficient pam_mysql.so user=postfixadmin passwd=postfixpassword host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

    Далее, создаем файл /etc/postfix/sasl/smtpd.conf со следующим содержимым:

    pwcheck_method: saslauthd
    mech_list: plain login
    allow_plaintext: true
    auxprop_plugin: mysql
    sql_hostnames: 127.0.0.1
    sql_user: postfixadmin
    sql_passwd: postfixpassword
    sql_database: mail
    sql_select: select password from users where email = ‘%u’

    Аналогичным образом, защищаем эти файлы:

    # chmod o= /etc/pam.d/smtp
    # chmod o= /etc/postfix/sasl/smtpd.conf

    Ну и добавим пользователя в группу:

    # adduser postfix sasl

    Шаг 10. Конфигурируем Dovecot

    Для этого открываем файл /etc/postfix/master.cf и дописываем в конец:

    dovecot unix — n n — — pipe
    flags=DRhu user=virtualmail:virtualmail argv=/usr/lib/dovecot/deliver -d $

    Редактируем конфиг dovecot (разумеется, сделав бэкап):

    # cp -a /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.old

    Открываем этот файл и записываем в него (предварительно грохнув всё, что там есть)

    # cat /dev/null > /etc/dovecot/dovecot.conf

    Содержимое файла /etc/dovecot/dovecot.conf:

    protocols = imap imaps pop3 pop3s
    log_timestamp = «%Y-%m-%d %H:%M:%S »
    mail_location = maildir:/home/virtualmail/%d/%n/Maildir

    ssl_cert_file = /etc/ssl/certs/dovecot.pem
    ssl_key_file = /etc/ssl/private/dovecot.pem

    namespace private <
    separator = .
    prefix = INBOX.
    inbox = yes
    >

    protocol lda <
    log_path = /home/virtualmail/dovecot-deliver.log
    auth_socket_path = /var/run/dovecot/auth-master
    postmaster_address = root@litl-admin.ru
    mail_plugins = sieve
    global_script_path = /home/virtualmail/globalsieverc
    >

    protocol pop3 <
    pop3_u > >

    auth default <
    user = root

    passdb sql <
    args = /etc/dovecot/dovecot-sql.conf
    >

    userdb static <
    args = u > >

    socket listen <
    master <
    path = /var/run/dovecot/auth-master
    mode = 0600
    user = virtualmail
    >

    client <
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
    >
    >
    >

    Далее, редактируем файл /etc/dovecot/dovecot-sql.conf, предварительно сделал резервную копию.

    # cp -a /etc/dovecot/dovecot-sql.conf /etc/dovecot/dovecot-sql.conf.old

    driver = mysql
    connect = host=127.0.0.1 dbname=mail user=postfixadmin password=postfixpassword
    default_pass_scheme = CRYPT
    password_query = SELECT email as user, password FROM users WHERE email=’%u’;

    Защищаем конфиги dovecot-а (он будет пахать под учеткой виртуальной почты):

    # chgrp virtualmail /etc/dovecot/dovecot.conf
    # chmod g+r /etc/dovecot/dovecot.conf

    Для нормальной работы Postfix требуются почтовые алиасы (синонимы), редактируем файл /etc/aliases:

    postmaster: root
    root: root@litl-admin.ru

    После того, как сохранили все нужные алиасы, перестраиваем файл алиасов так:

    Ну и рестартнем MTA и все сопутствующие сервисы:

    # service postfix restart
    # service saslauthd restart
    # service dovecot restart

    Все логи можно смотреть в /var/log/mail.log, предварительно очистим, чтобы не мельтешили лишние записи:

    # cat /dev/null > /var/log/mail.log

    Вам так же понравится:

    Comments:

    У нас сервер на Debian 7, используется dovecot и postfix. Скажите, пожалуйста, где в этом случае стоит искать логи по всей отправляемой через функцию php mail почте?

    Подозреваю, что /var/log/maillog, /var/log/mail.log
    Посмотрите конфиги сислога, может переопределено в другой файл

    Спасибо за статью

    Столкнулся с ситуацией подмены адресата. Когда письма отсылаются на доменную почту сайта(формируются уведомления о заказах), то вместо info@somesite.ru письма уходят на virtuser_501@testrelease.ispsystem.net. Виной всему видимо прописанные строки в настройках main.cf postfix:

    Остается только вопрос почему именно на ящик virtuser_501 домена testrelease.ispsystem.net, где это прописывается?

    sender_canonical_maps или smtp_generic_maps или иные алиасы настраивали?

    Нет, не настраивал, как было так и есть. Если заменить значения myhostname и mydomain в конфигурационном файле, может дальше и лезть не надо будет, и почта будет отправляться без подмены конечного адресата?

    Ну смотрите, myhostname – как правило имя текущего хоста, mydomain соответственно домен. Чему равно myorigin? Может полный конфиг скините куда-нибудь на pastebin?

    Спасибо. Вот main.cfhttp://pastebin.com/raw/idSxFmL4
    Нашёл файл etc/mail/virtusertable, в котором была запись вида info@somesite.ru virtuser_501
    затёр её, сохранил файл, но в логах всё равно пишется что пересылается абоненту virtuser_501@somesite.ru. Надо etc/mail/virtusertable.db обновить? Как?

    Попробую с новой строки, а то все уже и уже

    Обновил virtusertable.db.
    Теперь новая ситуация Попробовал отправить письмо на info@somesite.ru с обычного yandex-го ящика – в логах появляется такое:
    [QUOTE]
    May 17 17:56:33 server1 postfix/smtpd[19508]: NOQUEUE: reject: RCPT from forward9p.cmail.yandex.net[87.250.241.194]: 550 5.1.1 : Recipient address rejected: User unknown in local recipient table; from= to= proto=ESMTP helo=
    [/QUOTE]
    Периодически также мелькает unknown user: “info”
    Как можно создать этого неизвестного юзера в локальной таблице реципиентов?

    Вот для этого виртюзертабле и был создан. Можно пользователей хранить в базе, в файле. Как настроено.

    Спасибо. Исправил. Теперь письма на info@somesite.ru отправляются, по крайней мере в логах такое
    May 18 12:51:38 f postfix/local[10672]: 33D173A24537: to=, relay=local, delay=0.97, delays=0.93/0/0/0.04, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail)
    и ответных сообщений о недоставке не приходит. Но почему-то писем не видно в интерфейсе SquirellMail. Я так понимаю, что письма должен доставлять procmail, но почему-то нет файла его настроек, файла etc/procmailrc. Видимо из-за этого письма не видны во входящих SquirellMail. Как поступить в этой ситуации?

    Вы знаете, письма в файле var/mail/info есть, видимо squirellmail неправильно настроен. С чего бы начать проверки?

    Попробовать получить почту локально через pop/pop3 команды прямо с сервера. Аутентифицироваться, посмотреть письма. Быть может параметры аутентификации (логин-пароль) неверны или незаданы. Так просто в логах должно отразиться на каком шаге происходит отказ. Либо в почтовом клиенте включить расширенное логирование (в Вашем – не знаю где, в TheBat в настройках ящика) и попробовать забрать почту. Потом посмотреть лог-файл.


    Хостер поменял почтовый клиент на RoundCube, я пересоздал ящик info@somesite.ru через ISP панель с перенаправлением писем на резервный_ящик@bk.ru.

    Если с внешнего личного мэиловского ящика(customer@inbox.ru) писать на доменную почту сайта(info@somesite.ru), то письма приходят в резервный_ящик@bk.ru, а значит и на info@somesite.ru.

    Попробовал оформить заказ с сайта – уведомления по прежнему приходят только на ящик заказчика(в логе это customer@inbox.ru), но не на info@somesite.ru и резервный_ящик@bk.ru.

    Вот какой почтовый лог генерит один заказ на сайте:
    [SPOILER][QUOTE]
    May 21 09:02:33 f postfix/pickup[23370]: 985DC3A2484D: u > May 21 09:02:33 f postfix/cleanup[24768]: 985DC3A2484D: message- > May 21 09:02:36 f postfix/qmgr[21364]: 985DC3A2484D: from=, size=1322, nrcpt=1 (queue active)
    May 21 09:02:36 f postfix/pickup[23370]: 2F0B03A25195: u > May 21 09:02:36 f postfix/cleanup[24782]: 2F4283A25197: message- > May 21 09:02:36 f postfix/cleanup[24716]: 2F0B03A25195: message- > May 21 09:02:36 f postfix/qmgr[21364]: 2F4283A25197: from=, size=1459, nrcpt=1 (queue active)
    May 21 09:02:36 f postfix/local[24772]: 985DC3A2484D: to=, orig_to=, relay=local, delay=2.6, delays=2.6/0/0/0.04, dsn=2.0.0, status=sent (forwarded as 2F4283A25197)
    May 21 09:02:36 f postfix/qmgr[21364]: 985DC3A2484D: removed
    May 21 09:02:36 f postfix/qmgr[21364]: 2F0B03A25195: from=, size=1421, nrcpt=1 (queue active)
    May 21 09:02:36 f postfix/smtp[24835]: 2F4283A25197: to=, orig_to=, relay=mxs.mail.ru[217.69.139.150]:25, delay=0.56, delays=0.04/0.07/0.19/0.27, dsn=5.7.1, status=bounced (host mxs.mail.ru[217.69.139.150] said: 550 5.7.1 This message was not accepted due to domain owner DMARC policy (RFC 7489) [url]https://help.mail.ru/mail-help/postmaster/dmarc[/url] (in reply to end of DATA command))
    May 21 09:02:36 f postfix/cleanup[24768]: C15CA3A2484D: message- > May 21 09:02:36 f postfix/qmgr[21364]: C15CA3A2484D: from=, size=3653, nrcpt=1 (queue active)
    May 21 09:02:36 f postfix/bounce[24781]: 2F4283A25197: sender non-delivery notification: C15CA3A2484D
    May 21 09:02:36 f postfix/qmgr[21364]: 2F4283A25197: removed
    May 21 09:02:38 f postfix/smtp[24835]: C15CA3A2484D: to=, relay=mxs.mail.ru[94.100.180.150]:25, delay=1.5, delays=0.03/0/0.34/1.2, dsn=2.0.0, status=sent (250 OK > May 21 09:02:38 f postfix/qmgr[21364]: C15CA3A2484D: removed
    May 21 09:02:39 f postfix/smtp[24836]: 2F0B03A25195: to=, relay=mxs.mail.ru[94.100.180.150]:25, delay=5.9, delays=2.7/0.02/0.58/2.7, dsn=2.0.0, status=sent (250 OK > May 21 09:02:39 f postfix/qmgr[21364]: 2F0B03A25195: removed
    [/QUOTE][/SPOILER]
    Интересует ответ серверов mail.ru
    status=bounced (host mxs.mail.ru[217.69.139.150] said: 550 5.7.1 This message was not accepted due to domain owner DMARC policy (RFC 7489) [url]https://help.mail.ru/mail-help/postmaster/dmarc[/url] (in reply to end of DATA command)), когда в параметре from значится customer@inbox.ru, а в to и orig_to соответственно резервный_ящик@bk.ru и info@somesite.ru.
    Такой ответ возвращается из-за того, что программа сайта пытается послать письмо от имени стороннего почтового ящика customer@inbox.ru, а не от info@somesite.ru?

    Такое чувство, что некорректно заполняются заголовки, а сервер майла их за это отфутболивает, так как письма с подобной схемой могут использоваться для рассылки спама. Насколько критично использовать свой почтовик? Может перенести всё на почту для домена от, например, яндекса? У меня к ним нареканий нет, зато головняков с настройкой стало 0.

    Configure SPF and DKIM With Postfix on Debian 9

    Updated Thursday, October 31, 2020 by Linode Contributed by Linode

    This guide will instruct you on how to set up SPF and DKIM with Postfix.

    SPF (Sender Policy Framework) is a system that identifies to mail servers what hosts are allowed to send email for a given domain. Setting up SPF helps to prevent your email from being classified as spam.

    DKIM (DomainKeys Identified Mail) is a system that lets your official mail servers add a signature to headers of outgoing email and identifies your domain’s public key so other mail servers can verify the signature. As with SPF, DKIM helps keep your mail from being considered spam. It also lets mail servers detect when your mail has been tampered with in transit.

    DMARC (Domain Message Authentication, Reporting & Conformance) allows you to advertise to mail servers what your domain’s policies are regarding mail that fails SPF and/or DKIM validations. It additionally allows you to request reports on failed messages from receiving mail servers.

    The DNS instructions for setting up SPF, DKIM and DMARC are generic. The instructions for configuring the SPF policy agent and OpenDKIM into Postfix should work on any distribution after making respective code adjustments for the package tool, and identifying the exact path to the Unix socket file.

    You must already have Postfix installed, configured and working. Refer to the Linode Postfix Guides for assistance.

    Publishing an SPF DNS record without having the SPF policy agent configured within Postfix is safe; however, publishing DKIM DNS records without having OpenDKIM working correctly within Postfix can result in your email being discarded by the recipient’s email server.

    Install DKIM, SPF and Postfix

    Install the four required packages:

    Add user postfix to the opendkim group so that Postfix can access OpenDKIM’s socket when it needs to:

    Set up SPF

    Add SPF records to DNS

    The value in an SPF DNS record will look something like the following examples. The full syntax is at the SPF record syntax page.

    Example 1 Allow mail from all hosts listed in the MX records for the domain:

    Example 2 Allow mail from a specific host:

    The v=spf1 tag is required and has to be the first tag.

    The last tag, -all , indicates that mail from your domain should only come from servers identified in the SPF string. Anything coming from any other source is forging your domain. An alternative is

    all , indicating the same thing but also indicating that mail servers should accept the message and flag it as forged instead of rejecting it outright. -all makes it harder for spammers to forge your domain successfully; it is the recommended setting.

    all reduces the chances of email getting lost because an incorrect mail server was used to send mail.

    all can be used if you don’t want to take chances.

    The tags between identify eligible servers from which email to your domain can originate.

    mx is a shorthand for all the hosts listed in MX records for your domain. If you’ve got a solitary mail server, mx is probably the best option. If you’ve got a backup mail server (a second MX record), using mx won’t cause any problems. Your backup mail server will be identified as an authorized source for email although it will probably never send any.

    The a tag lets you identify a specific host by name or IP address, letting you specify which hosts are authorized. You’d use a if you wanted to prevent the backup mail server from sending outgoing mail or if you wanted to identify hosts other than your own mail server that could send mail from your domain (e.g., putting your ISP’s outgoing mail servers in the list so they’d be recognized when you had to send mail through them).

    For now, we’re going to stick with the mx version. It’s simpler and correct for most basic configurations, including those that handle multiple domains. To add the record, go to your DNS management interface and add a record of type TXT for your domain itself (i.e., a blank hostname) containing this string:

    If you’re using Linode’s DNS Manager, go to the domain zone page for the selected domain and add a new TXT record. The screen will look something like this once you’ve got it filled out:

    If your DNS provider allows it (DNS Manager doesn’t), you should also add a record of type SPF, filling it in the same way as you did the TXT record.

    Add the SPF policy agent to Postfix

    The Python SPF policy agent adds SPF policy-checking to Postfix. The SPF record for the sender’s domain for incoming mail will be checked and, if it exists, mail will be handled accordingly. Perl has its own version, but it lacks the full capabilities of Python policy agent.

    If you are using SpamAssassin to filter spam, you may want to edit /etc/postfix-policyd-spf-python/policyd-spf.conf to change the HELO_reject and Mail_From_reject settings to False . This edit will cause the SPF policy agent to run its tests and add a message header with the results in it while not rejecting any messages. You may also want to make this change if you want to see the results of the checks but not actually apply them to mail processing. Otherwise, just go with the standard settings.

    Edit /etc/postfix/master.cf and add the following entry at the end:

    Open /etc/postfix/main.cf and add this entry to increase the Postfix policy agent timeout, which will prevent Postfix from aborting the agent if transactions run a bit slowly:

    Edit the smtpd_recipient_restrictions entry to add a check_policy_service entry:

    Make sure to add the check_policy_service entry after the reject_unauth_destination entry to avoid having your system become an open relay. If reject_unauth_destination is the last item in your restrictions list, add the comma after it and omit the comma at the end of the check_policy_service item above.

    You can check the operation of the policy agent by looking at raw headers on incoming email messages for the SPF results header. The header the policy agent adds to messages should look something like this:

    This header indicates a successful check against the SPF policy of the sending domain. If you changed the policy agent settings in Step 1 to not reject mail that fails the SPF check, you may see Fail results in this header. You won’t see this header on outgoing or local mail.

    The SPF policy agent also logs to /var/log/mail.log . In the mail.log file you’ll see messages like this from the policy agent:

    The first message is a check of the HELO command, in this case indicating that there wasn’t any SPF information matching the HELO (which is perfectly OK). The second message is the check against the envelope From address, and indicates the address passed the check and is coming from one of the outgoing mail servers the sender’s domain has said should be sending mail for that domain. There may be other statuses in the first field after the colon indicating failure, temporary or permanent errors and so on.

    Set up DKIM

    DKIM involves setting up the OpenDKIM package, hooking it into Postfix, and adding DNS records.

    Configure OpenDKIM

    The main OpenDKIM configuration file /etc/opendkim.conf needs to look like this:

    Edit /etc/opendkim.conf and replace it’s contents with the above.

    Ensure that file permissions are set correctly:

    Create the directories to hold OpenDKIM’s data files, assign ownership to the opendkim user, and restrict the file permissions:

    Create the signing table /etc/opendkim/signing.table . It needs to have one line per domain that you handle email for. Each line should look like this:

    Replace example.com with your domain and example with a short name for the domain. The first field is a pattern that matches e-mail addresses. The second field is a name for the key table entry that should be used to sign mail from that address. For simplicity’s sake, we’re going to set up one key for all addresses in a domain.

    Create the key table /etc/opendkim/key.table . It needs to have one line per short domain name in the signing table. Each line should look like this:

    Replace example with the example value you used for the domain in the signing table (make sure to catch the second occurrence at the end, where it’s followed by .private ). Replace example.com with your domain name and replace the YYYYMM with the current 4-digit year and 2-digit month (this is referred to as the selector). The first field connects the signing and key tables.

    The second field is broken down into 3 sections separated by colons.

    • The first section is the domain name for which the key is used.
    • The second section is a selector used when looking up key records in DNS.
    • The third section names the file containing the signing key for the domain.

    Create the trusted hosts file /etc/opendkim/trusted.hosts . Its contents need to be:

    When creating the file, change myhostname to the name of your server and replace example.com with your own domain name. We’re identifying the hosts that users will be submitting mail through and should have outgoing mail signed, which for basic configurations will be your own mail server.

    Make sure the ownership and permissions on /etc/opendkim and it’s contents are correct ( opendkim should own everything, the keys directory should only be accessible by the owner) by running the following commands:

    Generate keys for each domain:

    Replace YYYYMM with the current year and month as in the key table. This will give you two files, YYYYMM.private containing the key and YYYYMM.txt containing the TXT record you’ll need to set up DNS. Rename the files so they have names matching the third section of the second field of the key table for the domain:


    Repeat the commands in this step for every entry in the key table. The -b 2048 indicates the number of bits in the RSA key pair used for signing and verification. 1024 bits is the minimum, but with modern hardware 2048 bits is safer. (It’s possible 4096 bits will be required at some point.)

    Make sure the ownership, permissions and contents on /etc/opendkim are correct by running the following commands:

    Check that OpenDKIM starts correctly:

    You should not get error messages, but if you do, use:

    to get the status and untruncated error messages.

    Set up DNS

    As with SPF, DKIM uses TXT records to hold information about the signing key for each domain. Using YYYYMM as above, you need to make a TXT record for the host YYYYMM._domainkey for each domain you handle mail for. Its value can be found in the example.txt file for the domain. Those files look like this:

    The value inside the parentheses is what you want. Select and copy the entire region from (but not including) the double-quote before v=DKIM1 on up to (but not including) the final double-quote before the closing parentheses. Then edit out the double-quotes within the copied text and the whitespace between them. Also change h=rsa-sha256 to h=sha256 . From the above file the result would be:

    Paste that into the value for the TXT record.

    If you’re using Linode’s DNS manager, this is what the add TXT record screen will look like when you have it filled out:

    Repeat this for every domain you handle mail for, using the .txt file for that domain.

    Test your configuration

    Test the keys for correct signing and verification using the opendkim-testkey command:

    If everything is OK you shouldn’t get any output. If you want to see more information, add -vvv to the end of the command. That produces verbose debugging output. The last message should be “key OK”. Just before that you may see a “key not secure” message. That’s normal and doesn’t signal an error, it just means your domain isn’t set up for DNSSEC yet.

    Hook OpenDKIM into Postfix

    Create the OpenDKIM socket directory in Postfix’s work area and make sure it has the correct ownership:

    Set the correct socket for Postfix in the OpenDKIM defaults file /etc/default/opendkim :

    Uncomment the first SOCKET line and edit it so it matches the uncommented line in the above file. The path to the socket is different from the default because on Debian 9 the Postfix process that handles mail runs in a chroot jail and can’t access the normal location.

    Edit /etc/postfix/main.cf and add a section to activate processing of e-mail through the OpenDKIM daemon:

    You can put this anywhere in the file. The usual practice is to put it after the smtpd_recipient_restrictions entry. You’ll notice the path to the socket isn’t the same here as it was in the /etc/defaults/opendkim file. That’s because of Postfix’s chroot jail, the path here is the path within that restricted view of the filesystem instead of within the actual filesystem.

    Restart the OpenDKIM daemon so it sets up the correct socket for Postfix:

    Restart Postfix so it starts using OpenDKIM when processing mail:

    Verify that everything’s fully operational

    The easiest way to verify that everything’s working is to send a test e-mail to [email protected] using an email client configured to submit mail to the submission port on your mail server. It will analyze your message and mail you a report indicating whether your email was signed correctly or not. It also reports on a number of other things such as SPF configuration and SpamAssassin flagging of your domain. If there’s a problem, it’ll report what the problem was.

    Optional: Set up Author Domain Signing Practices (ADSP)

    As a final item, you can add an ADSP policy to your domain saying that all emails from your domain should be DKIM-signed. As usual, it’s done with a TXT record for host _adsp._domainkey in your domain with a value of dkim=all . If you’re using Linode’s DNS Manager, the screen for the new text record will look like this:

    You don’t need to set this up, but doing so makes it harder for anyone to forge email from your domains because recipient mail servers will see the lack of a DKIM signature and reject the message.

    Optional: Set up Domain Message Authentication, Reporting & Conformance (DMARC)

    The DMARC DNS record can be added to advise mail servers what you think they should do with emails claiming to be from your domain that fail validation with SPF and/or DKIM. DMARC also allows you to request reports about mail that fails to pass one or more validation check. DMARC should only be set up if you have SPF and DKIM set up and operating successfully. If you add the DMARC DNS record without having both SPF and DKIM in place, messages from your domain will fail validation which may cause them to be discarded or relegated to a spam folder.

    The DMARC record is a TXT record for host _dmarc in your domain containing the following recommended values:

    This requests mail servers to quarantine (do not discard, but separate from regular messages) any email that fails either SPF or DKIM checks. No reporting is requested. Very few mail servers implement the software to generate reports on failed messages, so it is often unnecessary to request them. If you do wish to request reports, the value would be similar to this example, added as a single string:

    Replace [email protected] in the mailto: URL with your own email or an email address you own dedicated to receiving reports (an address such as [email protected] ). This requests aggregated reports in XML showing how many messages fell into each combination of pass and fail results and the mail server addresses sending them. If you’re using Linode’s DNS Manager, the screen for the new text record will look like this:

    DMARC records have a number of available tags and options. These tags are used to control your authentication settings:

    • v specifies the protocol version, in this case DMARC1 .
    • p determines the policy for the root domain, such as “example.com.” The available options:
      • quarantine instructs that if an email fails validation, the recipient should set it aside for processing.
      • reject requests that the receiving mail server reject the emails that fail validation.
      • none requests that the receiver take no action if an email does not pass validation.
    • sp determines the policy for subdomains, such as “subdomain.example.com.” It takes the same arguments as the p tag.
    • adkim specifies the alignment mode for DKIM, which determines how strictly DKIM records are validated. The available options are:
      • r relaxed alignment mode, DKIM authentication is less strictly enforced.
      • s strict alignment mode. Only an exact match with the DKIM entry for the root domain will be seen as validated.
    • aspf determines the alignment mode for SPF verification. It takes the same arguments as adkim .

    If you wish to receive authentication failure reports, DMARC provides a number of configuration options. You can use the following tags to customize the formatting of your reports, as well as the criteria for report creation.

    • rua specifies the email address that will receive aggregate reports. This uses the mailto:[email protected] syntax, and accepts multiple addresses separated by commas. Aggregate reports are usually generated once per day.
    • ruf specifies the email address that will receive detailed authentication failure reports. This takes the same arguments as rua . With this option, each authentication failure would result in a separate report.
    • fo allows you to specify which failed authentication methods will be reported. One or more of the following options can be used:
      • 0 will request a report if all authentication methods fail. For example, if an SPF check were to fail but DKIM authentication was successful, a report would not be sent.
      • 1 requests a report if any authentication check fails.
      • d requests a report if a DKIM check fails.
      • s requests a report if an SPF check fails.
    • rf determines the format used for authentication failure reports. Available options:
      • afrf uses the Abuse Report format as defined by RFC 5965.
      • iodef uses the Incident Object Description Exchange format as defined by RFC 5070.

    Key rotation

    The reason the YYYYMM format is used for the selector is that best practice calls for changing the DKIM signing keys every so often (monthly is recommended, and no longer than every 6 months). To do that without disrupting messages in transit, you generate the new keys using a new selector. The process is:

    Generate new keys as in step 8 of Configure OpenDKIM. Do this in a scratch directory, not directly in /etc/opendkim/keys . Use the current year and month for the YYYYMM selector value, so it’s different from the selector currently in use.

    Use the newly-generated .txt files to add the new keys to DNS as in the DKIM Set Up DNS section, using the new YYYYMM selector in the host names. Don’t remove or alter the existing DKIM TXT records. Once this is done, verify the new key data using the following command (replacing example.com, example and YYYYMM with the appropriate values):

    Add the -vvv switch to get debugging output if you need it to diagnose any problems. Correct any problems before proceeding, beginning to use the new private key file and selector when opendkim-testkey doesn’t indicate a successful verification will cause problems with your email including non-receipt of messages.

    Stop Postfix and OpenDKIM with systemctl stop postfix opendkim so that they won’t be processing mail while you’re changing out keys.

    Copy the newly-generated .private files into place and make sure their ownership and permissions are correct by running these commands from the directory in which you generated the key files:

    Use the opendkim-testkey command as described above to ensure that your new record is propagated before you continue.

    Edit /etc/opendkim/key.table and change the old YYYYMM values to the new selector, reflecting the current year and month. Save the file.

    Restart OpenDKIM and Postfix by:

    Make sure they both start without any errors.

    After a couple of weeks, all email in transit should either have been delivered or bounced and the old DKIM key information in DNS won’t be needed anymore. Delete the old YYYYMM._domainkey TXT records in each of your domains, leaving just the newest ones (most recent year and month). Don’t worry if you forget and leave the old keys around longer than planned. There’s no security issue. Removing the obsolete records is more a matter of keeping things neat and tidy than anything else.

    More Information

    You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

    • Sender Policy Framework
    • DomainKeys Identified Mail
    • DMARC
    • OpenDKIM
    • The Sender Policy Framework and DomainKeys Identified Mail Wikipedia pages should not be considered authoritative but do provide helpful discussion and additional references.
    • DMARC Record Assistant provides a web form to generate a DMARC record for you based on your selections.


    Join our Community

    This guide is published under a CC BY-ND 4.0 license.

    FOR SKILL

    Системное администрирование

    Postfix SPF DKIM DMARC

    Для того, чтобы снизить риск попадания исходящей почты в спам, используется популярная связка SPF, DKIM и DMARC. Данные технологии направлены на борьбу с поддельными почтовыми сообщениями. Рассмотрим практическую реализацию этих технологий на почтовом сервере, сконфигурированном в статье Postfix Dovecot LDAP.
    Для лучшего понимания, обратимся к примеру отправки почтового сообщения через утилиту telnet.

    Все, что находится до команды DATA, является конвертом сообщения. С этой информацией работает SPF. То, что находится после команды DATA, является заголовком сообщения, с этой информацией работает DKIM. DMARC является результирующей политикой, определяющей дальнейшую судьбу сообщения, опираясь на результаты SPF и DKIM проверок. Результаты SPF, DKIM и DMARC проверок записываются в заголовок сообщения, и в дальнейшем могут быть использованы антиспам фильтрами.

    Установка и настройка postfix-policyd-spf-python

    Для того, чтобы Postfix мог проводить SPF проверки для входящей почты нужно установить пакет postfix-policyd-spf-python

    В конец файла master.cf нужно добавить следующие строки

    Добавим поддержку postfix-policyd-spf-python в Postfix

    Здесь важна последовательность. Параметр check_policy_service unix:private/policyd-spf активирует SPF проверку в Postfix. Он должен быть последним в списке ограничении smtpd_relay_restrictions. Параметр policyd-spf_time_limit = 3600 может находится в любом месте, он определяет временной предел проверки сообщения.

    Откроем конфигурационный файл postfix-policyd-spf-python и добавим в конец это файла следующие строки

    Параметр Header_Type указывает метод документирования результатов SPF проверки в проверяемых сообщениях. По умолчанию используется метод SPF. Смена метода SPF на AR используется для совместимости с OpenDMARC. Параметр Authserv_Id определяет имя идентификатора, которое используется при создании поля результатов проверки в заголовке сообщения. Обычно в качестве идентификатора указывается полное доменное имя сервера, на котором производится проверка. Более подробное описание всех параметров можно найти на странице Ubuntu manuals. Детальное описание настройки SPF изложено в статье Postfix настройка SPF.

    Теперь Postfix будет производить SPF проверку для всех входящих писем. Осталось добавить SPF запись для домена 4skill.ru. Перейдем в консоль своего DNS провайдера и добавим туда запись типа TXT для домена 4skill.ru.

    В начале указывается версия SPF записи (v=spf1), затем разрешения. В данном случае осуществлять отправку почты от имени домена 4skill.ru могут хосты, указанные в MX записи для данного домена (mx). Почта от иных хостов будет принята с пометкой о неудачной проверке(∼all). Более подробное описание синтаксиса и примеры SPF записей можно найти на странице SPF Record Syntax, или в начале статьи Postfix настройка SPF.

    Установка и настройка OpenDKIM

    Для того, чтобы Postfix мог проводить DKIM проверки для входящей почты, нужно установить пакеты OpenDKIM и OpenDKIM-Tools. Последний нужен для генерации ключей.

    После установки данных пакетов, заменим оригинальный конфигурационный файл OpenDKIM на следующий

    • AutoRestart — автоматический перезапуск сервиса в случае падения.
    • AutoRestartRate — допустимая частота падений сервиса. В данном случае не более 10 раз за 1 час.
    • Canonicalization — канонизация для заголовка/тела сообщения. Подробнее об это тут.
    • ExternalIgnoreList — список внешних хостов, которые могут производить пересылку почты от имени подписываемого домена без аутентификации.
    • InternalHosts — список внутренних хостов, чья исходящая почта не должна проверяться, но должна быть подписана.
    • KeyTable — список ключей, используемых для подписи.
    • SigningTable — список доменов, сопряженных с ключами из KeyTable.
    • On-BadSignature — что делать с письмом в случае неудачной проверки. Возможны варианты:
      ∘ accept — пропустить(по умолчанию);
      ∘ discard — отбросить сообщение без уведомления;
      ∘ quarantine — поместить сообщение в спам;
      ∘ reject — отбросить сообщение;
      ∘ tempfail — выдать сообщение об ошибке.
    • ReportAddress — адрес, от имени которого будет происходить рассылка отчетов о неудачных проверках.
    • SendReports — включение рассылки отчетов о неудачных проверках.
    • SignHeaders — набор полей заголовка сообщения, которые будут включены в подпись.
    • Syslog — запись логов в syslog.
    • SyslogSuccess — включение в лог информации об успешных подписях и проверках.
    • LogWhy — включение более детального логирования.
    • UMask — маска прав для Socet файла.

    Подробное описание всех параметров можно найти на странице opendkim.conf.

    Создадим каталок для хранения ключей

    Добавим ключи для домена 4skill.ru

    Ключ -D определяет каталог для записи ключей. Ключ -d указывает название домена. Ключ -s указывает название селектора. Селектор может быть произвольным. Обычно селектор отражает название сервиса, дату создания ключа, или битность ключа. В данном случае это название сервиса.

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

    Открытый ключ находится в файле с расширением .txt

    Добавим его на DNS сервер своего провайдера в виде TXT записи

    Создадим файл, определяющий от кого подписывать почту

    Даже если явно не указывать ::1 или 127.0.0.1, почта сформированная почтовыми клиентами пользователей, прошедших аутентификацию на сервере будет подписана. Явное указание адреса петлевого интерфейса дает возможность подписи почты, сформированной утилитой telnet на почтовом сервере(# telnet localhost 25). На практике в данный файл записываются адреса серверов, использующих Postfix в качестве сервера пересылки(relay), с целью подписи транзитных сообщений.

    Создадим файл, определяющий список закрытых ключей

    Каждый ключ прописывается отдельной строкой и имеет формат

    Создадим файл, сопоставляющий закрытый ключ с именем домена

    Формат записи следующий

    Укажем SOCKET для подключения к OpenDKIM

    Укажем Postfix как подключаться к OpenDKIM. Для этого добавим к конец main.cf следующие строки

    Более детальная настройка OpenDKIM описана в статье Postfix OpenDKIM.

    Установка и настройка OpenDMARC

    Для того, чтобы Postfix мог проводить DMARC проверки для входящей почты, нужно установить пакет OpenDMARC

    Заменим оригинальный конфигурационный файл OpenDMARC на следующий

    • Authserv_Id — имя идентификатора, которое используется при создании поля результатов проверки в заголовке сообщения. Обычно в качестве идентификатора указывается полное доменное имя сервера, на котором производится проверка.
    • AutoRestart — автоматический перезапуск сервиса в случае падения.
    • AutoRestartRate — допустимая частота падений сервиса. В данном случае не более 10 раз за 1 час.
    • FailureReports — включение рассылки отчетов о неудачных проверках.
    • FailureReportsSentBy — адрес, от имени которого будет происходить рассылка отчетов о неудачных проверках.
    • HistoryFile — расположение файла, в который записывается информация, используемая для создания сводных отчетов.
    • IgnoreHosts — расположение файла, содержащего список имен хостов, IP адресов и CIDR выражений, которые нужно исключить из проверки.
    • IgnoreAuthenticatedClients — исключение из проверки аутентифицированных клиентов.
    • RejectFailures — действие в случае неудачной проверки. Возможные варианты:
      ∘ yes — отклонить письмо;
      ∘ no — пропустить письмо и добавить в заголовок сообщения поле с результатами проверки (поведение по умолчанию).
    • Syslog — запись логов в syslog.
    • UMask — маска прав для Socet файла.

    Подробное описание всех параметров можно найти на странице opendmarc.conf.

    Укажем SOCKET для подключения к OpenDMARC, для этого добавим следующую строку в файл /etc/default/opendmarc

    Укажем Postfix как подключаться к OpenDMARC. Для этого отредактируем файл /etc/postfix/main.cf

    Заменим строку (сочетание клавиш Alt+R)

    Здесь важна последовательность. В начале указывается SOCET для подключения к OpenDKIM, затем к OpenDMARC.

    Перезапустим службу OpenDMARC

    Перезапустим службу Postfix

    Еще одна полезная функция OpenDMARC это рассылка сводных отчетов. Сводный отчет содержит в себе статистику принятых писем от определенных доменов, с процентным соотношением удачных и неудачных проверок SPF, DKIM и DMARC. Изначально статистика по входящей почте записывается в файл, определенный параметром HistoryFile. Затем скриптом opendmarc-import статистика импортируется в базу данных MySQL. Далее используется скрипт opendmarc-reports, который достает статистику из базу данных MySQL, формирует письмо с прикрепленным отчетом и осуществляет отправку письма. Заключительным этапом является запуск скрипта opendmarc-expire, который очищает базу данных MySQL от устаревших записей.

    Установка и настройка MySQL

    Для установки MySQL выполним команду

    В процессе установки появится окно с запросом указания пароля для пользователя root. Это не системный пользователь Linux, а одноименный корневой администратор базы данных MySQL. На данном этапе можно ничего не указывать и оставить поле пустым, так как в дальнейшем пароль будет определен конфигурационным скриптом для настройки MySQL

    После установки базы данных MySQL, нужно запустить конфигурационный скрипт mysql_secure_installation

    В начале предлагается использовать плагин проверки сложности пароля. Далее указывается пароль для пользователя root базы данных MySQL. Затем предлагается удалить анонимного пользователя. Потом предлагается выключить возможность удаленного подключения пользователя root к базе данных MySQL. После чего предлагается удалить тестовую базу. В заключении предлагается обновить таблицы прав пользователей.

    Далее нужно отключить режимы STRICT_TRANS_TABLES, NO_ZERO_IN_DATE и NO_ZERO_DATE. Если этого не сделать, то при импорте схемы OpenDMARC вылетит ошибка

    Для отключения выше указанных режимов нужно добавить в файл /etc/mysql/my.cnf следующие строки

    и перезапустить службу MySQL

    В файле схемы нужно раскоментировать две последние строки

    Первая команда создаст пользователя opendmarc с паролем changeme. Вторая команда назначит все доступные привилегии пользователю opendmarc на базу opendmarc.
    Теперь можно импортировать схему OpenDMARC в MySQL

    При выполнении данной команды нужно указать пароль пользователя root базы данных MySQL.

    Далее отредактируем скрипт /usr/sbin/opendmarc-reports

    Заменим строку (сочетание клавиш Alt+R)

    Данная замена нужна для предотвращения ошибки #134.

    Далее нужно создать связующий скрипт

    Сделаем скрипт исполняемым

    Идея скрипта взята с сайта njae.me.uk. Скрипт будет выполняться раз в сутки.

    Заключительным этапом будет добавление DMARC записи для домена 4skill.ru. Для этого в DNS оснастке своего провайдера нужно добавить TXT запись следующего вида

    • v — версия записи.
    • p — политика, может иметь значения:
      ∘ none — не принимать никаких действий;
      ∘ quarantine — отправить сообщение в спам;
      ∘ reject — не принимать сообщение.
    • rua — адрес для получения сводных отчетов.
    • ruf — адрес для получения отчетов о неудачных проверках.

    Описание всех доступных параметров DMARC записи и примеры можно найти на странице help.mail.ru.

    В первое время лучше использоваться политику none, чтобы исключить потерю легитимной исходящей почты и изучить сводные отчеты DMARC, полученные от других почтовых систем. Далее можно изменить политику на более агрессивную, либо оставить none, в случае использования антиспам фильтров. Как правило современные антиспам системы используют SPF, DKIM и DMARC заголовки в своих проверках, что обеспечивает высокую вероятность попадания поддельной почты в спам. Сводный отчет представляет из себя файл с расширением .xml. Для его просмотра можно использовать XML to Human Converter.

    Чтобы убедиться что все вышло, и исходящая почта проходит SPF, DKIM и DMARC проверки, можно отправить тестовое письмо на сторонний почтовый сервер, поддерживающий данные типы проверок, и посмотреть на нем оригинал письма. На примере gmail.com это выглядит следующим образом, нужно открыть отправленное письмо, и в правой части экрана нажать на кнопку, изображенную на картинке ниже

    Далее из всплывающего меню выбрать «Показать оригинал». В верхней части открывшегося окна буду представлены результаты проверок

    Докручиваем DKIM к POSTFIX и DOVECOT

    Докручиваем DKIM к POSTFIX и DOVECOT

    DKIM подпишет цифровой подписью письмо
    Добавит заголовки проверенного сервера — отправителя
    Поможет не попасть в черные списки спамеров

    ####### Установка и настройка DNS

    cd /usr/ports/dns/bind912/ && make install clean && rehash

    echo ‘named_enable=»YES»‘ >> /etc/rc.conf

    /usr/local/etc/namedb/named.conf

    /usr/local/etc/namedb/master/domain.local

    /etc/resolv.conf
    search domain.local
    nameserver 10.0.2.5

    ####### Установка и настройка opendkim

    pkg install opendkim
    или:
    cd /usr/ports/mail/opendkim && make install clean

    mkdir /usr/local/etc/opendkim
    opendkim-genkey -D /usr/local/etc/opendkim/ —domain domain.local —selector selector
    где:
    domain.local — домен, с которого будет отправляться почта
    selector — строковый идентификатор, может быть любым

    ls -l /usr/local/etc/opendkim/
    total 8
    -rw——- 1 root wheel 887 Sep 12 14:45 selector.private
    -rw——- 1 root wheel 318 Sep 12 14:45 selector.txt
    где:
    selector.private — закрытый ключ
    selector.txttxt запись для DNS

    pw useradd opendkim -m -s /usr/sbin/nologin -w no
    chown opendkim:opendkim /usr/local/etc/opendkim/selector.private
    chmod 700 /usr/local/etc/opendkim/*

    # Настройки в DNS для OpenDkim

    cat /usr/local/etc/opendkim/selector.txt
    selector._domainkey IN TXT ( «v=DKIM1; k=rsa; »
    «p=MIGfMA0GCSqGS. Ib3DQEBAQUAAIDAQAB» )
    ; —— DKIM key selector for domain.local
    где:
    selector — название селектора
    MIGfMA0GCSqGS . Ib3DQEBAQUAAIDAQAB — сокращена запись

    Итого имеем запись:
    selector._domainkey IN TXT «v=DKIM1; k=rsa; p=MIGfMA0GCSqGS . .Ib3DQEBAQUAAIDAQAB»

    Добавляем эту строку в файл:
    /usr/local/etc/namedb/master/domain.local

    Проверяем:
    dig -t txt selector._domainkey.domain.local
    ;; ANSWER SECTION:
    selector._domainkey.domain.local. 604800 IN TXT «v=DKIM1; k=rsa; p=MIGfMA0GC .

    ####### Настройка связки OpenDkim + Postfix

    /usr/local/etc/mail/opendkim.conf

    где:
    50055 — любой порт

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL