eth0.pro

Linux is working. The future is open.



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

Начиная с версии 4.70, Exim по умолчанию собирается с поддержкой DKIM, в версии 4.71 были исправлены недочеты, связанные с его работой. Реализация DKIM в Exim'е позволяет как верифицировать входящую почту (в ACL acl_smtp_dkim), так и подписывать отправляемые сообщения (в SMTP транспорте).

И так, создаем каталог где будем хранить ключи и выставляем права:

# mkdir /etc/exim4/dkim
# chown Debian-exim:Debian-exim /etc/exim4/dkim
# chmod 640 /etc/exim4/dkim

Создаем приватный ключ:

openssl genrsa -out /etc/exim4/dkim/exmple.ru.key 1024

И публичный ключ для него:

openssl rsa -in /etc/exim4/dkim/exmple.ru.key -out /etc/exim4/dkim/exmple.ru_pub.key -pubout

Смотрим получившийся файлик, его содержимое нам пригодится:

# cat /etc/exim4/dkim/mxgate.ru_pub.key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkKLEX1p9xWSLjSjJgRO0EGLoB
tyahqYf0h3mm4K+JZWP2+KQzFCKbbElvUHZhhqI1EQ0466EsPPwHxBZ9gtOgjsSy
LkS9THrC1fc1YlQcCS0iYFo+YpHakvCU9n4iUmD/VApEPwH+DLaot3xzpr35rJVT
/FJfnAXrFnrf1GpLcwIDAQAB
-----END PUBLIC KEY-----

А теперь нужно добавить RR (resource record) типа TXT в зону DNS. Ее будут "читать" удаленные сервера, чтобы проверить подпись. Значеним параметра p (p=...) является содержимое публичного ключа (без комментариев и переносов строк), который cat'нули выше. В данном примере mx1 - селектор. В конфигурации Exim'а это значение параметра dkim_selector (забегая вперед), который может быть раскрываемой строкой и выбираться в зависимости от каких-либо условий. Письма могут подписываться разными ключами, поэтому и проверять подпись нужно подходящим открытым (публичным) ключем.

mx1._domainkey TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkKLEX1p9xWSLjSjJgRO0EGLoBtyahqYf0h3mm4K+JZWP2+KQzFCKbbElvUHZhhqI1EQ0466EsPPwHxBZ9gtOgjsSyLkS9THrC1fc1YlQcCS0iYFo+YpHakvCU9n4iUmD/VApEPwH+DLaot3xzpr35rJVT/FJfnAXrFnrf1GpLcwIDAQAB"

Не забываем увеличить серийный номер зоны (и перезапустить bind, если вы используете его).

Проверяем все ли верно:

# host -t txt mx1._domainkey.exmple.ru
mx1._domainkey.exmple.ru descriptive text "k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkKLEX1p9xWSLjSjJgRO0EGLoBtyahqYf0h3mm4K+JZWP2+KQzFCKbbElvUHZhhqI1EQ0466EsPPwHxBZ9gtOgjsSyLkS9THrC1fc1YlQcCS0iYFo+YpHakvCU9n4iUmD/VApEPwH+DLaot3xzpr35rJVT/FJfnAXrFnrf1GpLcwIDAQAB"

Теперь настраиваем Exim. Открываем конфиг и находим секцию с транспортом SMTP. Приводим ее к следующему виду:

remote_smtp:
	driver = smtp
	dkim_domain = example.ru
	dkim_selector = mx1
	dkim_private_key = /etc/exim4/dkim/exmple.ru.key

Не забываем, что строки dkim_ могут быть раскрываемыми и в них вы можете вложить свою логику.

P. S.: Домен example.ru выбран случайно исключительно для примера, всё написанное конкретно к нему никакого отношения не имеет!

29 янв 2013 г. | Теги: Exim