Centos
Установлен PostFIX, есть fail2ban. Установили OpenDKIM.Все настроили в соответствии с мануалом.
На проверку работает отлично - спам значительно уменьшается.
На подписывание отправляемых сообщений - не указываются в заголовках DKIM-Signature, указывает только строчку DKIM-Filter: OpenDKIM Filter v2.9.0 domain.ru E8583157AACВ логах maillog есть записи такого плана:
Nov 16 01:08:33 smtp opendkim[17226]: OpenDKIM Filter: mi_stop=1
Nov 16 01:08:33 smtp opendkim[17226]: OpenDKIM Filter v2.9.0 terminating with status 0, errno = 0
Nov 16 01:08:36 smtp opendkim[18463]: OpenDKIM Filter v2.9.0 starting (args: -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid)
Nov 16 01:08:41 smtp opendkim[18463]: OpenDKIM Filter: mi_stop=1
Nov 16 01:08:41 smtp opendkim[18463]: OpenDKIM Filter v2.9.0 terminating with status 0, errno = 0
Nov 16 01:08:41 smtp opendkim[18484]: OpenDKIM Filter v2.9.0 starting (args: -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid)
Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): unknown [172.17.188.179] not internal
Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): not authenticated
Nov 16 01:08:55 smtp opendkim[18484]: E8583157AAC: no signature dataВсе настроено и перепроверено. Но ничего не помогает. Только одну запись в заголовок письма прописывает, а сигнатуру - нет. Ключи проверены штатными средствами - все ок.
Что может быть?
> Nov 16 01:08:55 smtp opendkim[18484]: E8583157AAC: no signature dataкак прописана запись в DNS? в opendkim.conf SigningTable как указано? в студию конфиги
>> Nov 16 01:08:55 smtp opendkim[18484]: E8583157AAC: no signature data
> как прописана запись в DNS? в opendkim.conf SigningTable как указано? в студию
> конфигиDNS ============================================================
default._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=XXX ключ XXX" )
=================================================================opendkim.conf ===================================================
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@127.0.0.1
Umask 002
Canonicalization relaxed/relaxed
Domain *
Selector default
MinimumKeyBits 1024
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHostsSignatureAlgorithm rsa-sha256
TemporaryDirectory /tmpSoftwareHeader yes
=======================================================================
SigningTable ==========================================================domain.ru default._domainkey.domain.ru
=======================================================================
>[оверквотинг удален]
> SigningTable refile:/etc/opendkim/SigningTable
> ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
> InternalHosts refile:/etc/opendkim/TrustedHosts
> SignatureAlgorithm rsa-sha256
> TemporaryDirectory /tmp
> SoftwareHeader yes
> =======================================================================
> SigningTable ==========================================================
> domain.ru default._domainkey.domain.ru
> =======================================================================Как прописан фильтр в постфиксах?
Смущает то что у вас ExternalIgnoreList и InternalHosts ссылаются на один и тот же файл.
>[оверквотинг удален]
>> SignatureAlgorithm rsa-sha256
>> TemporaryDirectory /tmp
>> SoftwareHeader yes
>> =======================================================================
>> SigningTable ==========================================================
>> domain.ru default._domainkey.domain.ru
>> =======================================================================
> Как прописан фильтр в постфиксах?
> Смущает то что у вас ExternalIgnoreList и InternalHosts ссылаются на один и
> тот же файл.main.cf =================================================================
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891=========================================================================
Закомментировал ExternalIgnoreList, перезапустил opendkim - все также, вставляет только одну строку DKIM-Filter: OpenDKIM Filter v2.9.0 domain.ru 7B320157BD6
> SigningTable refile:/etc/opendkim/SigningTableизменить на SigningTable /etc/opendkim/SigningTable и пробовать
>> SigningTable refile:/etc/opendkim/SigningTable
> изменить на SigningTable /etc/opendkim/SigningTable и пробоватьПробовали. Но попробовали еще раз - все также, добавляет только одну запись DKIM-Filter
последний лог и конфиг в студию
#ls -l /etc/opendkim
#cat /etc/opendkim/KeyTable
#cat /etc/opendkim/SigningTable
#cat /etc/opendkim/TrustedHostsесли указан KeyTable и SigningTable то директива Domain * не будет работать. попробуйте закомментировать таблицы если хотите для всех ваших доменов подписывать
так же перезапустить демон dkim после каждой правки конфигов dkim не забываем
> последний лог и конфиг в студию
> #ls -l /etc/opendkim
> #cat /etc/opendkim/KeyTable
> #cat /etc/opendkim/SigningTable
> #cat /etc/opendkim/TrustedHosts
> если указан KeyTable и SigningTable то директива Domain * не будет работать.Да, она игнорируется. Пробовали и с указанием Domain * и без.
> попробуйте закомментировать таблицы если хотите для всех ваших доменов подписыватьЕсли закомментировать таблицы, то нужно указывать конкретно каким ключом подписывать. В-общем ключи (по крайней мере публичный, прописанный в днс) работают правильно - проверяли сервисом http://dkimcore.org/tools/dkimrecordcheck.html
> так же перезапустить демон dkim после каждой правки конфигов dkim не забываем
Конечно, рестарт при каждом изменении.
>>> SigningTable refile:/etc/opendkim/SigningTable
>> изменить на SigningTable /etc/opendkim/SigningTable и пробовать
> Пробовали. Но попробовали еще раз - все также, добавляет только одну запись
> DKIM-FilterЕсли ключ один для всех доменов, достаточно вот такой конфиги:
$ cat /etc/opendkim.conf
Syslog yes
UMask 002
Domain refile:/etc/opendkim-domain
SubDomains no
KeyFile /etc/postfix/xxxxx.key
Selector default
Canonicalization simple
Mode sv
Socket inet:8891@localhost
InternalHosts /etc/opendkim-internal-hosts$cat /etc/opendkim-domain
domain.ru
*.domain.ru
$cat /etc/opendkim-internal-hosts
127.0.0.1
и дальше ip адреса с которых почта будет подписываться, или сети...
11.22.33.44
>[оверквотинг удален]
> Socket
> inet:8891@localhost
> InternalHosts /etc/opendkim-internal-hosts
> $cat /etc/opendkim-domain
> domain.ru
> *.domain.ru
> $cat /etc/opendkim-internal-hosts
> 127.0.0.1
> и дальше ip адреса с которых почта будет подписываться, или сети...
> 11.22.33.44Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys (путь к ключу) не является root. Установили. Запустился, тестируем - результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0 domain.ru 4E39A157B1D
>[оверквотинг удален]
>> domain.ru
>> *.domain.ru
>> $cat /etc/opendkim-internal-hosts
>> 127.0.0.1
>> и дальше ip адреса с которых почта будет подписываться, или сети...
>> 11.22.33.44
> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
> (путь к ключу) не является root. Установили. Запустился, тестируем -
> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
> domain.ru 4E39A157B1DА адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
172.17.188.179?
Что теперь пишет в логах постфикса и опендким?
> А адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
> 172.17.188.179?этот IP не прописан потому что:
>Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): unknown [172.17.188.179] not internal
>Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): not authenticatedесли автор хочет чтобы оно для этого IP подписывалось, то нужно его добавить
>> А адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
>> 172.17.188.179?
> этот IP не прописан потому что:
>>Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): unknown [172.17.188.179] not internal
>>Nov 16 01:08:54 smtp opendkim[18484]: (unknown-jobid): not authenticated
> если автор хочет чтобы оно для этого IP подписывалось, то нужно его
> добавитьЭто IP компа почтового клиента.
>[оверквотинг удален]
>>> 127.0.0.1
>>> и дальше ip адреса с которых почта будет подписываться, или сети...
>>> 11.22.33.44
>> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
>> (путь к ключу) не является root. Установили. Запустился, тестируем -
>> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
>> domain.ru 4E39A157B1D
> А адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
> 172.17.188.179?
> Что теперь пишет в логах постфикса и опендким?Письма отправляются с этого же сервера, т.е. 127.0.0.1
Он, конечно, прописан.
>[оверквотинг удален]
>>>> 11.22.33.44
>>> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
>>> (путь к ключу) не является root. Установили. Запустился, тестируем -
>>> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
>>> domain.ru 4E39A157B1D
>> А адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
>> 172.17.188.179?
>> Что теперь пишет в логах постфикса и опендким?
> Письма отправляются с этого же сервера, т.е. 127.0.0.1
> Он, конечно, прописан.Удивительно, но когда добавили IP компа на котором стоит почтовая программа - стал подписывать! Т.е. получается нужно разрешить всем экстернальным и выборочным интернальным хостам?
> Удивительно, но когда добавили IP компа на котором стоит почтовая программа -
> стал подписывать! Т.е. получается нужно разрешить всем экстернальным и выборочным интернальным
> хостам?что за "почтовая программа"? вы IT специалист или кто? может имели ввиду POP3/IMAP клиент типа Outlook, Thunderbird и все такое?
суть DKIM в том чтобы подписывать исходящие сообщения "отправителя" c цифровой подписью связанную с именем домена(вашем примере domen.ru). ведь клиент который отправляет письмо не сидит же на самом сервере и не через webmail какой нибудь.
простыми словами, ваш IP 172.17.188.179 который используя POP3 протокол получает письма от сервера x.domen.ru и отправляет письма тоже через SMTP протокол x.domen.ru и вы директивой InternalHosts указываете чтобы все письма от них подписывались подписью домена. в этот список вы Ивана из Gmail или африканской республики не добавляете, только те пользователи или системы, которые через ваш SMTP отправляют письма от имени @domain.ru
>[оверквотинг удален]
> POP3/IMAP клиент типа Outlook, Thunderbird и все такое?
> суть DKIM в том чтобы подписывать исходящие сообщения "отправителя" c цифровой подписью
> связанную с именем домена(вашем примере domen.ru). ведь клиент который отправляет письмо
> не сидит же на самом сервере SMTP
> простыми словами, ваш IP 172.17.188.179 который используя POP3 протокол получает письма
> от сервера x.domen.ru и отправляет письма тоже через SMTP протокол x.domen.ru
> и вы директивой InternalHosts указываете чтобы все письма от них подписывались
> подписью домена. в этот список вы Ивана из Gmail или африканской
> республики не добавляете, только те пользователи или системы, которые через ваш
> SMTP отправляют письма от имени @domain.ruА почтовая программа - это не почтовый клиент? За подсказку, конечно, спасибо, но вы помогаете или самоутверждаетесь здесь? Мы в курсе про протоколы и принципы работы почты. Однако DKIM призван удостоверять, что почта отправлена именно с этого домена. А кто ее отправил - совершенно не важно. Следуя вашей логике, мне нужно всех пользователей аутлуков и других ПОЧТОВЫХ КЛИЕНТОВ завести в этот файл. А если они меняются динамически?
> А почтовая программа - это не почтовый клиент?нет, почтовой программой можно назвать любую программу которая работает с почтой. не важно, отправляет, сортирует, фильтрирует, проверяет на вирусы и т.д.
> но вы помогаете или самоутверждаетесь здесь?
самоутрвеждаться мне не нужно, я тут чтобы таким как вы открыть глаза, чтобы понимали что делали, а не в тупую по какой нить инструкции копи-пастом
> Однако DKIM призван удостоверять, что почта отправлена
> именно с этого домена. А кто ее отправил - совершенно не
> важно.идите читайте:
http://opendkim.org/opendkim.conf.5.html (InternalHosts)
https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail
https://ru.wikipedia.org/wiki/DomainKeys_Identified_Mailпотому и называется "DomainKeys" Identified Mail (переводчик в помощь) и не спорьте!
>Следуя вашей логике, мне нужно всех пользователей аутлуков и других ПОЧТОВЫХ КЛИЕНТОВ >завести в этот файл. А если они меняются динамически?
если указан KeyTable и SigningTable то директива Domain * не будет работать. попробуйте закомментировать таблицы если хотите для всех ваших доменов подписывать
и
https://tools.ietf.org/html/rfc6376 (B.1.3. Roaming Users) гласит:
Roaming users often find themselves in circumstances where it is
convenient or necessary to use an SMTP server other than their home
server; examples are conferences and many hotels. In such
circumstances, a signature that is added by the submission service
will use an identity that is different from the user's home system.Ideally, roaming users would connect back to their home server using
either a VPN or a SUBMISSION server running with SMTP AUTHentication
on port 587. If the signing can be performed on the roaming user's
laptop, then they can sign before submission, although the risk of
further modification is high. If neither of these are possible,
these roaming users will not be able to send mail signed using their
own domain key.
>[оверквотинг удален]
>>>> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
>>>> domain.ru 4E39A157B1D
>>> А адрес с которого шлется прописан в /etc/opendkim-internal-hosts?
>>> 172.17.188.179?
>>> Что теперь пишет в логах постфикса и опендким?
>> Письма отправляются с этого же сервера, т.е. 127.0.0.1
>> Он, конечно, прописан.
> Удивительно, но когда добавили IP компа на котором стоит почтовая программа -
> стал подписывать! Т.е. получается нужно разрешить всем экстернальным и выборочным интернальным
> хостам?Да, подписываться будут только те сети, которые прописаны в internal-hosts.
Остальное лежит на плечах системных админов и почтовых мастеров. Что бы не было тех сетей которые не ваши существует куча методов... От sasl авторизаций до всяких там выпыэнов и внутренних сетей...
>[оверквотинг удален]
>> domain.ru
>> *.domain.ru
>> $cat /etc/opendkim-internal-hosts
>> 127.0.0.1
>> и дальше ip адреса с которых почта будет подписываться, или сети...
>> 11.22.33.44
> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
> (путь к ключу) не является root. Установили. Запустился, тестируем -
> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
> domain.ru 4E39A157B1DПокажите ещё вывод netstat -antup |grep dkim из род root
>[оверквотинг удален]
>>> *.domain.ru
>>> $cat /etc/opendkim-internal-hosts
>>> 127.0.0.1
>>> и дальше ip адреса с которых почта будет подписываться, или сети...
>>> 11.22.33.44
>> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
>> (путь к ключу) не является root. Установили. Запустился, тестируем -
>> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
>> domain.ru 4E39A157B1D
> Покажите ещё вывод netstat -antup |grep dkim из род root# netstat -antup |grep dkim
tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN 4738/opendkim
tcp 0 0 127.0.0.1:8891 127.0.0.1:33172 ESTABLISHED 4738/opendkim
tcp 0 0 127.0.0.1:8891 127.0.0.1:33173 ESTABLISHED 4738/opendkim
tcp 0 0 127.0.0.1:8891 127.0.0.1:33177 ESTABLISHED 4738/opendkim
tcp 0 0 127.0.0.1:8891 127.0.0.1:32998 ESTABLISHED 4738/opendkim
> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
> (путь к ключу) не является root. Установили. Запустился, тестируем -
> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
> domain.ru 4E39A157B1Dну дык в логах значит много сообщений было :), а ты твердишь только одна запись.
когда просят лог, выдавай лог как есть без всяких там одна строчка и все такое, телепаты до сих пор в отпуске...
>> Попробовали. Сначала ругался на то, что владельцем папок /etc/opendkim /etc/opendkim/keys
>> (путь к ключу) не является root. Установили. Запустился, тестируем -
>> результат тот же: Одна запись в заголовке DKIM-Filter: OpenDKIM Filter v2.9.0
>> domain.ru 4E39A157B1D
> ну дык в логах значит много сообщений было :), а ты твердишь
> только одна запись.
> когда просят лог, выдавай лог как есть без всяких там одна строчка
> и все такое, телепаты до сих пор в отпуске...Одна строка - имеется ввиду запись в заголовке письма, которое подписывается opendkim.
Вот подобный слуйчай, но человек не может ответить, что конкретно не так.
В первом письме одна запись (нет записи с подписью):
DKIM-Filter: OpenDKIM Filter v2.9.1 school-php.com 7A8F0420CE1Во втором две, как положено (есть запись с подписью):
DKIM-Filter: OpenDKIM Filter v2.9.1 school-php.com 430CC420CE1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=school-php.com;
s=mail; t=1426128237;
bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;
h=To:Subject:Date:From:From;
b=GGUaCx4e2W+VEElArWpPX7Puie/j3VKBO22dQKqwkvCS2KsG6acMktfJ3YZq9/WTa
xQ6RB3XTbetZlpYz9l46rb4wStfJyH20b20Ju7fxKpASD3h7UCUfVP+cC5DF4/1lyZ
QJTCqxrEaGbZuFooihTrvtRJboKMtar6xQIVbnbw=http://phpforum.su/index.php?showtopic=85592&st=0entry3094191
Хоть и старая ветка, но добавлю сюда:
Чтобы opendkim подписывал не только письма с тех IP, которые указаны как Internal, а и те, которые отправлены с любых IP но пользователь был аутентифицирован (исправляем "not authenticated") нужно в opendkim.conf добавить:
Mode vs
> Хоть и старая ветка, но добавлю сюда:
> Чтобы opendkim подписывал не только письма с тех IP, которые указаны как
> Internal, а и те, которые отправлены с любых IP но пользователь
> был аутентифицирован (исправляем "not authenticated") нужно в opendkim.conf добавить:
> Mode vsВсем привет.
Перепробовал уже все, что только можно, не подписывает, и все.
Смысл такой: локальная почта (отсылаемая с самого сервера, например, из скриптов или через веб-мэйл) подписывается норм, а внешние почтовые клиенты (аутлук, Зэ Бат и проч) ни в какую.
Если прописать айпи, на котором почтовый клиент, в TrustedHosts, то тоже подписывается.
Как сделать, чтобы все внешние клиенты подписывались?
Используется настройки key table и signing table
>[оверквотинг удален]
>> был аутентифицирован (исправляем "not authenticated") нужно в opendkim.conf добавить:
>> Mode vs
> Всем привет.
> Перепробовал уже все, что только можно, не подписывает, и все.
> Смысл такой: локальная почта (отсылаемая с самого сервера, например, из скриптов или
> через веб-мэйл) подписывается норм, а внешние почтовые клиенты (аутлук, Зэ Бат
> и проч) ни в какую.
> Если прописать айпи, на котором почтовый клиент, в TrustedHosts, то тоже подписывается.
> Как сделать, чтобы все внешние клиенты подписывались?
> Используется настройки key table и signing tableЭврика! Я нашел, правда для своего случая, но вектор годный!!! Кому будет интересно, в opendkim.conf есть такая директива MacroList ее смысл, как я уловил в том чтобы расширить критерии для определения какие письма идут изнутри, т.е. требуют подписи. Эти макро, передает в opendkim через протокол milter MTA. Для sendmail-а это выглядит так:
[root@cloud mail]# grep Milter *.cf
sendmail.cf:O Milter.macros.connect=j, _, {daemon_name}, {if_name}, {if_addr}
sendmail.cf:O Milter.macros.helo={tls_version}, {cipher}, {cipher_bits}, {cert_subject}, {cert_issuer}
sendmail.cf:O Milter.macros.envfrom=i, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}
sendmail.cf:O Milter.macros.envrcpt={rcpt_mailer}, {rcpt_host}, {rcpt_addr}
sendmail.cf:O Milter.macros.eom={msg_id}
[root@cloud mail]#Так вот в моем случае достаточно было указать издателя сертификата (у меня пользователи авторизуются на MTA по сертификатам) и все взлетело:
MacroList cert_issuer=/C=RU/ST=Moscow/L=Moscow/O=XXXXX+20Ltd/OU=IT/CN=XXXXX+20Ltd+20CA/name=xxxxx/emailAddress=root@xxxxx.tldОпределенно представляет интерес макрос auth_authen, и есть предположение что макросов можно докинуть из настроек MTA, типа домен отправителя и т.д.
У меня похожая проблема. Только внутренние адреса идентифицирует not internal.
Пробовал в файле TrustedHosts указать всю локальную сесть через CIDR. Не работает! Пришлось прописать все компьютеры сети.
Есть подозрение, что надо поиграться с файлом /etc/hosts.А в вашем случае, возможно, надо весь интернет прописать как внутренний :)