Настройка Postfix + DKIM / DomainKeys для подписания сообщений через DKIMproxy
Статья взята тут. Настраивал все по этой статье + еще немного нашел в инете.
Содержание
Предпосылки
С постоянно растущим объемом передаваемых спам, многие почтовые сервисы стали использовать более сложные способы проверки подлинности электронной почты. Помимо очевидного - контент - два широко используемых метода (возможно, с некоторыми вариациями), включают Sender Policy Framework (SPF) и DomainKeys Identified Mail (DKIM). Оба эти метода требуют использования DNS записи. SPF- список серверов которым разрешено отправлять почту для домена вводится в DNS. Основное внимание в этой статье будет уделено DKIM.
DKIM это процесс генерации криптографических хэш из электронной почты. Это выполняет две основные функции: во-первых, подпись обеспечивает достоверность, тем, что используется частный ключ, необходимый для генерации подписи. Поскольку закрытый ключ не опубликован, подписанная им почта обеспечивает степень уверенности, что сервер обладающий закрытым ключом одобрил сообщение (как правило, это означает, что опознанный пользователь отправил сообщение). Во-вторых, так как криптографический хэш зависит от содержания электронной почты, подпись подтверждает, что сообщение не было изменено между приемом и передачей серверов.
Есть несколько способов реализации DKIM и DomainKeys - один распространенный способ использует Milter для каждого алгоритма. Другим подходом является DKIMproxy, с подписанием модуль прослушивает указанный порт, а также отдельные сообщения электронной почты через прокси подписания модуля. DKIMproxy реализует оба DomainKeys и DKIM спецификации
Установка модулей PERL
DKIMproxy имеет ряд Perl зависимостей.
Запуск через CPAN:
Усли он не установлен, то устанавливаем
urpmi Perl-CPAN
Запускаем CPAN
perl -MCPAN -e shell install Mail::DKIM
(Зависимости включают: Crypt::OpenSSL::RSA, Digest::SHA, Mail::Address, MIME::Base64, Net::DNS)
install Net::Server install Error (может не потребоваться)
Установка
После установки зависимостей, загружаем DKIMproxy (текущая версия, на момент написания это 1.4.1).
# cd /usr/local/src # wget http://downloads.sourceforge.net/dkimproxy/dkimproxy-1.4.1.tar.gz # tar -xzvf dkimproxy-1.4.1.tar.gz # cd dkim* # ./configure --prefix=/usr/local/dkimproxy # make install
С помощью этих команд мы загрузили программное обеспечение, и установили его в в папку, указанную в параметре prefix.
Теперь создадим пользователя (dkim) для работы DKIMproxy. Нам не нужен каталог пользователя, а для дополнительной безопасности мы также заблокируем пароль (в идеале, мы запрещаем вход с паролем).
# useradd -M -s /bin/false dkim # passwd -l dkim
Для удаления пароля вообще (если он был установлен), выполните:
# passwd -d dkim
Вы также можете изменить shell после создания учетной записи пользователя, запустив:
# usermod -s /sbin/nologin dkim
Вы можете проверить пользователя и группы, запустив:
# id dkim
==Установка Init-Script запуска Затем мы устанавливаем скрипт инициализации. DKIMproxy поставляется с образцом сценария, но Вам, возможно, потребуется изменить некоторые пути. Следующие команды скопирует сценарий инициализации, сделают его исполняемым и добавляет его в автозапуск.
# cp /usr/loca/src/ dkimproxy-1.4.1/sample-dkim-init-script.sh /etc/init.d/dkimproxy # cd /etc/init.d # chmod +x dkimproxy # chkconfig --add dkimproxy
Некоторые переменные в сценарии инициализации, необходимо поправить:
- DKIMPROXYUSER (установлено на пользователя, созданного выше)
- DKIMPROXYGROUP (набор в группу пользователя, созданного выше)
- PIDDIR (Я установил /var/run/)
- DKIMPROXY_IN_CFG (путь к dkimproxy_in.conf, может не существовать, если не используется в / корректор скрипта)
- DKIMPROXY_OUT_CFG (путь к dkimproxy_out.conf, может не существовать, если не используется OUT / подписавшего скрипта)
В сценарий инициализации нет никаких опций, указывающих, используете ли вы IN, OUT, или оба сценария. Это определяется автоматически, на основе того, какие конфигурационные файлы существуют. Сценарий только включает фильтр(ы) с существующими конфигурационными файлами. Таким образом, не создавайте/переименовывайте файлы конфигурации для фильтров, которые вы не хотите.
Генерация RSA ключей
Ключи будем хранить в папке dkimproxy:
cd /usr/local/dkimproxy
Начнем с генерации закрытого ключа. Если вы будете использовать разные ключи для каждого домена (вероятно, хорошая идея), вы можете включить имя домена в имя файла. Кроме того, необходимо указать длину ключа (в битах) - обычно 512, 768 и 1024. Поскольку у некоторых регистраторов есть предел в 256 символов на DNS TXT записи, а закрытый ключ превышает 1024 бит, что может привести к тому, что открытый ключ будет превышать этот предел. UDP обычно имеет предел в 512 байт, который будет ограничивать применение ключей более 4096 бит. Кроме того, более длинные ключи требуют больше обработки электронной почты.
Вы можете проверить существующие ключа RSA, запустив:
#openssl rsa -in domain.priv.key -check
Вы можете найти информацию (например, длину ключа) из существующего ключа RSA, запустив:
#openssl rsa -in domain.priv.key -text -noout
Если вы еще не используете ключ, создать 1024-битный секретный ключ RSA:
#openssl genrsa -out domain.priv.key 1024
Теперь сгенерировать открытый ключ из секретного ключа - уточните имя секретного ключа в качестве входного, и желаемого файла в качестве выхода.
#openssl rsa -in domain.priv.key -pubout -out domain.pub.key
Установите права доступа и владельца ключей:
#chown dkim:dkim *.key #chmod 400 *.key
Настройка DKIMproxy-OUT
Для того, чтобы было легко настроить несколько доменов, мы будем использовать sender_map параметр. В связи с этим, мы можем удалить все доменные/подпись конкретных записей (domain, signature, keyfile, selector) из конфигурационного файла, но необходимо добавить путь к файлу sender_map.
Начинаем с копирования файла примера