HOWTO: Exim & DKIM
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 97
- Зарегистрирован: 2007-12-19 21:04:16
- Откуда: Москва
- Контактная информация:
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- проходил мимо
Re: HOWTO: Exim & DKIM
DKIM описан в rfc4871. Политика самомго домена описана в rfc5617.
Согласно нему, письма подписанные неверно или не подписанные вообще нельзя пропускать только в случае политики самомго домена отправителя (на подобии spf).
_adsp IN TXT "discardable"
Если там что-то другое, то MTA ДОЛЖЕН пропустить письмо, не блокируя его.
Заголовок "Authentication-Results" не является собственностью DKIM и описан в rfc5451. И синтаксис етого заголовка там же описан. Так что везде вписывать "header.i=@$dkim_cur_signer" на все подписанные письма некорректно. Письмо может не содержать в подписи тэг "i", а лишь "d".
Согласно нему, письма подписанные неверно или не подписанные вообще нельзя пропускать только в случае политики самомго домена отправителя (на подобии spf).
_adsp IN TXT "discardable"
Если там что-то другое, то MTA ДОЛЖЕН пропустить письмо, не блокируя его.
Заголовок "Authentication-Results" не является собственностью DKIM и описан в rfc5451. И синтаксис етого заголовка там же описан. Так что везде вписывать "header.i=@$dkim_cur_signer" на все подписанные письма некорректно. Письмо может не содержать в подписи тэг "i", а лишь "d".
-
- ефрейтор
- Сообщения: 50
- Зарегистрирован: 2009-09-19 13:02:45
- Контактная информация:
Re: HOWTO: Exim & DKIM
После этих манипуляций письма стали доходить с большой задержкой, по логам с моего MTA оно уходит а у отправителя появятся спустя минут 5-7 это у всех так? Без DKIM все ходит нормально.

-
- проходил мимо
- Сообщения: 3
- Зарегистрирован: 2009-04-18 11:25:01
Re: HOWTO: Exim & DKIM
а как обойти вот такую проблему?
соответственно письма не подписываются
binary вместо quoted printable пробовал
проблема в этом самом ":", убрать его можно, но почему так получается?
Код: Выделить всё
gate2:/home/reaper# exim -bem /home/reaper/1.eml '$h_from'
=?windows-1251?Q?=DF=F0=EE=F1=EB=E0=E2=EB=FC: =F4=EE=F0=F3=EC=FB?= <maillist@yarportal.ru>
gate2:/home/reaper# exim -bem /home/reaper/1.eml '${lc:${domain:$h_from:}}'
binary вместо quoted printable пробовал
проблема в этом самом ":", убрать его можно, но почему так получается?
-
- проходил мимо
Re: HOWTO: Exim & 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}}
...
## чуть правим транспорт:
remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = dkim
dkim_private_key = DKIM_PRIVATE_KEY
...
По этому DKIM_DOMAIN и dkim_domain для него будет одним и тем-же, в следствии возникает ошибка повторения
Код: Выделить всё
"dkim_domain" option set for the second time
-
- ефрейтор
- Сообщения: 53
- Зарегистрирован: 2011-05-09 17:28:11
Re: HOWTO: Exim & DKIM
Это все замечательно, но как прописать в роуте , если у меня 10 доменов и половина из них без dkim подписи.... в данной конфикуряции насколько я понял, елси у домена нет подписи dkim письмо не отправится. а как сделать так что бы если есть dkim ушло с подписью , нет dkim ну и ладно ушло без подписи. ???
-
- ефрейтор
- Сообщения: 53
- Зарегистрирован: 2011-05-09 17:28:11
Re: HOWTO: Exim & DKIM
Сам спросил, сам ответил. dkim_strict
-
- проходил мимо
Re: HOWTO: Exim & DKIM
DKIM подпись это хорошо, Но, получается слишком длинная строка. которую не все почтовики принимают. Как быть в таком случае? Можно ли разделить строку с заголовком DKIM на несколько и как это сдетать в exim?
Прошлый почтовик настраивал на postfix и получалось сделующее:
Через exim:
Прошлый почтовик настраивал на postfix и получалось сделующее:
Код: Выделить всё
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mydomain.ru;
s=default; t=1373538179;
bh=8bL2YoABIr7Q/yVWk9+JxEh/vc9FPTUkpC1Owgw9nAQ=;
h=MIME-Version:Content-Type:Content-Transfer-Encoding:Date:From:To:
Subject:Message-ID;
b=awDJHhbRD166QsXe7+cMEN4qPCClbtl03X+z4QJFSwHdAveT6XAnSVd9+1kO68pDZ
DMv86lsc3ERqheI+qTgsfbdIopyga1wd2wa5Rvk1mrRMWuLK2KDhwWeiUmkXXt/8cK
I2Orc8GjkVaXNM5gvtwrl0mu5JFavBHGCQkyovEg=
Код: Выделить всё
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=simple/simple; d=mydomain.ru; s=mail;
h=Content-Transfer-Encoding:Mime-Version:Message-ID:Date:Content-Type:To:Reply-To:From:Subject; bh=8bL2YoABIr7Q/yVWk9+JxEh/vc9FPTUkpC1Owgw9nAQ=;
b=kttLX6dn4olM3qX61pGw6JPBFloWEi/VbrxF6J66g2iu9DCZqPIBJrnh0z8eBUiG2AvK5tIUaJMm5JiWVzN1unFMqmEVyHviPwNPArmderHLc/XF12B8nTpkqaaX2Nvijk7v1XUIiPzE0+BkZWJRlbNw9dcX7LJnhhhvAiae/98=;
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Re: HOWTO: Exim & DKIM
Не так. При "discardable" ДОЛЖЕН завернуть. А в случае с "all" вопрос отдаётся на усмотрение MTA. Я в этом случае тоже баню.alexminder писал(а):DKIM описан в rfc4871. Политика самомго домена описана в rfc5617.
Согласно нему, письма подписанные неверно или не подписанные вообще нельзя пропускать только в случае политики самомго домена отправителя (на подобии spf).
_adsp IN TXT "discardable"
Если там что-то другое, то MTA ДОЛЖЕН пропустить письмо, не блокируя его.
Иначе более мягкие варианты с накидкой очков.
IT voodoo blog https://kostikov.co
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
Re: HOWTO: Exim & DKIM
После долгого чтения RFC и практик их применения наваял у себя корректную проверку DKIM.
Определяем домены, которые гарантированно должны использовать подпись DKIM и того, кого будем проверять.
В начале конфига, где глобальные листы и переменные
Вставляем проверку DKIM после синтаксического разбора заголовков, но перед проверкой данных
Разрешаем не проверять DKIM для аутентифицированных пользователей и доверенных хостов
Ну и, собственно, сама проверка. Баним только если обязательное наличие подписи явно указано в записи ADSP.
При наличии других ошибок и при подозрении в некорректности накидываем очки
acl_c0 - счётчик баллов, acl_c1 - расшифровка их начисления для последующего анализа.
Как-то так.
Определяем домены, которые гарантированно должны использовать подпись DKIM и того, кого будем проверять.
В начале конфига, где глобальные листы и переменные
Код: Выделить всё
...
DKIM_DOMAINS = gmail.com : googlemail.com : mail.ru : yandex.ru : list.ru : bk.ru : inbox.ru : yahoo.com : paypal.com
dkim_verify_signers = $dkim_signers : $sender_address_domain
...
Код: Выделить всё
...
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_dkim = acl_check_dkim
acl_smtp_data = acl_check_data
...
Код: Выделить всё
acl_check_rcpt:
...
# --- accept authenticated users
accept authenticated = *
control = dkim_disable_verify
...
accept hosts = +relay_from_hosts
control = dkim_disable_verify
При наличии других ошибок и при подозрении в некорректности накидываем очки
Код: Выделить всё
# --- by xM 2013-12-16
acl_check_dkim:
# --- get ADSP DKIM policy
warn set acl_m0 = ${extract{dkim}{${lookup dnsdb{txt=_adsp._domainkey.$sender_address_domain}}}}
# --- reject if mandatory DKIM signature check failed
deny condition = ${if match{$dkim_cur_signer}{$sender_address_domain}{yes}{no}}
condition = ${if match{$acl_m0}{all|discardable}{yes}{no}}
!dkim_status = pass
message = Mandatory DKIM signature check failed for $sender_address_domain ($dkim_verify_status)
warn dkim_status = fail
set acl_c0 = ${eval:$acl_c0+30}
set acl_c1 = DKIMFL(30) DKIM signature failed ($dkim_verify_reason); $acl_c1
# --- check DKIM signature for well-known public services
warn dkim_status = none
sender_domains = DKIM_DOMAINS
set acl_c0 = ${eval:$acl_c0+20}
set acl_c1 = NODKIM(20) DKIM signature is absent for $sender_address_domain domain; $acl_c1
warn dkim_status = invalid
set acl_c0 = ${eval:$acl_c0+10}
set acl_c1 = DKIMINV(10) invalid DKIM signature ($dkim_verify_reason); $acl_c1
accept
Как-то так.
IT voodoo blog https://kostikov.co
- DevZone
- рядовой
- Сообщения: 41
- Зарегистрирован: 2012-04-14 8:04:05
Re: HOWTO: Exim & DKIM
После долгих страданий перешел на использование mail/ssmtp
- SteelS
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-07-21 10:12:58
- Откуда: Chicago, USA
Re: HOWTO: Exim & DKIM
Подымем эту ряхлую тему:
PERL
Ну и сама ошибка:
Код: Выделить всё
remote_smtp:
driver = smtp
dkim_domain = $sender_address_domain
dkim_selector = dkim
dkim_private_key = "${perl{get_dkim}}"
dkim_canon = relaxed
dkim_strict = 0
Код: Выделить всё
sub get_dkim
{
my $sender_address = Exim::expand_string('$sender_address');
my ($user,$domain) = split(/\@/, $sender_address);
# Получаем с БД в хеш $info
# ...
my $dkim = @$info{'dkim'};
if (length($dkim)>0 and $dkim != 0){
return $dkim;
}
return 'no';
}
Код: Выделить всё
failed to expand dkim_private_key: Not an ARRAY reference at /etc/exim.pl
Linux - на десктоп
FreeBSD - на сервер
Вывод: NIX - В массы.
FreeBSD - на сервер
Вывод: NIX - В массы.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
HOWTO: Exim & DKIM
Меня давеча попросили разобраться, почем Exim не подписывает письма одного из отправителей.
Проблема оказалась в строке
и сочетании имени отправителя.
Если заголовок From: приобретает вид
то строка раскрывается пустой.
Вывод - не придумывать сложных выражений попусту, а использовать стандартную переменную $sender_address_domain
Проблема оказалась в строке
Код: Выделить всё
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
Если заголовок From: приобретает вид
Код: Выделить всё
Это vasya@net <vasya@ru.net>
Вывод - не придумывать сложных выражений попусту, а использовать стандартную переменную $sender_address_domain
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
Не подскажете, как быть с перенаправленными письмами от других адресатов? У меня есть те, у кого настроено дублирование писем на внешний адресс (на gmail) и они не проходят dkim проверку
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
HOWTO: Exim & DKIM
Делать перезапись заголовков или перепаковывать письмо.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
А есть смысл сделать отдельные транспорты для отправляемых во вне писем, один для тех у кого $header_from принадлежит подписываемому домену и второй для остальных?xM писал(а):Делать перезапись заголовков или перепаковывать письмо.
Только я пока не разобрался еще как правило описать :-)
- f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
- Контактная информация:
HOWTO: Exim & DKIM
А поподробнее
С пересылками и прочем что у SPF, что у DKIM/DMARC конечно всё не однозначно, как и с рассылками, с другой вполне решаемо и описано.
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
Пример из жизни: один из пользователь пожелал, что бы все письма к нему дублировались ему на ящик на gmail.com, в стандартном варианте письма из вне (например с mail.ru) перенаправляются с затёртым dkim (а может переподписанным dkim), из-за чего gmail.com их молчаливо дропает.f_andrey писал(а):А поподробнее
С пересылками и прочем что у SPF, что у DKIM/DMARC конечно всё не однозначно, как и с рассылками, с другой вполне решаемо и описано.
Задумка таккова, сделать два транспорта вида:
Код: Выделить всё
# Драйвер для доставки через соединения с удаленными smtp серверами
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY = /etc/exim4/dkim.key
DKIM_SELECTOR = mail
remote_smtp:
debug_print = "T: remote_smtp for $local_part@$domain"
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = DKIM_SELECTOR
dkim_private_key = DKIM_PRIVATE_KEY
# Драйвер для доставки через соединения с удаленными smtp серверами
# используется для перенаправления писем от других MTA
# отличается отсутствием DKIM подписи
forward_smtp:
debug_print = "T: forward_smtp for $local_part@$domain"
driver = smtp
Код: Выделить всё
dnslookup:
debug_print = "R: dnslookup for $local_part@$domain"
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
same_domain_copy_routing = yes
# ignore private rfc1918 and APIPA addresses
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
255.255.255.255
no_more
- f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
- Контактная информация:
HOWTO: Exim & DKIM
Судя по тому что вы пишете, вы слабо представляете для чего нужны все эти страшные буквы и как оно работает. НИНАДО НИЧЕГО НИКОГДА ЗАТИРАТЬ.
Если хотите что то настроить, то пишите тут (нужно больше информации, от кого кому как, а не вот этого абстрактного хочу), если нет, то предлагаю завести отдельную тему а не засирать имеющуюся.
P.S.: телепаты в отпуске
Если хотите что то настроить, то пишите тут (нужно больше информации, от кого кому как, а не вот этого абстрактного хочу), если нет, то предлагаю завести отдельную тему а не засирать имеющуюся.
P.S.: телепаты в отпуске
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
Мне бы такую травкуf_andrey писал(а):Судя по тому что вы пишете, вы слабо представляете для чего нужны все эти страшные буквы и как оно работает. НИНАДО НИЧЕГО НИКОГДА ЗАТИРАТЬ.
Если хотите что то настроить, то пишите тут (нужно больше информации, от кого кому как, а не вот этого абстрактного хочу), если нет, то предлагаю завести отдельную тему а не засирать имеющуюся.
P.S.: телепаты в отпуске

- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
HOWTO: Exim & DKIM
В таком случае самым простым вариантом будет забирать почту с Gmail по POP3 (или там как он это делает). Никаких модификаций на пересылающем узле это не потребует.
В противном случае, как верно заметил f_andrey, есть проблемы с SPF/DKIM + DMARC. Это решается модификацией заголовков или перепаковкой письма в RFC822 MIME. Соответственно да, придётся писать свои роутеры (возможно и транспорт).
Написание универсальных роутеров с корректной модификацией заголовков потребует определённых интеллектуальных и временных затрат, но представляется что это средствами Exim сделать реально.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
андрей несколько ошибся, да SPF будет ломается у перенапрявляемых писем, и если настроить DKIM по мануалу, то будет ломаться и DKIM/DMARC, однако без подписывания DKIM/DMARC не ломается, так же не ломается он у mail.ru и gmail.com при перенаправлении писем.xM писал(а):В таком случае самым простым вариантом будет забирать почту с Gmail по POP3 (или там как он это делает). Никаких модификаций на пересылающем узле это не потребует.
В противном случае, как верно заметил f_andrey, есть проблемы с SPF/DKIM + DMARC. Это решается модификацией заголовков или перепаковкой письма в RFC822 MIME. Соответственно да, придётся писать свои роутеры (возможно и транспорт).
Написание универсальных роутеров с корректной модификацией заголовков потребует определённых интеллектуальных и временных затрат, но представляется что это средствами Exim сделать реально.
Анализ показал, что при настройке DKIM по распространенным рецептам заставляет exim добавлять дополнительную строку с тегом (полем) DKIM-Signature, т.е. в письме получается нечто вида:
Код: Выделить всё
....
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail;
h=Subject:CC:Content-Type:Message-ID:Reply-To:Date:MIME-Version:To:From; bh=P16LPOrMMuwo8D3IohNHyhkVWkzc1aD5jEVH2DCaBuk=;
b=NAJ9/BIj936PUYe3En5RxY6i8MxpycnuYJyr2vWkcFJusZBFUXE9Cr1mQr0tjqwPk5WUXFj6YJ3/ahusKF4XizeMBUWPzTEn808h+b6YRjz+93XvSKVizUei1mXT/J1Yg2LY7Q2eJsIoCr9vZ3ZR5xE7I6D8ZUE7RI1Q7UEcVjM=;
....
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail2;
h=Content-Type:Message-ID:Reply-To:Date:MIME-Version:Subject:To:From; bh=RgFNvLVDiVFBhBhoPDTy7fDw6E2w/xMrfC8jFILrnd4=;b=G084JzX6iH8+HxvCpDfuvFSuVPKrLKTSdHljy6J4Yhan7tqzooqwr18U5dZW7uRT/idW5QKpRD+iCCW6hUTsAw+jNC3kyp2WF5nOmwLIw2Y1By2kIZ+TWtvFJuStIt/FYUA3sd6YtPUHfRfUR/2No5hpRejF9uaORhYb+fwJHxc=;
....
Воти есть мысль не подписывать письма, у которых в заголовке From стоит чужой домен.
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
HOWTO: Exim & DKIM
При наличии политики DMARC quarantine и, тем более, reject, у домена-отправителя почта пересылаться не будет.
DKIM если не происходит модификации подписываемых заголовков и тела письма в процессе пересылке, действительно, не "ломается" (да и с чего бы?). В противном случае потребуется передописывание. Понятно, что чужим DKIM вы вряд ли подпишете, то есть надо будет подписывать своим, при этом будет полезно удалить и изначальную DKIM. Соответственно, для этого потребуется изменить отправителя на вашего.
IT voodoo blog https://kostikov.co
-
- рядовой
- Сообщения: 13
- Зарегистрирован: 2014-01-23 8:35:18
- Откуда: Россия
HOWTO: Exim & DKIM
Да я это всё только что написал, что с вами со всеми?xM писал(а):При наличии политики DMARC quarantine и, тем более, reject, у домена-отправителя почта пересылаться не будет.
DKIM если не происходит модификации подписываемых заголовков и тела письма в процессе пересылке, действительно, не "ломается" (да и с чего бы?). В противном случае потребуется передописывание. Понятно, что чужим DKIM вы вряд ли подпишете, то есть надо будет подписывать своим, при этом будет полезно удалить и изначальную DKIM. Соответственно, для этого потребуется изменить отправителя на вашего.
Лучше подскажите как в роутере получить содержимое поля From в письме, это всё что мне не хватает?
- xM
- ст. лейтенант
- Сообщения: 1316
- Зарегистрирован: 2009-01-15 23:57:41
- Откуда: Königsberg
- Контактная информация:
HOWTO: Exim & DKIM
Вы и близко такого не написали.
Но если вам не нужна помощь, тогда никто не навязывается.
IT voodoo blog https://kostikov.co