Информация
На главную Главная

Мой t-cards.ru
Войти Войти
Зарегистрироваться Регистрация

Разное
Форум Форум
Вернуться Форумы на t-cards.ru> Hard"n"Soft
Логин
Пароль
Регистрация Участники Поиск >> FAQ


Сообщения в теме: "Exim + DKIM..."
09.03.2011 11:42
Admin

Регистрация: 05.10.2005
Проживание: Москва
Сообщения: 272
По умолчаниюExim + DKIM

Решил настроить DKIM на подпись исходящих почтовых сообщений.
Описание технологии тут - http://ru.wikipedia.org/wiki/DKIM
Вкратце - это подпись исходящего сообщение ЭЦП с неким закрытым "ключом домена", открытая часть которого хранится в DNS в текстовом параметре и по которому принимающая сторона может проверить подлинность сообщения, запросив из DNS открытый ключ для данного домена.
Exim поддерживает это начиная с версии 4.70.

Задача настройки сводится к следующим этапам:

1. Генерация пары ключей для домена (для одного домена может существовать несколько пар ключей, разделяемых по некоему понятию "селектор", в данном случае это не требуется, достаточно одного ключа и в качестве селектора выбрано название "mail")
2. Прописывание созданного открытого ключа в DNS для зоны нужного домена плюс еще несколько параметров.
3. Настройка подписывания непосредственно в Exim.

Итак, поэтапно:

1. Генерируем пару ключей для домена:

openssl genrsa -out t-cards.ru.priv.pem 1024
openssl rsa -in t-cards.ru.priv.pem -out t-cards.ru.pub.pem -pubout

Получаем в файлах t-cards.ru.priv.pem и t-cards.ru.pub.pem закрытый и открытый ключ соответственно.

2. Вытаскиваем из файла t-cards.ru.pub.pem его текстовое содержимое, удаляем заголовки, разрывы строк и прописываем в зону t-cards.ru следующее (перед точкой с запятой желательно поставить обратный слэш):

_domainkey TXT "t=y; o=~;"
mail._domainkey TXT "k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC09pwkYraJRpJ1yYWENegASxia
LsRDuntRmMll5MBykzl6RIQbrde1r2XHigU0j4kIRMemv9ap6a7nNuaCy1+D7m/7
hbvA3/xcczibBRVZ9kssKY2rC3J97iHSqZ+aYPrhoZbkeaDPqlgUbvXMAuFYWxAP
W2p1XyFzVsXVJpMM5QIDAQAB;"
_adsp._domainkey TXT "dkim=all"

где mail - это "селектор", p= - это как раз открытый ключ, а параметр dkim= нужен для указания проверяющей стороне, как реагировать не неподписанные сообщения, он может принимать 3 значения - all (все сообщения должны быть подписаны), discardable (разрешается отбивание неподписанного сообщения), unknown (аналогично отсутствию записи или любому другому параметру, разрешает неподписанные сообщения).

3. Далее настраиваем Exim. Выбираем транспорт, который отвечает за доставку сообщение на удаленные сервера (он имеет driver = smtp и в моем случае называется remote_smtp).

У меня локальные домены хранятся в mysql в таблице domains, так что можно эту таблицу использовать под хранение параметров подписей. Добавил туда 3 поля:

dkim_use TINYINT (0 или 1, использовать подпись или нет)
dkim_selector VARCHAR(255) ("селектор" ключа домена, по дефолту "mail")
dkim_key TEXT (текст закрытого ключа из файла t-cards.ru.priv.pem)

В транспорт добавляем параметры подписи, у меня получилось где-то так:

remote_smtp:
driver = smtp
dkim_domain = $sender_address_domain
dkim_selector = ${lookup mysql{SELECT dkim_selector FROM domains WHERE lower(domain) = lower('$sender_address_domain') AND dkim_use = 1}}
dkim_private_key = ${lookup mysql{SELECT dkim_key FROM domains WHERE lower(domain) = lower('$sender_address_domain') AND dkim_use = 1}}
dkim_strict = 0

Готово! Принимающие сервера смогу проверить подпись.
Из практики - DKIM юзает только gmail.com (других пока не наблюдал), когда большинство перейдет на DKIM, будет реальная защита от спама!
Да, и еще Exim может проверять подписи входящих сообщений и по результатам проверки можно делать те или иные действия, но пока в этом смысла не вижу, разве что поставить жесткую проверку на те домены, про которые заведомо известно, что они используют DKIM. Но об этом позже.

UPD: домены mail.ru тоже используют подпись, странно, что раньше не замечал, есть подозрение, что как только к ним начали приходить письма подписанные, они в ответ стали слать тоже подписанные. Есть с ними такой момент - на все их домены (mail.ru, bk.ru, list.ru, inbox.ru) идет подпись ключом домена mail.ru, надо иметь в виду это.