Возвращаясь к тебе.Как настроить sendmail что бы на этапе соединения SMTP о давал отлуп если почта идет для несуществующего пользователя?!!!
>Возвращаясь к тебе.
>
>Как настроить sendmail что бы на этапе соединения SMTP о давал отлуп
>если почта идет для несуществующего пользователя?!!!Значит дело было так. Есть 1.6.24.
Нашел материал "Когда приходит письмо не существующему
пользователю sendmail принимает его, и только потом генерит отлуп."
(http://unixfaq.ru/index.pl?req=qs&id=230).
Сделал - не получилось. Sendmail не захотел открывать /etc/sasldb.
Я потанцевал немного с бубном - без толку.
Написал на ЮниксФак. Ответили мне быстро.######################### cut #########################
Да, там сильно устаревшая информация и кроме того с ошибками. Сейчас у
меня есть наработки для Cyrus 2.2, с поддержкой виртуальных доменов.
Они составлены совместно с Сергеем Горячевым <goryatchev.sergey@rama.menatepspb.com>,
и так как мы еще не пришли к согласию, то они не опубликованы.Значит делается вот такой рулесет:
SCyrusmap
# Checks presence of user in cyrusdb
R$* + $- < @ $+ > $: $( cyruser $1 @ $3 $) + $2 < @ $3 > $1 # Handle user+detail
R$* <> + $- < @ $+ > $+ $@ $4 + $2 < @ $3 > # return
R$* < @ $+ > $: $( cyruser $1 @ $2 $) < @ $2 > $1 # Handle normal
R$* <> < @ $+ > $+ $@ $3 < @ $2 > # retrun
R$* $@ ERRORКарта cyruser объявляется вот таким образом:
Kcyruser hash -m -a<> /etc/mail/cyruserОткуда вызывать данный рулесет - спорный момент. У меня все почтовые домены повернуты
в cyrus с помощью virtusertable. Поэтому я слегка хакнул SParse1 (добавились две строчки):# not local -- try mailer table lookup
R$* <@ $+ > $* $: < $2 > $1 < @ $2 > $3 extract host name
R< $+ . > $* $: < $1 > $2 strip trailing dot
R< $+ > $* $: < $(mailertable $1 $) > $2 lookup
R< cyrusv2 : $+ > $- <@ $+ > $: < cyrusv2 : $1 > $>Cyrusmap $2 <@ $3 >
R$* ERROR $#error $@ 5.1.1 $: "550 User unknown"
R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 check -- resolved?
R< $+ > $* $: $>Mailertable <$1> $2 try domainСергей вызывает аналогичный рулесет из какого-то другого места.
Файл /etc/mail/cyruser генерится следующим скриптом:
#!/bin/sh
DEFAULTDOMAIN=bestcom.ru
[ `id -u` -ne 0 ] && {
echo "`basename $0`: needed root priveleges" >&2
exit 1
}su -m cyrus -c '/usr/local/cyrus/bin/ctl_mboxlist -d' | \
awk '{print $3". OK"}' | \
sed -E s/^\([^@\.]+\)\.\ /\\1@${DEFAULTDOMAIN}\.\ / | \
sort | uniq > /etc/mail/cyruser.$$[ $? -eq 0 ] || {
echo "`basename $0`: error creating mbox list /etc/mail/cyruser.$$" >&2
exit 1
}makemap hash /etc/mail/cyruser < /etc/mail/cyruser.$$ && \
rm -f /etc/mail/cyruser.$$Следует обратить внимание, что этот скрипт не отрабатывает user+detail@domain,
так что если у вас такие ящики есть - дописывайте сами.######################### cut #########################
На повторный вопрос (что делать с 1.6.24) ответа не последовало.
Попробуйте сделать с 2-кой.
Если получится - напишите (view@bigmir.net)
>Возвращаясь к тебе.
>
>Как настроить sendmail что бы на этапе соединения SMTP о давал отлуп
>если почта идет для несуществующего пользователя?!!!FEATURE(`delay_checks') должно помочь.
Уточняю, несуществующий пользовтель, имеетеся ввиду несуществующий пользователь (почтовый ящик) Cyrus.
Т.е. сендмейл на этапе соединения должен проверить существует ли такой почтовый ящик cyrus.
>Уточняю, несуществующий пользовтель, имеетеся ввиду несуществующий пользователь (почтовый ящик) Cyrus.
>Т.е. сендмейл на этапе соединения должен проверить существует ли такой почтовый ящик
>cyrus.Странное чего-то у тебя, у меня и не принмает, cyrus + sendmail настроил по доке идущей вместе с cyrus 2.0.17 (поставлен из портов).
Пока не было опции check_delay, постмастеру действительно сыпались сообщения о том, что юзверь не существует и приатачевалось само сообщение. С этой опцией сыпятся только заголовки, самого сообщения нет. Никаких левых патчей не юзаю, все настроено по доке + эта опция. Сендмайл 8.11.7 (поставлен из портов). Фря 4.8.
1. Давай попробуем отлупит меня или нет если я пошлю на несуществующий ящик.
2. Так вообще ничего не должно сыпаться, сообщение не должно вообще приходить на сервер
AR
и пожалуйста цитату по этому поводу из документации
>1. Давай попробуем отлупит меня или нет если я пошлю на несуществующий ящик.
Возьми сам да попробуй.>2. Так вообще ничего не должно сыпаться, сообщение не должно вообще приходить на сервер
Ага. Закрыть ваще 25-ый порт и все будет нормально. ;)
POSTMASTER'у сыпятся потому что я так хочу и так настроено. Если когда-нибудь запарит, то просто уберу строку define(`confCOPY_ERRORS_TO', `postmaster@localhost') и все будет нормально. ;)
Общей почте это никапли не мешает потому как ящик у postmaster'а отдельный и как раз на IMAP сервере, куда сообщения попадают автоматом.
>AR
>и пожалуйста цитату по этому поводу из документацииЯ документацию наизусть не учил. :) Я просто тебе сказал что у меня работает так как надо. И в логах сам cyrus ругается что пользователя нет. Если я отключаю опцию delay_checks в конфиге sendmail'а, то POSTMASTER'у сыпятся приатаченные принятые сообщения на несуществующего пользователя. Если включаю, то приатаченных сообщений нет. Это ли не факт, что проверка пользователя происходит на этапе приема заголовка? И что само сообщение не принимается в случае если юзверя не существует?
Вот мой конфиг (все строки dnl убраны):
divert(-1)
divert(0)
VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.11 2001/07/14 18:07:27 gshapiro Exp $')
OSTYPE(freebsd4)
DOMAIN(generic)FEATURE(access_db, `hash -o /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(`delay_checks')
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(relay_based_on_MX)
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')FEATURE(`dnsbl', `relays.ordb.org', `"550 Mail from " $&{client_addr} " rejected by blacklist relays.ordb.org"')
FEATURE(`dnsbl', `dul.ru', `"550 Mail from " $&{client_addr} " rejected by blacklist dul.ru"')
FEATURE(`dnsbl', `dnsbl.void.ru', `"550 Mail from " $&{client_addr} " rejected by blacklist dnsbl.void.ru"')
FEATURE(`dnsbl', `opm.blitzed.org', `"550 Mail from " $&{client_addr} " rejected by blacklist opm.blitzed.org"')
FEATURE(`dnsbl', `dnsbl.njabl.org', `"550 Mail from " $&{client_addr} " rejected by blacklist dnsbl.njabl.org"')
FEATURE(`dnsbl', `blackholes.wirehub.net', `"550 Mail from " $&{client_addr} " rejected by blacklist blackholes.wirehub.net"')
FEATURE(`dnsbl', `bl.spamcop.net', `"550 Mail from " $&{client_addr} " rejected by blacklist bl.spamcop.net"')
FEATURE(`dnsbl', `sbl.spamhaus.org', `"550 Mail from " $&{client_addr} " rejected by blacklist sbl.spamhaus.org"')define(`confCW_FILE', `-o /etc/mail/local-host-names')
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
define(`confCOPY_ERRORS_TO', `postmaster@localhost')
define(`confBIND_OPTS',`-DNSRCH -DEFNAMES')
define(`confLOCAL_MAILER', `cyrus')
MAILER(local)
MAILER(smtp)MAILER_DEFINITIONS
Mcyrus, P=[IPC], F=lsDFMnqA@/:|SmXz, E=\r\n,
S=EnvFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix,
A=FILE /var/imap/socket/lmtpLOCAL_RULE_0
R$=N $: $#local $: $1
R$=N < @ $=w . > $: $#local $: $1
Rbb + $+ < @ $=w . > $#cyrus $: + $1Пробуй. Больше вряд ли чего смогу еще сказать. У меня так, и это работает. Разбираться почему у меня ЭТО РАБОТАЕТ у меня нет времени. :)))
Спасибо за конфиг.Вопросы.
>меня работает так как надо. И в логах сам cyrus ругается
>что пользователя нет.
Мне кажется что этого уже не должно было быть, если cyrus ругается значит почта для несуществующего ящика принатя и передана cyrus.
В конфиге отчего то не видно строки
MAILE(cyrus)
вероятно ты ее стер копируя файл.
Так что не теште себя сендмейл исправно принимает почту для несуществующих пользоваетлей cyrus.И спасибо, за попытку.
Честно говоря я про check_delay тоже слышу впервые:(
И кстати в приведенном вами конфиге его нет.Я проводил "эксперименты" тыщу раз, но плюнул и сделал тыщу первый.
Вот кусок лога (строки пронумерованы мной)####################### cut #######################
1. Oct 21 12:01:43 redhat62 sendmail[3131]: h9L901wu003131: from=<view@bigmir.net>, size=879, class=0, nrcpts=1, msgid=<Bigmir&BasiliX-1.0.3b-10667267763f94f57806748@web02.sputnikmedia.net>, bodytype=8BITMIME, proto=ESMTP, daemon=MTA, relay=bogy.lincore.net [217.144.64.61]
2. Oct 21 12:01:43 redhat62 drweb-smf: dwlib: scan: message sent by <view@bigmir.net> is passed
3. Oct 21 12:01:43 redhat62 drweb-smf: [h9L901wu003131]: processing message from <view@bigmir.net> completed (exit code 3)
4. Oct 21 12:01:43 redhat62 sendmail[3151]: h9L901wu003131: to=<xxx@consult.kharkov.ua>, delay=00:00:00, xdelay=00:00:00, mailer=cyrus, pri=30671, dsn=5.1.1, stat=User unknown
5. Oct 21 12:01:43 redhat62 sendmail[3151]: h9L901wu003131: h9L91hws003151: DSN: User unknown
6. Oct 21 12:01:44 redhat62 sendmail[3151]: h9L91hws003151: to=<view@bigmir.net>, delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30000, relay=smtp.lin.com.ua [217.144.64.2], dsn=2.0.0, stat=Sent (S470041AbTJUJBo message accepted)
####################### cut #######################Итак мы отправляем письмо на несуществующий ящик "ххх" (стр.1)
Sendmail передает письмо фильтру DrWeb и тот его проверяет (стр.2) и возвращает (стр.3)
Стр.4 Sendmail передает письмо агенту доставки (cyrus) и только здесь(!!!) производится проверка и отлуп (стр.5)И это правильно! Поскольку sendmail ничего не знает о ящиках cyrus. Потому что sendmail работает с /etc/passwd, а п/я cyrus хранит в /etc/sasldb!
Вот и задача: научить sendmail пользоваться базой cyrus (/etc/sasldb)
Чему собственно говоря и посвящается вышеприведенный хак.
Жаль вот только у меня не получаестя пока его прикрутить:(
И я тоже надеюсь на помощь.
viewn9 строка сверку check_delay
Послал тебе письмо на view@bigmir.net с одного сервера вообще не дошло с другого ответа нет.
А куда ты хочешь все это прикрутить то?
Давай свяжемся может вместе сообразим
Идеи не появились.
Как заставить сендмейл перед приемкой почты проверять ядрес в каком-нибудь файле?
Lavr
У тебя есть по этому поводу мысли?
Никто не работает с такой связкой?
>viewn
>
>9 строка сверку check_delay
>
>Послал тебе письмо на view@bigmir.net с одного сервера вообще не дошло
>с другого ответа нет.
Гым-гым... Не получал, однако:(>А куда ты хочешь все это прикрутить то?
Дык к sendmail'у родимому и хочу!>Давай свяжемся может вместе сообразим
Ты пробовал вышеприведенный хак? У меня cyrus 1.6.24, следовательно
как минимум нет "ctl_mboxlist". В "ближайшее время" (из-за отсутствия оного, а также непрозрачности перехода на "двойку") переустанавливать cyrus не собираюсь.
Но в принципе было бы очень интересно услышать о реальных результатах работы хака.Где же lavr?...:)