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

Исходное сообщение
"Sendmail + Docecot deliver - не доставляет виртуальным"

Отправлено ESP , 27-Сен-09 12:00 
Доброго времени суток!
Пытаюсь сделать доставку писем, используя 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.conf

base_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 = plain

  passdb 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'у.
Буду благодарен любой помощи...


Содержание

Сообщения в этом обсуждении
"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 28-Сен-09 12:58 
1. Какой пример вы использовали?
2. Покажите "echo $=w"|sendmail -bt.
3. Непонятно, почему в mailertable & virtusertable у вас фигурируют одни и те же домены?

"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 28-Сен-09 20:12 
>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.localdomain

localhost
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'у письмо передалось, но он не нашел такого пользователя... Такое ощущение, что я упорно что-то упускаю...



"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 29-Сен-09 12:45 
>>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'у письмо передалось, но он не нашел такого пользователя... Такое
>ощущение, что я упорно что-то упускаю...


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 30-Сен-09 06:23 
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, которого у вас, видимо , в
>системе нет.


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 30-Сен-09 14:21 
>Письмо, пришедшее на user1@test1.ru и на user2@test1.ru, должно быть доставлено
>одному и тому же пользователю.

Конечно же, имелось ввиду "на user1@test1.ru и на user1@test2.ru".


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 30-Сен-09 14:48 
>Дело в том, что 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] somelocaluser

makemap hash virtusertable <virtusertable

+ ОБЯЗАТЕЛЬНО сказать sendmail, что test1.ru & test2.ru - ЛОКАЛЬНЫЕ ДОМЕНЫ, то есть принадлежат классу w (например, прописав их в /etc/mail/local-host-names). Иначе sendmail даже не заглянет в эту таблицу, если почта придет для этих доменов.

>Вчера весь вечер читал мануалы, но у меня так и не сложилось
>полной картины. Для начала хочу понять - реально ли то, чего
>я пытаюсь добиться, на указанной связке sendmail + dovecot?

Вот этого я не знаю, dovecot не пользуюсь,
но вроде из тех ссылок, что вы указали, следует, что это возможно, так что дерзайте ...

Пока могу сказать, что мне не нравится, как вы прописываете локальные mailer'ы


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 01-Окт-09 11:14 
>Посмотрите про вирт. домены - 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
>даже не заглянет в эту таблицу, если почта придет для этих
>доменов.


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 01-Окт-09 13:57 
>Попробовал. Тогда оба письма доставятся одному и тому же локальному пользователю somelocaluser.
>Или тут уже нужно раздать кому надо procmail'ом?

"Письмо, пришедшее на user1@test1.ru и на user2@test2.ru, должно быть доставлено одному и тому же пользователю."

Что не так?


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 01-Окт-09 14:50 
>>Попробовал. Тогда оба письма доставятся одному и тому же локальному пользователю somelocaluser.
>>Или тут уже нужно раздать кому надо procmail'ом?
>
>"Письмо, пришедшее на user1@test1.ru и на user2@test2.ru, должно быть доставлено одному и
>тому же пользователю."
>
>Что не так?

Конечно же, имелось ввиду "на user1@test1.ru и на user1@test2.ru".

Может быть, я несколько неточно выразился. Наверно, проблема несколько уже - я хочу понять, можно ли обойтись одним локальным пользователем linux для того, чтобы обеспечить в компании различными почтовыми ящиками, скажем, 30 человек?


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 01-Окт-09 15:25 
>Может быть, я несколько неточно выразился. Наверно, проблема несколько уже - я
>хочу понять, можно ли обойтись одним локальным пользователем linux для того,
>чтобы обеспечить в компании различными почтовыми ящиками, скажем, 30 человек?

Можно, если вы знаете, что будет различителем -
домен, ключевое слово в заголовке, linux+detail@domain.ru



"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 01-Окт-09 17:02 
>Можно, если вы знаете, что будет различителем -
>домен, ключевое слово в заголовке, linux+detail@domain.ru

А где можно про это почитать поподробнее, или может быть, пример есть?
Надеюсь, я не слишком назойлив :)


"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено Medlar , 01-Окт-09 18:33 
1 - вирт. домены
2 - procmail
3 - см. раздел virtusertable в .../sendmail/cf/README

"Sendmail + Docecot deliver - не доставляет виртуальным"
Отправлено ESP , 06-Окт-09 07:58 
А в общем-то, ключ ко всему был в понимании различия классов адресов :) Притом, что самое смешное, это различие я понял, уже окончательно отчаявшись настроить все так, как хочу, и начав читать документацию по 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/...