Доброго времени суток!
Пытаюсь сделать доставку писем, используя dovecot deliver.
Имеем: CentOS 5.3, Sendmail 8.13.8, Dovecot 1.0.7.
Хочу получить - сендмаил отдает письма deliver вместо локального сортировщика, а тот раскидывает их по папкам вида /home/vmail/%u/Maildir. Пользователи виртуальтые.
Но проблема в том, что записи из virtusertable упорно игнорируются, и почта оставляется в папку локальному пользователю vmail, а именно в /home/vmail/vmail/Maildir.Конфиги:
//----------mailertable
test1.ru local:local
test2.ru local:local//----------virtusertable
user1@test1.ru vmail
user2@test2.ru vmail//----------semdmail.mc (практически дефолтный, только мейлер заменил)
divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is
dnl # installed and then performing a
dnl #
dnl # make -C /etc/mail
dnl #
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl
define(`confDEF_USER_ID', ``8:12'')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
define(`confTO_IDENT', `0')dnl
FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
define(`LOCAL_MAILER_PATH',`/usr/libexec/dovecot/deliver')
define(`LOCAL_MAILER_FLAGS',`DFMPhfnu9')
define(`LOCAL_MAILER_ARGS',`deliver -f $g -d $u')
MAILER(local)dnl
MAILER(smtp)dnl
//----------dovecot.confbase_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
ssl_disable = yes
mail_location = maildir:/home/vmail/%u/Maildir
protocol imap {
}protocol pop3 {
pop3_uidl_format = XuXv
}protocol lda {
postmaster_address = postmaster@localhost
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
log_path =
info_log_path =
}auth default {
mechanisms = plainpassdb pam {
}passdb passwd-file {
args = /etc/dovecot/passwd
}userdb passwd {
}userdb static {
args = uid=vmail gid=vmail home=/home/vmail/%u
}user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = dovecot
group = dovecot
}
}
}dict {
}plugin {
}Наличие доменов в классе w тоже проверял - не работает хоть с ними, хоть без них - вся почта валится vmail'у.
Буду благодарен любой помощи...
1. Какой пример вы использовали?
2. Покажите "echo $=w"|sendmail -bt.
3. Непонятно, почему в mailertable & virtusertable у вас фигурируют одни и те же домены?
>1. Какой пример вы использовали?Все настраивал на основе:
http://wiki.dovecot.org/HowTo/SimpleVirtualInstall
http://wiki.dovecot.org/LDA
http://wiki.dovecot.org/LDA/Sendmailи еще немного тут:
http://forum.linux.ru/index.php?t=msg&th=89806&start=0
>2. Покажите "echo $=w"|sendmail -bt.
WARNING: local host name (testserver) is not qualified; see cf/README: WHO AM I?
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> localhost.localdomainlocalhost
testserver
>
>3. Непонятно, почему в mailertable & virtusertable у вас фигурируют одни и
>те же домены?В mailertable в вики просят перечислить домены и мейлеры, которые будут доставлять для них почту. В virtusertable я перечислил соответствие виртуальных пользователей реальным.
Сейчас вот дома на виртутальной машине попробовал поднять все по мануалам, абсолютно чистая установка. DNS есть, MX-записи тоже. В результате в maillog получаю:
Sep 29 06:11:04 testserver sendmail[3369]: n8SNAWNT003369: from=user1@test1.ru, size=13, class=0, nrcpts=1, msgid=<200909282310.n8SNAWNT003369@testserver>, proto=SMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Sep 29 06:11:04 testserver sendmail[3371]: n8SNAWNT003369: to=user2@test2.ru, delay=00:00:07, xdelay=00:00:00, mailer=dovecot, pri=120013, relay=dovecot, dsn=5.1.1, stat=User unknown
Sep 29 06:11:04 testserver sendmail[3371]: n8SNAWNT003369: n8SNB4NT003371: DSN: User unknown
Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NT003371: to=user1@test1.ru, delay=00:00:00, xdelay=00:00:00, mailer=dovecot, pri=31337, relay=dovecot, dsn=5.1.1, stat=User unknown
Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NT003371: n8SNB4NU003371: return to sender: User unknown
Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NU003371: to=root, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=32361, dsn=2.0.0, stat=SentТ.е. вроде deliver'у письмо передалось, но он не нашел такого пользователя... Такое ощущение, что я упорно что-то упускаю...
>>2. Покажите "echo $=w"|sendmail -bt.
>
>WARNING: local host name (testserver) is not qualified; see cf/README: WHO AM
>I?
>ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
>Enter <ruleset> <address>
>> localhost.localdomain
>
>localhost
>testserverочень странный у вас класс w
>>
>>3. Непонятно, почему в mailertable & virtusertable у вас фигурируют одни и
>>те же домены?
>
>В mailertable в вики просят перечислить домены и мейлеры, которые будут доставлять
>для них почту. В virtusertable я перечислил соответствие виртуальных пользователей реальным.man mailertable &virtusertable
В первом случае в левом столбце можно указывать только адреса, внешние для вас, то есть, кода домен не принадлежит классу w.
Во втором - наоборот, только принадлежащие вам, то есть локальные для вашего sendmail адреса.
>Sep 29 06:11:04 testserver sendmail[3369]: n8SNAWNT003369: from=user1@test1.ru, size=13, class=0, nrcpts=1, msgid=<200909282310.n8SNAWNT003369@testserver>, proto=SMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
>Sep 29 06:11:04 testserver sendmail[3371]: n8SNAWNT003369: to=user2@test2.ru, delay=00:00:07, xdelay=00:00:00, mailer=dovecot, pri=120013, relay=dovecot,
>dsn=5.1.1, stat=User unknown
>Sep 29 06:11:04 testserver sendmail[3371]: n8SNAWNT003369: n8SNB4NT003371: DSN: User unknownПоскольку домен test2.ru является внешним, то он обслуживается только таблицей
mailertable. А это таблица понуждает отправлять почту для домена test2
локальному доставщику для локального юзера local, которого у вас, видимо , в системе нет.
>Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NT003371: to=user1@test1.ru, delay=00:00:00, xdelay=00:00:00, mailer=dovecot, pri=31337, relay=dovecot,
>dsn=5.1.1, stat=User unknown
>Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NT003371: n8SNB4NU003371: return to sender: User unknown
>
>Sep 29 06:11:04 testserver sendmail[3371]: n8SNB4NU003371: to=root, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=32361, dsn=2.0.0,
>stat=Sent
>
>Т.е. вроде deliver'у письмо передалось, но он не нашел такого пользователя... Такое
>ощущение, что я упорно что-то упускаю...
Medlar, во-первых, спасибо, что отвечаете! Дело в том, что sendmail пока знаю плохо - достался по наследству на старой машине, а сейчас уже сам поднимаю на новой - осталась только почта. Пока идет сложно.
Хочу следующего - есть машина, на которой предполагается обработка почты с 2х доменов. DNS держит 2 мастер-зоны для этих доменов, МХ-записи так же присутствуют. Письмо, пришедшее на user1@test1.ru и на user2@test1.ru, должно быть доставлено одному и тому же пользователю. На старой машине все пользователи были локальные. На новой хочу завести только одного локального, а дальше доставщиком разбрасывать по виртуальным.Вчера весь вечер читал мануалы, но у меня так и не сложилось полной картины. Для начала хочу понять - реально ли то, чего я пытаюсь добиться, на указанной связке sendmail + dovecot?
>очень странный у вас класс w
В классе w должны быть все алиасы локального хоста. И то же время, как я понял, в нем не должно быть доменов, для которых вызывался бы локальный LDA, если я хочу использовать deliver?
В то же время, если посмотрите мой mc-файл, то там я вообще локальный LDA по умолчанию заменил на deliver, так что, как я понял, доставлять все должен он, и в принципе не важно, будут ли мои два домена в классе w.>[оверквотинг удален]
>man mailertable &virtusertable
>
>В первом случае в левом столбце можно указывать только адреса, внешние для
>вас, то есть, кода домен не принадлежит классу w.
>Во втором - наоборот, только принадлежащие вам, то есть локальные для вашего
>sendmail адреса.
>Поскольку домен test2.ru является внешним, то он обслуживается только таблицей
>mailertable. А это таблица понуждает отправлять почту для домена test2
>локальному доставщику для локального юзера local, которого у вас, видимо , в
>системе нет.
>Письмо, пришедшее на user1@test1.ru и на user2@test1.ru, должно быть доставлено
>одному и тому же пользователю.Конечно же, имелось ввиду "на user1@test1.ru и на user1@test2.ru".
>Дело в том, что sendmail пока знаю
>плохо - достался по наследству на старой машине, а сейчас уже
>сам поднимаю на новой - осталась только почта. Пока идет сложно.Посмотрите про вирт. домены - http://linux.ufaras.ru/sendm.html#3.17
Вторая ссылка - описание на русском>Хочу следующего - есть машина, на которой предполагается обработка почты с 2х
>доменов. DNS держит 2 мастер-зоны для этих доменов, МХ-записи так же
>присутствуют. Письмо, пришедшее на user1@test1.ru и на user2@test2.ru, должно быть доставлено
>одному и тому же пользователю. На старой машине все пользователи были
>локальные. На новой хочу завести только одного локального, а дальше доставщиком
>разбрасывать по виртуальным.Если бы вы использовали стандартный LDA mail.local, или procmail,
то в этом случае вам достаточно было бы (ес-но при наличии правильных
mx-записей для доменов test1.ru & test2.ru) создать virtusertable вида
user1@test1.ru [tab] somelocaluser
user2@test2.ru [tab] somelocalusermakemap hash virtusertable <virtusertable
+ ОБЯЗАТЕЛЬНО сказать sendmail, что test1.ru & test2.ru - ЛОКАЛЬНЫЕ ДОМЕНЫ, то есть принадлежат классу w (например, прописав их в /etc/mail/local-host-names). Иначе sendmail даже не заглянет в эту таблицу, если почта придет для этих доменов.
>Вчера весь вечер читал мануалы, но у меня так и не сложилось
>полной картины. Для начала хочу понять - реально ли то, чего
>я пытаюсь добиться, на указанной связке sendmail + dovecot?Вот этого я не знаю, dovecot не пользуюсь,
но вроде из тех ссылок, что вы указали, следует, что это возможно, так что дерзайте ...Пока могу сказать, что мне не нравится, как вы прописываете локальные mailer'ы
>Посмотрите про вирт. домены - http://linux.ufaras.ru/sendm.html#3.17
>Вторая ссылка - описание на русскомспасибо, как раз это я и читал.
>Если бы вы использовали стандартный LDA mail.local, или procmail,
>то в этом случае вам достаточно было бы (ес-но при наличии правильных
>
>mx-записей для доменов test1.ru & test2.ru) создать virtusertable вида
>user1@test1.ru [tab] somelocaluser
>user2@test2.ru [tab] somelocaluser
>
>makemap hash virtusertable <virtusertableПопробовал. Тогда оба письма доставятся одному и тому же локальному пользователю somelocaluser. Или тут уже нужно раздать кому надо procmail'ом?
>+ ОБЯЗАТЕЛЬНО сказать sendmail, что test1.ru & test2.ru - ЛОКАЛЬНЫЕ ДОМЕНЫ, то
>есть принадлежат классу w (например, прописав их в /etc/mail/local-host-names). Иначе sendmail
>даже не заглянет в эту таблицу, если почта придет для этих
>доменов.
>Попробовал. Тогда оба письма доставятся одному и тому же локальному пользователю somelocaluser.
>Или тут уже нужно раздать кому надо procmail'ом?"Письмо, пришедшее на user1@test1.ru и на user2@test2.ru, должно быть доставлено одному и тому же пользователю."
Что не так?
>>Попробовал. Тогда оба письма доставятся одному и тому же локальному пользователю somelocaluser.
>>Или тут уже нужно раздать кому надо procmail'ом?
>
>"Письмо, пришедшее на user1@test1.ru и на user2@test2.ru, должно быть доставлено одному и
>тому же пользователю."
>
>Что не так?Конечно же, имелось ввиду "на user1@test1.ru и на user1@test2.ru".
Может быть, я несколько неточно выразился. Наверно, проблема несколько уже - я хочу понять, можно ли обойтись одним локальным пользователем linux для того, чтобы обеспечить в компании различными почтовыми ящиками, скажем, 30 человек?
>Может быть, я несколько неточно выразился. Наверно, проблема несколько уже - я
>хочу понять, можно ли обойтись одним локальным пользователем linux для того,
>чтобы обеспечить в компании различными почтовыми ящиками, скажем, 30 человек?Можно, если вы знаете, что будет различителем -
домен, ключевое слово в заголовке, linux+detail@domain.ru
>Можно, если вы знаете, что будет различителем -
>домен, ключевое слово в заголовке, linux+detail@domain.ruА где можно про это почитать поподробнее, или может быть, пример есть?
Надеюсь, я не слишком назойлив :)
1 - вирт. домены
2 - procmail
3 - см. раздел virtusertable в .../sendmail/cf/README
А в общем-то, ключ ко всему был в понимании различия классов адресов :) Притом, что самое смешное, это различие я понял, уже окончательно отчаявшись настроить все так, как хочу, и начав читать документацию по postfix :) Нашел там про классы адресов, вернулся в sendmail и все настроил.Что озадачило - в /etc/dovecot/passwd, если писать user1{PLAIN}testpasswd, то sendmail не находит пользователя, когда deliver перед доставкой делает look-up в /etc/dovecot/passwd. Если же написать user1@test1.ru{PLAIN}testpasswd, то все доставляется. В официальной же документации пишут, что писать можно хоть как.
Единственное, чего мне не удалось добиться, чтобы доставлялось в /home/vmail/user1/Maildir. У меня почему-то ложится в /home/vmail/user1@test1.ru/Maildir/...