Июл 092012
 


На днях понадобилось мне реализовать валидную рассылку с трех доменов.
До этого не было опыта создания рассылок, пришлось начинать практически с нуля.
Будим рассматривать метод 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, оба варианта относятся к валидной, разрешенной почте.
После этих изменений появиться зеленый значок в письмах, что это письмо подписано.

  4 комментария to “Postfix + dkim валидная почта”

  1. Добрый день, спасибо за статейку.
    У нулевой опыт в реализации рассыльников, ваша статья помогла мне.
    Спасибо.

  2. Класс указал параметры simple/simple теперь у моих письмах маленькая, зеленая фентивлюшка весит.
    Теперь видно визуально, что письмо было подписанно dkim сертификатом.
    Спасибо за с татейку. Класс.

  3. […] сделать dkim подписи для каждого из почтовых доменом. Postfix dkim подпись Exim4 dkim […]

  4. Спасибо за статейку.

 Leave a Reply

(required)

(required)

39 Запросов к базе. 0,372 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.198.210.67