Ключевые слова:spam, dkim, mail, freebsd, postfix, amavis, spamassassin, (найти похожие документы)
From: SergeySL <sergeysl58@gmail.com.>
Date: Mon, 6 Nov 2010 17:02:14 +0000 (UTC)
Subject: DKIM подписание средствами Postfix и Amavisd-new
Оригинал: http://www.sergeysl.ru/freebsd-dkim-amavisd-new-spamassassin/
Постановка задачи
-----------------
Применение DKIM верификации упрощает идентификацию легитимных сообщений
и блокировку маскируемого под них СПАМа. Последние версии Amavisd-new и
SpamAssassin имеют в своем составе средства DKIM верификации, которые
могут использоваться как по отдельности, так и совместно. Также
DKIM-Reputation Open Data Project и Mark Martinec предлагают
альтернативные плагины DKIM верификации для SpamAssassin,
обеспечивающие использование данных о репутации отправителей,
получаемых с сервера DKIM-Reputation Open Data Project. Ниже
рассмотрена интеграции всех перечисленных способов DKIM верификации в
существующую систему защиты от СПАМа.
Исходные данные
Имеется сервер с FreeBSD, на котором кроме всего прочего развернута
почтовая система, имеющая примерно такую же подсистему защиты от СПАМа,
как Почтовая система среднего офиса на базе Postfix. Все
программное обеспечение установлено из портов, альтернативные модули
DKIM загружены с сайтов разработчиков. Во избежание возможных
недоразумений отмечу, что я использовал FreeBSD 7.2, Amavisd-new
2.6.4_2,1 и SpamAssassin 3.2.5_4. Все имена папок и файлов
соответствуют стандартным значениям, используемым по умолчанию при
установке программного обеспечения из портов.
DKIM верификация средствами Amavisd-new
Для того, чтобы Amavisd-new выполнял DKIM верификацию сообщений,
необходимо добавить в файл /usr/local/etc/amavisd.conf строку:
$enable_dkim_verification = 1;
В зависимости от принадлежности отправителей сообщений, содержащих
успешно проверенные сигнатуры DKIM, к тем или иным доменам Amavisd-new
позволяет использовать различные банки политик, определяющие процесс
обработки сообщений. Например, для отправителей, имеющих безупречную
репутацию, можно отключить все проверки (я не рекомендую отключать
проверку на вирусы), для относительно надежных отправителей можно
определить значения репутаций, которые будут влиять на итоговые оценки,
выставляемые сообщениям по результатам проверки на принадлежность к
СПАМу, все остальные сообщения можно по-прежнему проверять согласно
банку политики по умолчанию. Для понимания сказанного рассмотрим
пример, приведенный в документе amavisd-new-2.6.4 release notes:
$policy_bank{'WHITELIST'} = {
bypass_spam_checks_maps => [[http://www.sergeysl.ru/feed/ ,]]
spam_lovers_maps => [[http://www.sergeysl.ru/feed/ ,]]
};
$policy_bank{'MILD_WHITELIST'} = {
score_sender_maps => [ { '.' => [-1.8] } ],
};
$policy_bank{'NOBANNEDCHECK'} = {
bypass_banned_checks_maps => [[http://www.sergeysl.ru/feed/ ,]]
banned_files_lovers_maps => [[http://www.sergeysl.ru/feed/ ,]]
};
@author_to_policy_bank_maps = ( {
# 'friends.example.net' => 'WHITELIST,NOBANNEDCHECK',
# '[email protected]' => 'WHITELIST,NOBANNEDCHECK',
'.ebay.com' => 'WHITELIST',
'.ebay.co.uk' => 'WHITELIST',
'ebay.at' => 'WHITELIST',
'ebay.ca' => 'WHITELIST',
'ebay.de' => 'WHITELIST',
'ebay.fr' => 'WHITELIST',
'.paypal.co.uk' => 'WHITELIST',
'.paypal.com' => 'WHITELIST', # author domain signatures
'./@paypal.com' => 'WHITELIST', # 3rd-party sign. by paypal.com
'alert.bankofamerica.com' => 'WHITELIST',
'amazon.com' => 'WHITELIST',
'cisco.com' => 'WHITELIST',
'.cnn.com' => 'WHITELIST',
'skype.net' => 'WHITELIST',
'welcome.skype.com' => 'WHITELIST',
'cc.yahoo-inc.com' => 'WHITELIST',
'cc.yahoo-inc.com/@yahoo-inc.com' => 'WHITELIST',
'.linkedin.com' => 'MILD_WHITELIST',
'google.com' => 'MILD_WHITELIST',
'googlemail.com' => 'MILD_WHITELIST',
'./@googlegroups.com' => 'MILD_WHITELIST',
'./@yahoogroups.com' => 'MILD_WHITELIST',
'./@yahoogroups.co.uk' => 'MILD_WHITELIST',
'./@yahoogroupes.fr' => 'MILD_WHITELIST',
'yousendit.com' => 'MILD_WHITELIST',
'meetup.com' => 'MILD_WHITELIST',
'[email protected]' => 'MILD_WHITELIST',
} );
Строки 1-4 определяют банк политики WHITELIST (отменяет проверку
сообщений на принадлежность к СПАМу); строки 5-7 - банк политики
MILD_WHITELIST (уменьшает итоговую оценку сообщений на 1.8); строки
8-11 - банк политики NOBANNEDCHECK (отменяет проверку на наличие
запрещенных по умолчанию типов файлов); строки 12-42 задают
соответствие между отправителями сообщений и банками политик.
Определения отправителей в списке @author_to_policy_bank_maps должны
иметь следующий синтаксис: [email protected] - пользователь user домена
company.com; company.com - любой пользователь домена company.com;
.company.com - любой пользователь любого субдомена домена company.com,
при этом сообщение подписано в субдомене
пользователя;.company.com/@company.com - любой пользователь любого
субдомена домена company.com, при этом сообщение подписано в
родительском домене company.com; ./@company.com - любой пользователь
любого домена, при этом сообщение подписано в домене company.com.
Список репутаций относительно надежных отправителей может иметь
следующий вид (полный список, рекомендуемый разработчиком Amavisd-new,
имеется в документе amavisd-new-2.6.4 release notes):
@signer_reputation_maps = ( {
'ebay.com' => -8.03,
'ebay.co.uk' => -8.59,
'ebay.at' => -3.59,
'ebay.ca' => -9.57,
'ebay.de' => -3.38,
'ebay.fr' => -10.95,
'email.paypal.co.uk' => -0.67,
'paypal.com' => -6.66,
'alert.bankofamerica.com' => 1.35,
'amazon.com' => 0.09,
'cisco.com' => -4.95,
'mail.cnn.com' => 4.12,
'skype.net' => -1.50,
'welcome.skype.com' => -0.34,
'yahoo-inc.com' => -1.57,
'google.com' => 1.47,
'googlemail.com' => 3.42,
'googlegroups.com' => -3.10,
'yahoogroups.com' => -1.76,
'yousendit.com' => -4.70,
'meetup.com' => -1.94,
} );
Изменение оценок вычисляется с учетом значения $reputation_factor
(может меняться от 0 до 1, по умолчанию 0.2) следующим способом:
adjusted_spam_score = reputation_factor * signer_reputation + (1 - reputation_factor) * spam_score
На этом настройка DKIM верификации средствами Amavisd-new заканчивается
(не забудьте перезапустить Amavisd-new командой amavisd reload). Теперь
в заголовки сообщений, которые содержат DKIM сигнатуры, будут
добавляться поля Authentication-Results; для сообщений, отправители
которых содержатся в списке @author_to_policy_bank_maps не будут
выполняться проверки, отключенные в соответствующих банках политики; у
сообщений, для отправителей которых тем или иным способом заданы
изменения оценок, в поле X-Spam-Status появится еще одна оценка
AM:BOOST, рассчитанная как описано выше. Естественно, предложенные
значение параметров придется расширять и/или уточнять экспериментальным
путем. На мой взгляд, следует очень внимательно отнестись к этому
вопросу, т.к. DKIM верификация средствами Amavisd-new наиболее
эффективна с точки зрения экономии системных ресурсов и
соответствующего повышения пропускной способности почтовой системы,
ведь она позволяет обойтись без выполнения проверок SpamAssassin для
значительной части сообщений.
DKIM верификация средствами SpamAssassin
Настройку DKIM верификация средствами SpamAssassin следует начать с
пересборки SpamAssassin c поддержкой DKIM верификации:
cd /usr/ports/mail/p5-Mail-SpamAssassin
make deinstall
make WITH_DKIM=true reinstall clean
По умолчанию плагин Mail::SpamAssassin::Plugin::DKIM отключен. Для
его активации необходимо раскомментировать строку loadplugin
Mail::SpamAssassin::Plugin::DKIM в файле
/usr/local/etc/mail/spamassassin/v312.pre, а также закомментировать
строку loadplugin Mail::SpamAssassin::Plugin::DomainKeys в файле
/usr/local/etc/mail/spamassassin/v310.pre, если она была
раскомментирована ранее.
При обработке сообщений, содержащих сигнатуры DKIM, SpamAssassin
использует следующие правила (в скобках указаны соответствующие оценки
по умолчанию): DKIM_SIGNED (0.001) - сообщение содержит сигнатуру DKIM,
DKIM_VERIFIED (-0.001) - сигнатура DKIM проверена, DKIM_POLICY_TESTING
(0.001) - DKIM подписание в домене отправителя работает в тестовом
режиме (ключ DKIM, который был использован для подписания сообщения,
имеет дополнительный параметр 't' со значением 'y'),
DKIM_POLICY_SIGNSOME (0.001) / DKIM_POLICY_SIGNALL (0.001) - DKIM
ADSP в домене отправителя разрешает / запрещает отправку неподписанных
сообщений, USER_IN_DKIM_WHITELIST (-100.000) / USER_IN_DEF_DKIM_WL
(-7.500) - адрес отправителя содержится в пользовательском / входящем в
поставку SpamAssassin белом списке DKIM. Если адрес отправителя в полях
Envelope-From: и From: содержится в пользовательском белом списке DKIM,
срабатывает дополнительное правило ENV_AND_HDR_DKIM_MATCH, по умолчанию
выставляющее оценку -7.500. Использование перечисленных правил можно
рассмотреть на примере, приведенном в разделе Putting DKIM
verification to good use in SpamAssassin документа amavisd-new
documentation bits and pieces:
score DKIM_VERIFIED -0.1
score DKIM_SIGNED 0
score DKIM_POLICY_SIGNALL 0
score DKIM_POLICY_SIGNSOME 0
score DKIM_POLICY_TESTING 0
score USER_IN_DKIM_WHITELIST -8.0
score USER_IN_DEF_DKIM_WL -1.5
score ENV_AND_HDR_DKIM_MATCH -0.1
whitelist_from_dkim *@ebay.com
whitelist_from_dkim *@*.ebay.com
whitelist_from_dkim *@ebay.co.uk
whitelist_from_dkim *@*.ebay.co.uk
whitelist_from_dkim *@ebay.at
whitelist_from_dkim *@ebay.ca
whitelist_from_dkim *@ebay.de
whitelist_from_dkim *@ebay.fr
whitelist_from_dkim *@*.paypal.com
whitelist_from_dkim *@paypal.com
whitelist_from_dkim *@* paypal.com
whitelist_from_dkim *@*.paypal.be
whitelist_from_dkim *@cern.ch
whitelist_from_dkim *@amazon.com
whitelist_from_dkim *@springer.delivery.net
whitelist_from_dkim *@cisco.com
whitelist_from_dkim *@alert.bankofamerica.com
whitelist_from_dkim *@bankofamerica.com
whitelist_from_dkim *@cnn.com
whitelist_from_dkim *@*.cnn.com
whitelist_from_dkim *@skype.net
whitelist_from_dkim [email protected]
whitelist_from_dkim *@welcome.skype.com
whitelist_from_dkim *@cc.yahoo-inc.com yahoo-inc.com
whitelist_from_dkim *@cc.yahoo-inc.com
whitelist_from_dkim [email protected]
whitelist_from_dkim [email protected]
def_whitelist_from_dkim *@google.com
def_whitelist_from_dkim *@googlemail.com
def_whitelist_from_dkim *@* googlegroups.com
def_whitelist_from_dkim *@* yahoogroups.com
def_whitelist_from_dkim *@* yahoogroups.co.uk
def_whitelist_from_dkim *@* yahoogroupes.fr
def_whitelist_from_dkim *@yousendit.com
def_whitelist_from_dkim *@meetup.com
def_whitelist_from_dkim [email protected]
Строка 1 меняет оценку, выставляемую правилом DKIM_VERIFIED; строка 2
отключает правило DKIM_SIGNED, т.к. наличие сигнатуры DKIM не является
критерием валидности сообщения; строки 3-5 отключают правила,
проверяющие ADSP, т.к., во-первых, не многие задают ADSP, а, во-вторых,
пока не существует правила, позволяющего идентифицировать ADSP
discardable (разработчики обещают исправить этот момент); строки 6-8
меняют оценки, выставляемые правилами USER_IN_DKIM_WHITELIST,
USER_IN_DEF_DKIM_WL и ENV_AND_HDR_DKIM_MATCH, на менее гуманные; строки
9-35 и 36-44 определяют белые списки DKIM. При определении белых
списков DKIM используется следующий синтаксис: [email protected] -
пользователь user домена company.com; *@company.com - любой
пользователь домена company.com; *@*.company.com - любой пользователь
любого субдомена домена company.com, при этом сообщение подписано в
субдомене пользователя; *@*.company.com company.com - любой
пользователь любого субдомена домена company.com, при этом сообщение
подписано в родительском домене company.com; *@* company.com - любой
пользователь любого домена, при этом сообщение подписано в домене
company.com. SpamAssassin позволяет использовать гораздо более сложные
правила, предположим, идентифицировать неподписанные сообщения, якобы
отправленные из доменов, всегда выполняющих подписание. Рассмотрим
пример, приведенный в вышеназванном документе:
header __ML1 Precedence =~ m{\b(list|bulk)\b}i
header __ML2 exists:List-Id
header __ML3 exists:List-Post
header __ML4 exists:Mailing-List
header __ML5 Return-Path:addr =~ m{^([^\@]+-(request|bounces|admin|owner)|owner-[^\@]+)(\@|\z)}mi
meta __VIA_ML __ML1 || __ML2 || __ML3 || __ML4 || __ML5
describe __VIA_ML Mail from a mailing list
header __AUTH_YAHOO1 From:addr =~ m{[\@.]yahoo\.com$}mi
header __AUTH_YAHOO2 From:addr =~ m{\@yahoo\.com\.(ar|au|br|cn|hk|mx|my|ph|sg|tw)$}mi
header __AUTH_YAHOO3 From:addr =~ m{\@yahoo\.co\.(id|in|jp|nz|th|uk)$}mi
header __AUTH_YAHOO4 From:addr =~ m{\@yahoo\.(ca|cn|de|dk|es|fr|gr|ie|it|no|pl|se)$}mi
meta __AUTH_YAHOO __AUTH_YAHOO1 || __AUTH_YAHOO2 || __AUTH_YAHOO3 || __AUTH_YAHOO4
describe __AUTH_YAHOO Author claims to be from Yahoo
header __AUTH_GMAIL From:addr =~ m{\@gmail\.com$}mi
describe __AUTH_GMAIL Author claims to be from gmail.com
header __AUTH_PAYPAL From:addr =~ /[\@.]paypal\.(com|co\.uk)$/mi
describe __AUTH_PAYPAL Author claims to be from PayPal
header __AUTH_EBAY From:addr =~ /[\@.]ebay\.(com|at|be|ca|ch|de|ee|es|fr|hu|ie|in|it|nl|ph|pl|pt|se|co\.(kr|uk)|com\.(au|cn|hk|mx|my|sg))$/mi
describe __AUTH_EBAY Author claims to be from eBay
meta NOTVALID_YAHOO !DKIM_VERIFIED && __AUTH_YAHOO && !__VIA_ML
priority NOTVALID_YAHOO 500
describe NOTVALID_YAHOO Claims to be from Yahoo but is not
score NOTVALID_YAHOO 2.8
meta NOTVALID_GMAIL !DKIM_VERIFIED && __AUTH_GMAIL && !__VIA_ML
priority NOTVALID_GMAIL 500
describe NOTVALID_GMAIL Claims to be from gmail.com but is not
score NOTVALID_GMAIL 2.8
meta NOTVALID_PAY !DKIM_VERIFIED && (__AUTH_PAYPAL || __AUTH_EBAY)
priority NOTVALID_PAY 500
describe NOTVALID_PAY Claims to be from PayPal or eBay, but is not
score NOTVALID_PAY 6
whitelist_from_rcvd [email protected] yahoo.com
whitelist_from_rcvd [email protected] yahoo.com
Строки 1-7 содержат правила, определяющие, что сообщение было
отправлено с использованием списков рассылки; строки 8-13 - правила,
срабатывающие, если сообщение отправлено пользователем одного из
доменов Yahoo; строки 14,15 - правила, срабатывающие, если сообщение
отправлено пользователем службы Gmail; строки 16,17 - правила,
срабатывающие, если сообщение отправлено пользователем одного из
доменов PayPal; строки 18,19 - правила, срабатывающие, если сообщение
отправлено пользователем одного из доменов eBay; строки 20-23 -
правила, срабатывающие, если в адресе отправителя указан пользователь
одного из доменов Yahoo, у сообщения отсутствуют признаки использования
списков рассылки и валидная сигнатура DKIM (Yahoo не отправляет такие
письма); строки 24-27 - правила, срабатывающие, если в адресе
отправителя указан пользователь службы Gmail, у сообщения отсутствуют
признаки использования списков рассылки и валидная сигнатура DKIM
(Gmail не отправляет такие письма); строки 28-31 - правила,
срабатывающие, если в адресе отправителя указан пользователь одного из
доменов PayPal, у сообщения отсутствуют признаки использования списков
рассылки и валидная сигнатура DKIM (PayPal не отправляет такие письма);
строки 32, 33 - разрешают прием сообщений со специальных адресов без
DKIM верификации. Более подробная информация о составлении и отладке
дополнительных правил SpamAssassin имеется в документе Writing and
Testing New Rules.
На этом настройка DKIM верификации средствами SpamAssassin
заканчивается (не забудьте перезапустить Amavisd-new командой amavisd
reload). Как и в случае с Amavisd-new, указанные выше значение
параметров придется расширять и/или уточнять экспериментальным путем.
Помните, что при совместном использовании DKIM верификации средствами
Amavisd-new и SpamAssassin увеличивается количество DNS запросов,
которые выполняются при проверке сообщений. Разработчики SpamAssassin
обещает исправить этот момент (SpamAssassin будет использовать данные,
содержащиеся в полях Authentication-Results, добавленных Amavisd-new в
заголовки сообщений).
Несколько слов о DKIM-Reputation Open Data Project
DKIM-Reputation Open Data Project - проект Мюнхенской компании
Agitos Websolutions, который предоставляет публичный список
репутаций отправителей, выполняющих DKIM подписание сообщений.
Репутации отправителей варьируются от -1000 (лучшая репутация,
присвоенная абстрактному отправителю [email protected]) до 1000 (худшая
репутация, присвоенная абстрактному отправителю [email protected]) и
хранятся в виде TXT записей на DNS сервере проекта, который имеет имя
al.dkim-reputation.org. У данного сервера можно запрашивать два типа
TXT записей: как о репутации отправителей (user-level DKIM reputation),
так и о репутации доменов, в которых выполняется DKIM подписание
(signingdomain-level DKIM reputation), при этом для получения
информации о репутации отправителей необходимо запрашивать записи
hex(md5(user)).hex(md5(domain)).hex(md5(signdomain)).al.dkim-reputation
.org, о репутации доменов, в которых выполняется DKIM подписание, -
*.hex(md5(signdomain)).al.dkim-reputation.org. Например, для выяснения
репутации абстрактного отправителя [email protected], DKIM подписание
сообщений которого осуществляется в домене example.com, можно выполнить
команду:
dig TXT bae60998ffe4923b131e3d6e4c19993e.5ababd603b22780302dd8d83498e5172.5ababd603b22780302dd8d83498e5172.al.dkim-reputation.org
которая выведет примерно такое сообщение (строка, содержащая
интересующую нас информацию, подсвечена):
; <<>> DiG 9.3.6-P1 <<>> TXT bae60998ffe4923b131e3d6e4c19993e.5ababd603b22780302dd8d83498e5172.5ababd603b22780302dd8d83498e5172.al.dkim-reputation.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16481
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; QUESTION SECTION:
;bae60998ffe4923b131e3d6e4c19993e.5ababd603b22780302dd8d83498e5172.5ababd603b22780302dd8d83498e5172.al.dkim-reputation.org. IN TXT
;; ANSWER SECTION:
bae60998ffe4923b131e3d6e4c19993e.5ababd603b22780302dd8d83498e5172.5ababd603b22780302dd8d83498e5172.al.dkim-reputation.org. 86400 IN TXT "rep=1000\;time=20091202010617\;wppd=1"
;; AUTHORITY SECTION:
al.dkim-reputation.org. 505131 IN NS dns.dkim-reputation.org.
al.dkim-reputation.org. 505131 IN NS ns.heindlnet.de.
;; Query time: 436 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Dec 2 20:30:00 2009
;; MSG SIZE rcvd: 234
Также репутация отправителя может быть проверена с помощью специальной
формы на главной странице официального сайта проекта:
Выяснение репутации отправителя
Более подробная информация об организации взаимодействия с сервером
DKIM-Reputation Open Data Project, имеется в документах Mission of
DKIM Reputation project и Implementing your own DKIM Reputation
client. В завершение этого раздела добавлю, что в настоящее время
большинство СПАМеров имеет репутацию от 50 до 100, при этом зона
al.dkim-reputation.org содержит около 135000 записей о репутации,
динамику заполнения данной зоны в удобной графической форме можно
увидеть странице DNS Reputation Records. И самое главное - Вы
можете создать аккаунт и настроить мониторинг корректности DKIM
подписания сообщений обслуживаемыми Вами почтовыми системами.
DKIM верификация средствами альтернативного плагина DKIM для SpamAssassin
DKIM-Reputation Open Data Project предлагает альтернативный плагин DKIM
для SpamAssassin, представляющий из себя стандартный плагин
Mail::SpamAssassin::Plugin::DKIM, дополненный возможностями получения
данных о репутации отправителей в процессе анализа сообщений на
принадлежность к СПАМу. Для установки альтернативного плагина DKIM
необходимо сохранить "родной" плагин DKIM (он понадобится позже), а
затем загрузить, распаковать и переместить в папку плагинов
SpamAssassin альтернативный плагин:
cd /tmp
mv /usr/local/lib/perl5/site_perl/5.8.9/Mail/SpamAssassin/Plugin/DKIM.pm .
fetch http://www.dkim-reputation.org/fileadmin/downloads/reputationclient/Mail-SpamAssassin-3.2.5-DKIM-Reputation-Plugin-V3.tgz
tar xf Mail-SpamAssassin-3.2.5-DKIM-Reputation-Plugin-V3.tgz
cd Mail-SpamAssassin-3.2.5-DKIM-Reputation-Plugin-V3
mv *.pm /usr/local/lib/perl5/site_perl/5.8.9/Mail/SpamAssassin/Plugin
После замены плагина необходимо добавить в файл
/usr/local/etc/mail/spamassassin/v312.pre строки:
full DKIM_VALID eval:check_dkim_valid()
full DKIM_VALID_AU eval:check_dkim_valid_author_sig()
Следует отметить, что в этом месте я столкнулся с разногласиями: в
файле README, входящем в состав дистрибутива плагина, рекомендуется
добавить в файл /usr/local/etc/mail/spamassassin/v312.pre строку full
DOMAINKEY_DOMAIN eval:check_dkim_verified(), а в исходном тексте
плагина (файле DKIM.pm) - строки, предложенные выше. Я сделал свой
выбор в связи с тем, что идентификатор DKIM_VALID является синонимом
DKIM_VERIFIED, и в слудующих версиях SpamAssassin будут использоваться
правила DKIM_VALID (сообщение содержит хотя бы одну валидную сигнатуру
DKIM) и DKIM_VALID_AU (сообщение содержит валидную сигнатуру DKIM
домена отправителя), а не используемое в настоящее время правило
DKIM_VERIFIED. При таком выборе следует отключить правило DKIM_VERIFIED
и определить оценки, выставляемые правилами DKIM_VALID и DKIM_VALID_AU,
в файле /usr/local/etc/mail/spamassassin/local.cf:
score DKIM_VERIFIED 0
score DKIM_VALID -0.1
score DKIM_VALID_AU -0.5
Также в файле /usr/local/etc/mail/spamassassin/local.cf можно изменить
коэффициенты dkimrep_maxspamscore (по умолчанию: 15) и
dkimrep_maxhamscore (по умолчанию: -15), которые учитываются при
расчете оценок, зависящих от репутации отправителей. Эти оценки
вычисляются следующим образом (помните, что отрицательная репутация
добавлена на перспективу и в настоящее время не используется):
score = dkimrep_maxspamscore / 1000 * DKIM-Reputation или score = dkimrep_maxhamscore / 1000 * DKIM-Reputation
При использовании значений коэффициентов по умолчанию сообщения от
большинства СПАМеров получают оценку от 0,5 до 1. На этом настройка
DKIM верификации средствами альтернативного плагина DKIM заканчивается,
хотя в большинстве случаев придется уточнять значения коэффициента
dkimrep_maxspamscore. На время тестирования и окончательной настройки
альтернативного плагина DKIM можно повысить детальность логов
Amavisd-new (определяется параметром $log_level в файле
/usr/local/etc/amavisd.conf) до значения 5 и запустить Amavisd-new
командой amavisd -d all, чтобы отладочная информация записывалась в
/var/log/debug.log (учтите, что при этом размер лога начнет резко
увеличиваться). Теперь в процессе доставки сообщений, содержащих
сигнатуры DKIM, в /var/log/debug.log будут выводиться примерно такие
сообщения ("лишняя", на мой взгляд, информация удалена, имя
пользователя Gmail и md5-хеш имени заменены на user и
ee11cbb19052e40b07aac0ca060c23ee, соответственно):
SA dbg: dkim: no wl entries match author [email protected], no need to verify sigs
SA dbg: dkim: performing public key lookup and signature verification
A dbg: dkim: signing identity: @gmail.com, d=gmail.com, a=rsa-sha256, c=relaxed/relaxed
SA dbg: dkim: signing identity: [email protected], d=gmail.com, a=rsa-sha1, c=nofws
SA dbg: dkim: signature verification result: PASS
SA dbg: DKIMRep: check_dkimreputation
SA dbg: DKIMRep: found some valid dkim identities
SA dbg: DKIMRep: request to ee11cbb19052e40b07aac0ca060c23ee.f74d39fa044aa309eaea14b9f57fe79c.f74d39fa044aa309eaea14b9f57fe79c.al.dkim-reputation.org
SA dbg: dkim: policy: not retrieved, author signature is valid
Естественно, мне захотелось проверить, каким образом альтернативный
плагин DKIM будет реагировать на сообщения, отправители которых имеют
"нехорошую" репутацию, однако, это оказалось невозможным, в связи с чем
я задал вопрос разработчикам DKIM-Reputation Open Data Project. Мне
ответили, что, к сожалению, в настоящее время не существует каких-либо
онлайн-инструментов тестирования работоспособности систем
DKIM-верификации, использующих данные о репутации отправителей,
получаемые с сервера DKIM-Reputation Open Data Project, но создание
соответствующей системы планируется. Еще мне сказали, что можно
скормить SpamAssassin сообщение от абстрактного отправителя
[email protected]. Я знаю, как проверить сообщение, хранящееся в тестовом
файле, но не догадываюсь, как создать сообщение с валидной сигнатурой
DKIM от абстрактного пользователя. В связи с этим остается только
экспериментировать и надеяться на дальнейшее развитие проекта
DKIM-Reputation Open Data Project.
DKIM верификация средствами альтернативного плагина DKIMrep для SpamAssassin
Для того, чтобы обзор был полным, необходимо рассказать еще и о плагине
DKIMrep для SpamAssasssin, который разработал Mark Martinec. Данный
плагин предназначен для совместной работы с "родным" плагином DKIM и
разработан на базе альтернативного плагина DKIM от DKIM-Reputation Open
Data Project. Для установки плагина DKIMrep необходимо восстановить
восстановить "родной" плагин DKIM, если он был заменен альтернативным,
и загрузить необходимые файлы в папку, содержащую плагины для
SpamAssassin:
cd /usr/local/lib/perl5/site_perl/5.8.9/Mail/SpamAssassin/Plugin
mv /tmp/DKIM.pm .
fetch http://www.ijs.si/software/amavisd/DKIMrep.pm http://www.ijs.si/software/amavisd/effectiveTLDs.pm
После замены плагина необходимо привести содержимое файла
/usr/local/etc/mail/spamassassin/v312.pre к виду:
loadplugin Mail::SpamAssassin::Plugin::DKIM
loadplugin Mail::SpamAssassin::Plugin::DKIMrep
Затем следует добавить в файл /usr/local/etc/mail/spamassassin/local.cf
строки:
ifplugin Mail::SpamAssassin::Plugin::DKIM
ifplugin Mail::SpamAssassin::Plugin::DKIMrep
full DKIM_REPUT eval:check_dkim_reputation()
tflags DKIM_REPUT net
score DKIM_REPUT 0.1
describe DKIM_REPUT Signing domain reputation according to dkim-reputation.org
priority DKIM_REPUT 200
dkimrep_maxspamscore 0.5
dkimrep_maxhamscore -0.5
endif
endif
На этом настройка DKIM верификации средствами плагина DKIMrep
заканчивается, хотя, как и в предыдущем случае, скорее всего придется
уточнять значения коэффициента dkimrep_maxspamscore. Процедура
настройки и тестирования плагина DKIMrep также не отличается от уже
рассмотренной. Теперь в процессе доставки сообщений, содержащих
сигнатуры DKIM, в /var/log/debug.log будут выводиться примерно такие
сообщения (как и в предыдущем случае, "лишняя" информация удалена, имя
пользователя Gmail и md5-хеш имени заменены на user и
ee11cbb19052e40b07aac0ca060c23ee, соответственно):
SA dbg: dkimrep: check_dkim_reputation
SA dbg: dkimrep: found some valid dkim identities
SA dbg: dkimrep: request (src) DKIMrep:TXT:(user).(gmail.com).(gmail.com).(al.dkim-reputation.org)
SA dbg: dkimrep: request ee11cbb19052e40b07aac0ca060c23ee.f74d39fa044aa309eaea14b9f57fe79c.f74d39fa044aa309eaea14b9f57fe79c.al.dkim-reputation.org
SA dbg: dkimrep: request (src) DKIMrep:TXT:(*).(gmail.com).(al.dkim-reputation.org)
SA dbg: dkimrep: request *.f74d39fa044aa309eaea14b9f57fe79c.al.dkim-reputation.org
SA dbg: dkimrep: DNS query failed: NXDOMAIN, key DKIMrep:TXT:(*).(gmail.com).(al.dkim-reputation.org)
SA dbg: dkimrep: DNS query failed: NXDOMAIN, key DKIMrep:TXT:(user).(gmail.com).(gmail.com).(al.dkim-reputation.org)
SA dbg: dkimrep: aggregate score: 0
Пусть Вас не пугают сообщения DNS query failed: NXDOMAIN. Они
подтверждают, что на сервере al.dkim-reputation.org нет данных ни о
домене, в котором было выполнено DKIM подписание, ни об отправителе
сообщения (ни домен, ни отправитель не занесены в черный список).
Использование плагина DKIMrep кажется мне более удобным, т.к. я являюсь
противником замены программных модулей, периодически обновляемых с
помощью системы портов. Все остальные проблемы, описанные в предыдущем
разделе, присущи и плагину DKIMrep.
Заключение
Я постарался рассказать все, что смог узнать о DKIM верификации
средствами Amavisd-new и SpamAssassin. Бесспорно, на текущий момент
поддержка DKIM верификации реализована лишь частично, однако, сама
технология имеет огромный потенциал. Уже в ближайших версиях
SpamAssassin будут добавлены правила, позволяющие идентифицировать ADSP
discardable, которая позволяет отправителям обеспечить однозначную
идентификацию валидных сообщений и блокировку маскирующегося под них
СПАМа на стороне получателей. Также я уверен, что будут развиваться
системы, предоставляющие публичные списки репутаций отправителей,
выполняющих DKIM подписание сообщений. Пока же я предлагаю Вам начать
тестирование технологии DKIM и по возможности делиться с
общественностью своими наработками ;-)