0. для чего это нужно:
В связи с некоторым распространением SPF (sender policy framework) возникает
такая проблема: администратор домена отправителя
пример godaddy.com прописывает в ДНС
для своего домена текстовую запись, указывая с каких ip-адресов все остальные
почтовые сервера имеют право получать письмо с обратным адресом этого домена.
Так же этот администратор может рекомендовать запретить принимать
письма с остальных ip-адресов. Теперь предположим, что на Ваш сервер
пример mail.mydomain.ru пришло
письмо с обратным адресом от такого домена
пример info@godaddy.com И предположим, что у Вас стоит
переадресация для получателя пример
noc@mydomain.ru-->vasya@yandex.ru. Тогда Ваш почтовый сервер пересылает это письмо.
Итак, что видит сервер того домена на который идет переадресация: с ip-адреса
Вашего сервера приходит письмо с обратым адресом
info@godaddy.com.
Сервер делает запрос TXT записи для домена
godaddy.com и получает ответ
"v=spf1 include:spf.secureserver.net -all"Поскольку Ваш сервер mail.mydomain.com или его ip-адрес не вклчюен в spf.secureserver.net а следующая инструкция -all запрещает прием от всех остальных ip-адресов, сервер получателя отвергает такое письмо.
|
godaddy.com=info@forward.mydomain.ruВы также можете прописать соответствующую SFP запись для поддомена forward.mydomain.ru например такую
forward IN TXT "v=spf1 a:mail.mydomain.ru -all"тем самым разрешив принимать почту с обратным адресом из домена forward.mydomain.ru только от своего почтового сервера mail.mydomain.ru
|
1. что нам понадобится
$ sendmail -dв списке Compiled with: вы должны увидеть опцию SOCKETMAP
$ cat devtools/Site/site.config.m4 APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -DMAP_REGEX -DMILTER -DSASL=2 -DSOCKETMAP') APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto -lsasl2')
2.установка
Считаем, что Mail::SRS у нас уже установлен.
распаковываетм srs-socketmapd.0.32rc3.tar.gz
файл INSTALL очень информативен, вот краткий пересказ:
копируем :
srs-socketmapd.m4 в директрию сорцов sendmail в cf/hack/
srs-socketmapd в /etc/init.d/srs-socketmapd
srs-socketmapd.0.32rc3.pl в /usr/local/sbin/srs-socketmapd.0.32rc3.pl
делаем симлинк ln -s /usr/local/sbin/srs-socketmapd /usr/local/sbin/srs-socketmapd.0.32rc3.pl
srs-socketmapd.conf в /etc/srs-socketmapd.conf
заводим нового пользователя от когорого будет работать демон
можно, конечно взять и существующего, типа nobody
редактируем /etc/srs-socketmapd.conf
убираем EXAMPLE = yes ;)
пишем секрет (я так и не понял для чего он)
для сокета я создал директорию /var/run/srs/ и сделал ее владельцем этого юзера
соответственно, опция SOCKETPATH=/var/run/srs/srs-socketmapd.sock
ALIAS=forward.mydomain.ru - это то на что меняется адрес
больше ничего не менял.
запускаем демона
/etc/init.d/srs-socketmapd startпроверяем ошибки в /var/log/messages
после успешного запуска демона редактируем конфиг sendmail:
сразу после mailer-ов добавляем строку
MAILER(smtp)dnl MAILER(local)dnl HACK(srs-socketmapd, local:/var/run/srs/srs-socketmapd.sock)перестраиваем sendmail.cf и копируем его в /etc/mail, перезапускаем sendmail и вроде все
3.обработка напильником
итак, сейчас система настроена на перезапись адресов отправителей от всех
доменов исключая локальные. чтобы узнать какие домены считаются локальными
# echo '$=w' | sendmail -btВ моем случае пересылающий сервер не отвечал за мой домен mydomain.ru и поэтому переписывал всех отправителей. Меня это не устраивало. Пришлось исправить файл cf/hack/srs-socketmapd.m4
divert(-1) # Copyright (c) 2004 by Mark Kramerпримечания:... ... # SRS regex map Kis_srs regex ^<?SRS[01][-+=].* Kis_mydomain regex -aISMYDOMAIN mydomain.ru Kstorage macro ifdef(`SRS_EX_RCPT_DN', ` F{S}-o SRS_EX_RCPT_DN %[^\#] ') MAILER_DEFINITIONS SEnvFromSMTP #storing R$* $: $(storage {FR} $@ $1 $) $1 # forward srs rewrite R$+ $: $>ForwardSrs $1 LOCAL_RULESETS ... ... # Forward rewrite SRS default R$* $: $(is_mydomain $1 $) R$*ISMYDOMAIN $@ $&{FR} R$* $: $(make_srs $1 $) ')dnl ')dnl LOCAL_RULE_0 # Do we need to reverse SRS address? R$* $: $>ReverseSrs $1
Kis_mydomain regex -aISMYDOMAIN mydomain.ru|otherdomain.com|third.orgне забываем, что правая часть правил отделена от левой не пробелами, а табуляцией
4.To Do
Осталось неосвоенным обратное преобразование адреса.
если получатель недоступен где-то дальше, отлупы об ошибках приходят на
домен forward.mydomain.ru
Было бы здорово их пересылать оригинальному отправителю
UPD Вот для этого и существует сигнатура и ключ в
настройках сервера - при получении почты на домен forward.mydomain.ru
проверяется сигнатура и если обратный адрес подписаный ключем сервера совпадает
с сигнатурой, письмо переправляется оригинальному отправителю