Настройка postfix dkim ubuntu
Электронная почта является одним из старейших и ключевых элементов корпоратвиного ИТ-ландшафта абсолютно любой компании. Не смотря на растущие альтернативы в виде систем электронного документооборота, межведомственной связи и других share-площадок , до сих огромное количество данных, в том числе и конфиденциального характера пересылаются с помощью обычных электронных писем. Хотя, конечно, значимость e-mail серверов сегодня уже не та, что, к примеру, еще лет так 10 или 15 назад. Вспомним хотя бы эпидемию vbs-вируса Love Letter (I love you) или червя Melissa , распространявшихся в основном посредством рассылки вредоносных писем с зараженных машин. Да, и что говорить, почта до сих пор является одним и векторов для реализации таргетированных APT-атак у "плохих парней" и одним из пунктов чек-листа при проведении расширенного пен-теста у легитимного заказчика.
Сегодня в материалы мы рассматриваем вопросы усиление безопасности корпоративных почтовых серверов с помощью доступных подручных средств, т.к. DKIM, SPF, DMARC-записи, не требующих использования сторонних дорогостоящих коммерческих продуктов ИБ.
Для работы с DKIM нужно выполнение следующих пунктов
- Поддержка DKIM почтовым сервером
- Создание приватного и публичного ключа шифрования
- Занесение в DNS домена записей связанных с DKIM
Важно помнить, что SPF запись может быть только одна для одного домена. Хотя уже в рамках одной SPF может быть несколько записей. Для поддоменов же нужны свои записи. Да, да и никак иначе! Безопасность требует времени и усердия:)
Указанные выше фичи DKIM, SPF и DMARC однозначно помогут противостоять e-mail спуфингу и распространению malware. Однако, важно понимать, что это не гарантирует безопасность в случае взлома сервера, например путем угона админки или применения эксплойта. А так же если письма форвардятся через иные почтовые сервисы с сомнительной репутацией или с отсутствующими записями DKIM, SPF и DMARC.
SPF Policy Tester - онлайн-сервис проверки корректности spf-записи. Указываете почтовый адрес с которого хотите отправлять и ip-адрес почтового сервера. Если все хорошо, то внизу теста должна быть зеленная надпись PASS
Так же не стоит забывать о регистрации своего сервера в службах постмастера для публичных почтовых серверов (если вы конечно этим занимаетесь:) . Это позволит нам помимо получения статистики по рассылкам получить чуть больше доверия от этого почтового сервиса.
В качестве практической части мы рассмотрим конфигурирование выше описанных фич безопасности на примере двух наиболее популярных почтовых серверов - опенсорсоного Postfix на Debian (ну, или Ubuntu Server:) и проприетарного Microsoft Exchange Server 2013+. Предполагается, что почтовые сервера у вас уже инсталлированы и настроены под ваш домен поэтому рассматривать будем только сам процесс конфига фич на обезличенных данных.
1. Конфигурируем SPF,DKIM и DMARC на Postfix (Debian)
"+" - принимать корреспонденцию (Pass). Этот параметр установлен по умолчанию. То есть, если никаких параметров не установлено, то это "Pass"; "-" - Отклонить (Fail);
" - "мягкое" отклонение (SoftFail). Письмо будет принято, но будет помечено как СПАМ; "mx" - включает в себя все адреса серверов, указанные в MX-записях домена;
"include" - включает в себя хосты, разрешенные SPF-записью указанного домена; "ip4" - опция позволяет указать конкретный IP-адрес или сеть адресов; "a" - указываем поведение в случае получения письма от конкретного домена;
"all" - все остальные сервера, не перечисленные в SPF-записи.
А теперь используя выше описанную шпаргалку расшифруем то, что написано в нашей записи:
Вот в принципе и все!)) никаких плясок с бубном и сотен строк скриптового кода - только прописать правильно указанную строку и радоваться жизни:)
Обновление DNS записей обычно занимает некоторое время, в зависимости от вашего региона и загруженности серверов занимает это от 30 минут до 12 часов.
И так, что бы проверить корректность нашей записи идем на ресурс MxToolBox и вбиваем доменное имя, для которого вы прописали SPF. Жмем баттон SPF Record Lookup и смотрим
Для начала на почтовом сервере нам необходимо установить пакет opendkim:
Далее создадим директории, где будут храниться ключи для каждого домена (если ваш почтовый сервер обслуживает несколько доменов):
Содержимое файла mail.txt (для соответствующего домена) является публичным ключом, который надо разместить на DNS-сервере в TXT записи для того домена для которого он был создан.
Пример данной записи:mail._domainkey IN TXT "v=DKIM1;k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAdfmWEGERbLGARxEFI9Ibwx79tk1kMi36rFeAT4aLu4iI3ctPUWa7y0WcuMZGCBQMMutolT8IM9EGEHYT/rbKlhoeiA0r8qJZiIX/NkjkLIXzR+9h1i47dD5zCu4uEFWRHETJAERWGQaC9hSHCcCwzosSRwBpaxIMZuRGQIDAQAB"
Владельцем ключей обязательно! делаем opendkim (потому что иногда из-за этого бывают ошибки):chown opendkim:opendkim -R /etc/opendkim/keys
После этого создадим 3 необходимых файла конфигурации:
Содержимое файла /etc/opendkim/KeyTable (здесь все слова mail меняем на ваш селектор, в данном файле прописываются домены и пути к секретным ключам):
Пример файла /etc/opendkim/TrustedHosts (у вас будет свой!)
Ну, и конечно же, чуть настроим сам opendkim. Для этого внесем следующие настройки в конфигурационный файл /etc/opendkim.conf:
Canonicalization relaxed/simple SyslogSuccess yes KeyTable /etc/opendkim/KeyTable
Socket inet:8891@localhost SigningTable refile:/etc/opendkim/SigningTable ReportAddress root AutoRestart Yes
InternalHosts refile:/etc/opendkim/TrustedHosts AutoRestartRate 10/1h ExternalIgnoreList refile:/etc/opendkim/TrustedHosts PidFile /var/run/opendkim/opendkim.pid
AutoRestart: автоматический перезапуск в случае ошибки;
AutoRestartRate: определяет максимальное количество перезапусков в единицу времени, после чего фильтр останавливается. Например, значение 10/1h означает, что разрешено не более 10 автоматических перезапусков за 1 час, если значение будет превышено - автоперезапуск в случае ошибки будет отключен. UMask: предоставляет все права доступа группе пользователей, указанной в UserID и позволяет другим пользователям читать и выполнять файлы. В данном случае это позволяет создавать и изменять pid-файл. Syslog, SyslogSuccess, *LogWhy: эти параметры настраивают ведение логов с помощью syslog.
Так же обязательно пропишем в Postfix в main.cf вот эти строчки:
non_smtpd_milters = inet:localhost:8891 milter_default_action = accept
Если у вас уже используется milter (например, для SpamAssasin), тогда эти же строчки будут выглядеть так:
smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:8891
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:8891 milter_default_action = accept
1.4 Определим политику ADSP (Author Domain Signing Practices)
Для этого надо разместить на DNS-сервере в TXT записи для каждого домена для которого используется DKIM следующую строчку:_adsp._domainkey IN TXT "dkim=unknown"
unknown: значение по умолчанию (аналогично тому, что вышеуказанной DNS записи вообще нет). Данное значение говорит почтовым серверам (на которые вы будете отправлять письма) о том, что письма могут быть как с подписью DKIM, так и без подписи; all: говорит, что все письма будут подписаны;
discardable: говорит, что все письма будут подписаны, а если письмо не подписано или подпись не верна - то его следует удалить.
В конце 2011 года разработчики проекта dkim-milter прекратили его поддержку и разработку. К счастью, на замену проекта dkim-milter пришел OpenDKIM, с помощью которого добавить DKIM-подпись в письма так же просто.
tl;dr: в наше время без DKIM-подписей ну никак нельзяИнструкция по настройке связки Postfix и OpenDKIM
Для этого нам потребуется сам Postfix и пакеты OpenDKIM. Установим все необходимые компоненты с помощью вашего пакетного менеджера:
Теперь нам нужно получить ключи, которые мы будем использовать для подписи писем.
Ключи для подписи
Получим ключ для домена сервера и для селектора, равного имени сервера без домена, чтобы ничего не придумывать:
Файлам ключей обязательно нужно дать доступ на чтение для группы, в которой работает OpenDKIM, а сам postfix добавить в ту же группу, чтобы тот мог подписывать письма подключаясь к демону OpenDKIM через его сокет:
Где искать ключи?
В конфиг /etc/opendkim.conf допишем наши настройки:
Подробное описание всех директив ищите в документации.
Какими ключами подписывать?
Список имеющихся ключей укажем в файле /etc/opendkim/keytable в формате " название домен:селектор:/путь/до/ключа ". Если вы создавали ключи командой выше, то прописать ключ согласно FQDN сервера в этом файле можно так:
Ключей в этом файле может быть сколько угодно, для какого угодно числа доменов. Также ключи могут храниться в БД — подробней в документации.
Чью почту подписывать?
Теперь объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/opendkim/signingtable в формате " домен название-ключа ":
В других файлах, указанных в директивах ExternalIgnoreList и InternalHosts , содержится просто список хостов и/или IP-адресов каждый на новой строке, подписи писем для которых будут либо проигнорированы, либо добавлены. Если за почту у вас отвечает единственный сервер, то с ними ничего не нужно делать.
Настроим Postfix
Наконец, попросим Postfix отправлять все письма на подпись:
Если Postfix в chroot.
Если Postfix вы используете без chroot, то для настройки больше ничего не нужно делать. Иначе, что скорее всего, нужно объяснить OpenDKIM где ему следует создавать сокет и дать для всего подходящие права:
Готово!
Перезапускаем Postfix и OpenDKIM штатными средствами, отправляем тестовое письмо куда-нибудь на Яндекс, и наслаждаемся успешным результатом проверки подписи:
Не забываем добавить TXT запись и проверить, что она на месте:
Запретим письма без подписи
Если проверка прошла успешно, то стоит формально запретить другим серверам принимать письма с вашим доменом, но без подписи, добавив ADSP запись:
Теперь обо всем подробнее.
Настройка DKIM на Postfix
Если пока вы чувствуете себя неуверенно с DKIM, рекомендую прочитать статью Технология DKIM для почтового сервера.
Установка
С установкой на Debian все просто:
Переходим к настройке.
Ключи
mkdir - m 750 / etc / opendkim && chown opendkim : opendkim / etc / opendkimА теперь создаем ключи:
Выставим нужные права на файл закрытого ключа:
chown opendkim : opendkim / etc / opendkim / mail .privateМожно создавать записи.
Записи DNS
Чтобы не тратить время впустую, ожидая распространения DNS-записей, разумно добавить DKIM-запись уже сейчас, а потом спокойно заниматься настройкой. Напомню, что потребуется создать запись TXT. Её вы можете найти в файле /etc/opendkim/mail.txt и она уже имеет нужный вид:
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwY3QT9H4zJk3aLfMcXkyMG7qLdKA75vVAmA+Trz5t3ulE9H9MFa8xY2dHjDHjJECRV4ZR2MwNN1kmbsS832qQ9Owp7Zu1g1Fn+8xr15u0vzOR3tv1Jm8LXLf16HerSCGz84Ky25CkY+Gkzif0fmk9WSJPMBcTCYEnap+vd8k9IhENPSsfaDeoUCuWT1Ai53YgbECImatIrKz5P" Примечание: напомню, что если вы упираетесь в максимальную длину записи в 255 символов и регистратор не дает создать запись длиннее, есть обходное решение 1 . В противном случае обратитесь в поддержку регистратора.Переходим к настройке.
Настройка OpenDKIM
Основные настройки OpenDKIM находятся в файле /etc/opendkim.conf. Оставим его оригинал в качестве бэкапа, а на его месте создадим новый пустой файл:
Открываем его для редактирования и вставляем содержимое:
Традиционно небольшое описание 2 каждого параметра ниже.
ExternalIgnoreList refile : / etc / opendkim / TrustedHosts InternalHosts refile : / etc / opendkim / TrustedHostsСоответствия отправителей и селектора определяет файл /etc/opendkim/SigningTable. По сути, второе значение каждой строки SigningTable соответствует первому значению файла KeyTable:
Файл /etc/opendkim/TrustedHosts используется для двух целей одновременно. Он определяет список внутренних (InternalHosts) и внешних (ExternalIgnoreList) хостов, с которых всю почту надо подписывать, а не проверять.
На стороне OpenDKIM настройка завершена, теперь необходимо научить Postfix отдавать письма на подпись.
Настройка Postfix
Добавьте проверку DKIM самой последней, но перед DMARC (если она имеется).
В предыдущих статьях мы рассказывали о подготовительных работах на сервере и двух способах установки и настройки почтового сервера — с хранением почтовых паролей в файле и в базе данных.
Теперь пришло время повысить лояльность почтовых сервисов к письмам, отправляемым с сервера, чтобы они не попадали в спам. Для этого мы настроим несколько дополнительных параметров.
Настраиваем spf
SPF-запись указывает, с каких серверов может отправляться почта для домена.
Для домена нужно добавить TXT-запись на серверах имён следующего вида:
Имя: ВАШ_ДОМЕН.
Значение: v=spf1 ip4:IP_ПОЧТОВОГО_СЕРВЕРА a mx
all
Где вместо IP_ПОЧТОВОГО_СЕРВЕРА нужно указать ip вашего сервера.
Так это будет выглядеть при использовании наших серверов имён:
Настраиваем DKIM
DKIM добавляет в заголовки письма цифровую подпись, которая подтверждает подлинность отправителя и гарантирует целостность письма.
Centos:
Debian/Ubuntu:
Запускаем службу и добавляем ее в автозагрузку:
Создаём директорию, где будут лежать ключи:
Правим права на ключи:
В конец файла /etc/opendkim.conf добавляем следующие настройки:
В файл /etc/opendkim/TrustedHosts вносим наш домен:
Файл должен выглядеть таким образом:
Открываем файл /etc/opendkim/KeyTable и приводим к такому виду:
Нужно заменить домен на свой и указать ваш путь до приватного ключа.
Правим файл /etc/opendkim/SigningTable и указываем в нём следующие данные:
Домен также нужно поменять на свой.
Если по каким-либо причинам этих файлов у вас нет, то их нужно создать.
Для Debian/Ubuntu указываем порт, на котором будет работать opendkim :
И добавляем работу с DKIM в настройку postfix :
Перезапускаем службы для применения настроек:
Запись должна быть следующего вида:
Имя: dkim._domainkey.ВАШ_ДОМЕН.
Значение (подставить свой ключ): v=DKIM1; k=rsa;
Пример, как это выглядит в нашей панели управления записями доменов:
Настраиваем DMARC
DMARC — это ещё одна настройка, которая позволяет идентифицировать отправителя и снизить количество спама и фишинга.
На серверах имён нужно разместить TXT-запись со следующим содержанием:
Имя: _dmarc.ВАШ_ДОМЕН.
Значение: v=DMARC1; p=none; aspf=r; sp=none
Вот так это будет выглядеть в DNSmanager:
Читайте также: