На днях понадобилось мне реализовать валидную рассылку с трех доменов.
До этого не было опыта создания рассылок, пришлось начинать практически с нуля.
Будим рассматривать метод rsa подписей с исправлением записи spf домена.
Дополнительный материал, FreeBSD postfix настройка dkim.
Дополнительный материал, FreeBSD exim настройка dkim.
Приступим, для начало нам надо выбрать систему, систему я выбрал на Debian Linux, а почтовый сервер postfix.
Как настраивать postfix я не буду рассказывать, это другая история.
Установим пакет.
# aptitude install dkim-filter
Создадим директорию для наших ключей.
# mkdir -p /etc/postfix/dkim/ # chmod 750 /etc/postfix/dkim/ # chgrp postfix /etc/postfix/dkim/
Перейдем в только что созданную директорию.
# cd /etc/postfix/dkim/
Теперь создадим для каждого из доменов ключи.
# dkim-genkey -d likeunix.ru -s like -r
-d указываем для какого домена делается ключ.
-s означает dkim-selector, на ваш выбор, но если много доменов, то название делайте схожее с доменом.
-r озночает, что ключ будет использоваться только для почты.
После создания ключа появиться два файла. ( like.private и like.txt )
like.private — Закрытый ключ.
like.txt — Открытый ключ.
Теперь в боле узнаваемый вид приведем наш ключ.
# mv like.private /etc/postfix/dkim/likeunix.ru.key
И так для каждого домена создаем.
Теперь мы должны отредактировать DNS запись.
PTR-запись (от англ. pointer – указатель) связывает IP хоста с его каноническим именем. Запрос в домене in-addr.arpa на IP хоста в обратной форме вернет имя данного хоста. Например, для IP адреса 91.227.16.12: запрос записи PTR выглядит так 12.16.227.91.in-addr.arpa вернет его каноническое имя likeunix.ru.
in-addr.arpa — специальная доменная зона, предназначенная для определения имени хоста по его IPv4-адресу, используя PTR-запись. Адрес хоста AAA.BBB.CCC.DDD транслируется в обратной нотации и превращается в DDD.CCC.BBB.AAA.in-addr.arpa. Благодаря иерархической модели управления именами появляется возможность делегировать управление зоной владельцу диапазона IP — адресов. Для этого в записях авторитативного DNS-сервера указывают, что за зону CCC.BBB.AAA.in-addr.arpa (то есть за сеть AAA.BBB.CCC/24) отвечает отдельный сервер.
Вообщем приведем запись ptr в нашем домене к такому виду.
12.16.227.91.in-addr.arpa IN PTR likeunix.ru
И так для каждого домена.
Далее будем редактировать spf запись.
Sender Policy Framework — система, позволяющая указывать IP-адреса, с которых разрешена отправка в DNS-записях домена.
В каждом из наших доменов укажим в этой записи ip или под сеть рассылника.
likeunix.ru IN TXT v=spf1 ip4:91.227.16.12 ~all
Разберем пример.
v=spf1 — версия SPF (первая);
~all — нейтральная реакция на всю остальную почту; здесь можно указать -all, что будет значить, что почта, не попадающая под эти правила, — спам.
ip4:91.227.16.12 — Ип адресс рассыльника.
Или указываем под сеть ip4:91.227.16.12/22
Повторюсь и для каждого из наших доменов.
Ну и теперь осталось нам добавить открытый ключ к домену.
Смотрим наш открытый ключ ( like.txt ).
# cat /etc/postfix/dkim/like.txt like._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSI.......DAQAB" ; ----- DKIM like for likeunix.ru
Разумеется полностью ключ я не выкладываю он большой просто.
Так вот его добавим к TXT зоне в днс нашего домена.
Если вы через вэб форму добавляете то ковычки не нужны, такого вида будет.
like._domainkey IN TXT v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSI.......DAQAB
И так каждый созданный сертификат для определенного домена.
Так теперь приступим к настройке dkim-filter.
# cat /etc/dkim-filter.conf | grep -v "#" Syslog yes # Запись сообщений в syslog UMask 002 # Права AutoRestart no # Не перезапускаться при ошибках Mode sv # Режим работы: подпись и проверка SubDomains yes # Подписывать сообщения из поддоменов # доменов, указанных в Domains Canonicalization relaxed/relaxed KeyList /etc/dkim.keylist # Файл с перечнем закрытых ключей Domain /etc/dkim.domains # Файл с перечнем доменов, для которых осуществляется # подписывание исходящих сообщений BodyLengths yes
В следующем файле укажим наши домены.
# cat /etc/dkim.domains likeunix.ru
В это файле укажим к каким доменам какие ключи
# cat /etc/dkim.keylist *likeunix.ru:likeunix.ru:/etc/postfix/dkim/likeunix.ru.key
Дальше мы объясним dkim-демону где ему ждать подключений.
# cat /etc/default/dkim-filter | grep -v "#" SOCKET="inet:8891@localhost"
Перезагрузим сервис.
# /etc/init.d/dkim-filter start
Вот уже и близеться конец наших действий.
отредактируем конфигурационный файл postfix
# nano /etc/postfix/main.cf milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Теперь перегрузим postfix
# /etc/init.d/postfix reload
В принципе и все.
Незабываем про spf запись в домене и TXT dkim сертификата для домена.
После проделанного пройдет примерно сутки, что бы домены успели обновить наши действия.
Теперь можно и проверить наши действия.
dig like._domainkey.likeunix.ru. txt
Мы должны увидеть открытый ключ к домену нашему.
Ну и на всякий сделаем тестовое письмо.
echo Тест | sendmail -finfo@likeunix.ru swo@mail.ru
И смотрим тело письма.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=likeunix.ru; s=likeunix.ru.ru.key; t=1341847316; bh=FGT5r654sQujYqfGGKJkfrGHnkLkjJhmYtDC55CTmk=; l=10; h=Message-Id:Date:From:To; b=BRfOwBZ8jbupr9z579nhtRLlMZrO0m456MsiRGouqv+eoji+BiW g64xbm7gCrNeUQM+c3BR2EZBUexuMLb8/2t4wNi/d9+VXubIbQ2P hneVjn8FAQJ2blQH8jaVe/6TAPTuT5pDT3hQ2amvJhS0vuzkNa5p RssRi9MTHRIdR5cE=
DKIM-Signature:
v=1;
— версия формата DKIM-подписи.
a=rsa-sha256;
— алгоритм шифрования и хэширования для обеспечения ЭЦП.
c=relaxed/relaxed;
— один из способов нормализации тела сообщения (описан в стандарте DKIM).
d=likeunix.ru;
— подтверждаемый домен.
s=likeunix.ru.ru.key
— селектор (идентификатор) для выбора нужного ключа шифрования (для ЭЦП) в пределах одного домена (d =).
t=1341847316
— очень важное поле: время простановки DKIM-подписи (полная дата с точностью до секунды); т.е. по сути — время, когда письмо было получено и обработно сервером для отправки получателю; в тех случаях, когда тэг t= не используется, время получения все равно контролируется при помощи подписывания первого кладжа «Received:».
bh=FGT5r6
— криптографическая свертка (хэш) нормализованного тела сообщения.
h=Message-Id:Date:From:To;
— список заголовочных полей данного сообщения, которые подписаны ЭЦП.
b=BRfOwBZ8j
— собственно, сама подпись всех данных
А вот почему я визуально не вижу что у письма присутствует dkim подпись так и не разобрался.
Разобрался с проблемой, на до просто в конфигурационном файле /etc/dkim-filter.conf изменить параметр Canonicalization relaxed/relaxed на Canonicalization simple/simple, оба варианта относятся к валидной, разрешенной почте.
После этих изменений появиться зеленый значок в письмах, что это письмо подписано.
Добрый день, спасибо за статейку.
У нулевой опыт в реализации рассыльников, ваша статья помогла мне.
Спасибо.
Класс указал параметры simple/simple теперь у моих письмах маленькая, зеленая фентивлюшка весит.
Теперь видно визуально, что письмо было подписанно dkim сертификатом.
Спасибо за с татейку. Класс.
[…] сделать dkim подписи для каждого из почтовых доменом. Postfix dkim подпись Exim4 dkim […]
Спасибо за статейку.