URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 36196
[ Назад ]

Исходное сообщение
"И снова: Cyrus-IMAPD (2.0...) + Sendmail"

Отправлено A Clockwork Orange , 20-Окт-03 18:55 
Возвращаясь к тебе.

Как настроить sendmail что бы на этапе соединения SMTP о давал отлуп если почта идет для несуществующего пользователя?!!!


Содержание

Сообщения в этом обсуждении
"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено viewn , 20-Окт-03 19:17 
>Возвращаясь к тебе.
>
>Как настроить 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)


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено AR , 21-Окт-03 07:45 
>Возвращаясь к тебе.
>
>Как настроить sendmail что бы на этапе соединения SMTP о давал отлуп
>если почта идет для несуществующего пользователя?!!!

FEATURE(`delay_checks') должно помочь.


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 21-Окт-03 08:53 
Уточняю, несуществующий пользовтель, имеетеся ввиду несуществующий пользователь (почтовый ящик) Cyrus.
Т.е. сендмейл на этапе соединения должен проверить существует ли такой почтовый ящик cyrus.

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено AR , 21-Окт-03 09:33 
>Уточняю, несуществующий пользовтель, имеетеся ввиду несуществующий пользователь (почтовый ящик) Cyrus.
>Т.е. сендмейл на этапе соединения должен проверить существует ли такой почтовый ящик
>cyrus.

Странное чего-то у тебя, у меня и не принмает, cyrus + sendmail настроил по доке идущей вместе с cyrus 2.0.17 (поставлен из портов).

Пока не было опции check_delay, постмастеру действительно сыпались сообщения о том, что юзверь не существует и приатачевалось само сообщение. С этой опцией сыпятся только заголовки, самого сообщения нет. Никаких левых патчей не юзаю, все настроено по доке + эта опция. Сендмайл 8.11.7 (поставлен из портов). Фря 4.8.


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 21-Окт-03 10:44 
1. Давай попробуем отлупит меня или нет если я пошлю на несуществующий ящик.
2. Так вообще ничего не должно сыпаться, сообщение не должно вообще приходить на сервер

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 21-Окт-03 10:47 
AR
и пожалуйста цитату по этому поводу из документации

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено AR , 21-Окт-03 11:54 
>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/lmtp

LOCAL_RULE_0
R$=N                    $: $#local $: $1
R$=N < @ $=w . >        $: $#local $: $1
Rbb + $+ < @ $=w . >    $#cyrus $: + $1

Пробуй. Больше вряд ли чего смогу еще сказать. У меня так, и это работает. Разбираться почему у меня ЭТО РАБОТАЕТ у меня нет времени. :)))


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 21-Окт-03 13:18 
Спасибо за конфиг.

Вопросы.

>меня работает так как надо. И в логах сам cyrus ругается
>что пользователя нет.
Мне кажется что этого уже не должно было быть, если cyrus ругается значит почта для несуществующего ящика принатя и передана cyrus.


В конфиге отчего то не видно строки
MAILE(cyrus)
вероятно ты ее стер копируя файл.


Так что не теште себя сендмейл исправно принимает почту для несуществующих пользоваетлей cyrus.

И спасибо, за попытку.


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено viewn , 21-Окт-03 13:32 
Честно говоря я про 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)
Чему собственно говоря и посвящается вышеприведенный хак.
Жаль вот только у меня не получаестя пока его прикрутить:(
И я тоже надеюсь на помощь.


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 21-Окт-03 13:39 
viewn

9  строка сверку check_delay

Послал тебе письмо на  view@bigmir.net с одного сервера вообще не дошло с другого ответа нет.
А куда ты хочешь все это прикрутить то?
Давай свяжемся может вместе сообразим


"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 22-Окт-03 08:53 
Идеи не появились.
Как заставить сендмейл перед приемкой почты проверять ядрес в каком-нибудь файле?

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 22-Окт-03 12:11 
Lavr
У тебя есть по этому поводу мысли?

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено A Clockwork Orange , 23-Окт-03 08:58 
Никто не работает с такой связкой?

"И снова: Cyrus-IMAPD (2.0...) + Sendmail"
Отправлено viewn , 23-Окт-03 12:55 
>viewn
>
>9  строка сверку check_delay
>
>Послал тебе письмо на  view@bigmir.net с одного сервера вообще не дошло
>с другого ответа нет.
Гым-гым... Не получал, однако:(

>А куда ты хочешь все это прикрутить то?
Дык к sendmail'у родимому и хочу!

>Давай свяжемся может вместе сообразим
Ты пробовал вышеприведенный хак? У меня cyrus 1.6.24, следовательно
как минимум нет "ctl_mboxlist". В "ближайшее время" (из-за отсутствия оного, а также непрозрачности перехода на "двойку") переустанавливать cyrus не собираюсь.
Но в принципе было бы очень интересно услышать о реальных результатах работы хака.

Где же lavr?...:)