Есть технология, как DKIM (DomainKeys Identified Mail), позволяет письма подписывать ключами. Сервер получателя письма в ДНС берет информацию о ключе и сам ключ. После сверки информации из ДНС с заголовками письма, которое пытается поступить, можно судить об отправителе -- доверять ему или нет.
На сегодняшний день этот метод больше используется бесплатными почтовыми службами или крупными почтовыми серверами, которые частенько подставляют спамеры. Я не уверен вообще, что это кто-то будет использовать, но мало-ли.
Как подписывать свою почту при помощи DKIM на примере freebsd 7.0 и exim 4.72.
Создаем ключ для домена:
ns# openssl genrsa -out /usr/local/etc/exim/dkim/domain.ru.key 1024
Generating RSA private key, 1024 bit long modulus
..................................................................++++++
................++++++
e is 65537 (0x10001)
ns#
Устанавливаем права достуба к файлам и папкам:
chown mailnull:wheel /usr/local/etc/exim/dkim/
chmod u=rx,go= /usr/local/etc/exim/dkim/
Создаем публичный ключ, который будет предоставляться всем желающим для проверки исходящих писем.
ns# openssl rsa -in /usr/local/etc/exim/dkim/domain.ru.key -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFL0ZKBqNsCkcffWDyZyRDebsn
y+iImYiKe4uYNKmk7vuKjszPgP9NUMUY5yNDlU0mEv2uuOOCkm/derhzjM90WWmp
YrtoWXP5a1PWJYhzJk91YegkVQfu7ujUwaQHpGyg1pAze0FkjI8jGZ6rapSnqIo9
eGlErcbCxFNDq2knzwIDAQAB
-----END PUBLIC KEY-----
ns#
Копируем ключ и вставляем в ДНС зоне нашего домена domen.ru в поле ( Пример зоны ):
$ORIGIN .
$TTL 38400 ; 10 hours 40 minutes
domain.ru IN SOA ns.domain.ru. root.domain.ru. (
2012060400
10800
3600
604800
38400 )
domain.ru. IN NS ns.domain.ru.
domain.ru. IN NS ns.provider.ru.
domain.ru. IN MX 10 mail.domain.ru.
$ORIGIN domain.ru.
@ IN A 55.55.55.55
domain.ru. IN A 55.55.55.55
mail.domain.ru. IN A 55.55.55.55
ns.domain.ru. IN A 55.55.55.55
www.domain.ru. IN A 55.55.55.55
dkim._domainkey.domain.ru. IN TXT "k=rsa; t=s; p={MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFL0ZKBqNsCkcffWDyZyRDebsny+iImYiKe4uYNKmk7vuKjszPgP9NUMUY5yNDlU0mEv2uuOOCkm/derhzjM90WWmpYrtoWXP5a1PWJYhzJk91YegkVQfu7ujUwaQHpGyg1pAze0FkjI8jGZ6rapSnqIo9eGlErcbCxFNDq2knzwIDAQAB}"
domain.ru. IN TXT "v=spf1 a -all"
domain.ru. IN TXT "v=spf1 a mx ~all"
55.55.55.55.in-addr.arpa. 1D IN PTR domain.ru.
localhost. IN A 127.0.0.1
_domainkey.domain.ru. IN TXT "t=s; o=~;"
55.55.55.55.in-addr.arpa. 1D IN PTR mail.domain.ru.
Внимание: ключ должен располагаться одной строкой, без переносов и пробелов. Обновляем serial в зоне и обновляем зону. Проверяем, что получилось:
ns# host -t txt dkim._domainkey.domain.ru.
dkim._domainkey.domain.ru descriptive text "k=rsa\; t=s\; p={MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeRLdHO9rnmJQ2zpjy+pfRfzQ7eNFfsc/CzKhnho/43dkytYVqnksyiJB4wOH6S7zhLnMdoXqfJn5NA4G8oA4jtGXULKkB/K2xys6npJ9sBcTZWKKh+laaMMQgjMcs4ngoGXIzNFjwbTwD9KXHi0ZX6gS7mMgRfrBkrO2sA69o1wIDAQAB}"
ns#
ДНС настроен.
Первое слово, до _domainkey в ДНС-записи -- это будет наш dkim-selector. Его можно любой использовать и пользоваться для разных случаев разными селекторами и тем самым использовать кучу ключей.
Настройка exim! В configure указываем следующее:
acl_smtp_dkim = acl_check_dkim
## DKIM:
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /usr/local/etc/exim/dkim/${lc:${domain:$h_from:}}.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
######################################################################
# ACL DKIM #
######################################################################
acl_check_dkim:
warn log_message = Recipient verify DKIM $sender_address
dkim_status =
accept
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports
remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = dkim
dkim_strict = false
dkim_private_key = DKIM_PRIVATE_KEY
Перечитываем конфиг exim:
/usr/local/etc/rc.d/exim reload
Отправляем тестовое письмо так, чтобы оно уходило при помощи транспорта remote_smtp
X-AntiVirus: Checked by Dr.Web [version: 6.0.3.08040, engine: 6.0.300.01310, virus records: 3386342, updated: 4.06.2012]
Received: from mxfront7h.mail.yandex.net ([127.0.0.1])
by mxfront7h.mail.yandex.net with LMTP id hQYSwVH3
for <test@test.ru>; Mon, 4 Jun 2012 15:43:26 +0400
Received: from mail.domen.ru (mail.domen.ru [55.55.55.55])
by mxfront7h.mail.yandex.net (nwsmtp/Yandex) with ESMTP id hPv48rBP-hPvGC7X4;
Mon, 4 Jun 2012 15:43:25 +0400
X-Yandex-Front: mxfront7h.mail.yandex.net
X-Yandex-TimeMark: 1338810205
X-Yandex-Spam: 1
Authentication-Results: mxfront7h.mail.yandex.net; spf=pass (mxfront7h.mail.yandex.net: domain of domen.ru designates 55.55.55.55 as permitted sender) smtp.mail=test@domen.ru; dkim=pass header.i=@domen.ru
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=domen.ru; s=dkim;
h=Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:To:Message-ID:From:Date; bh=1OXq2NwUQP2sUEk0Tqswk/6kFfj3MuD5xBH+RUjmBjo=;
b=k8UU7ocgi5ydAfrvIt4qCcTMMynn0dT+ztQkoXfppR3g1q8U1MTLfq2Mxd+UJgCLIsqvD/Mf/YbU47aMZ+VeZ/EnHom5QA9zEBgpqtqCU3T16LgFVRXMRLStpXWIE1YCPzPHu13F0pXH5VZUGnTXRqg/ThFzlJTK3L/K1O7470E=;
Received: from [62.117.84.71] (helo=Prochor)
by mail.domen.ru with esmtpa (Exim 4.71 (FreeBSD))
(envelope-from <test@domen.ru>)
id 1SbViY-000ELd-SU
for test@test.ru; Mon, 04 Jun 2012 15:45:02 +0400
X-AntiVirus: Checked by Dr.Web [version: 6.0.3.08040, engine: 6.0.300.01310, virus records: 3386342, updated: 4.06.2012]
Date: Mon, 4 Jun 2012 15:41:22 +0400
From: =?windows-1251?B?z/Du9e7w7uIgzejq7uvg6Q==?= <test@domen.ru>
X-Priority: 3 (Normal)
Message-ID: <12610371961.20120604154122@domen.ru>
To: test@test.ru
Subject: 1541
MIME-Version: 1.0
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: quoted-printable
Return-Path: test@domen.ru
X-Yandex-Forward: efb10603ffffffe8fb0917b870c6edf3
Все работает.