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

Исходное сообщение
"Непонятки с Postfix-dovecot"

Отправлено jaged , 26-Авг-13 10:48 
Добрый день.
Решил поставить постфикс+довекот вместо мдемона, несколько дней уже с ним воюю, в итоге навертел чего-то что сам уже объяснить не могу как работает. Запутался уже окончательно.
ЧТо хотел - постфикс принимает почту и кладет ее в /var/mail/virtual-mailboxes/Имя_ящика  довекот отдает из этого же места.

Учетки хранятся в базе постгрес, список ящиков в файле/etc/postfix/virtual_mailboxes_recepients (Нужно это или нет, в инструкциях не объяснялось)

++++main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = mail.sterh.local
mydomain = sterh.local
myorigin = $mydomain
proxy_interfaces = 192.168.11.200
mydestination = $mydomain, $myhostname
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 192.168.11.0/24, 127.0.0.0/8
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 5
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = maildrop
html_directory = /usr/share/doc/postfix
manpage_directory = /usr/share/man
sample_directory = /etc/postfix
readme_directory = /usr/share/doc/postfix
inet_protocols = ipv4
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
virtual_transport = dovecot
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps
virtual_mailbox_domains = hash:/etc/postfix/virtual_mailbox_domains
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
virtual_mailbox_base = /var/spool/virtual_mailboxes
virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox_recipients

++++dovecot.conf
protocols = imap pop3
base_dir = /var/run/dovecot/
instance_name = dovecot
login_greeting = Dovecot ready.
#login_access_sockets =
#auth_proxy_self =
#verbose_proctitle = no
shutdown_clients = yes
dict {
  #quota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}


log_path = /var/log/dovecot.log
mail_debug = yes
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
ssl = no
#disable_plaintext_auth = no
#mail_home = /home/vmail/%d/%n
#mail_location = maildir:~/Maildir
auth_mechanisms = PLAIN LOGIN NTLM
service auth {
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0660
}
}

passdb {
  args = /usr/local/etc/dovecot/dovecot-sql.conf
  driver = sql
}
userdb {
    args = /usr/local/etc/dovecot/dovecot-sql.conf
driver = sql
}

login_greeting = Welcome to IMAP/POP3 server Sterh.
mail_location = /var/mail/virtual-mailboxes/%u
disable_plaintext_auth = no
mail_uid = 1000
mail_gid = 1000
auth_socket_path = /var/run/dovecot/auth-userdb


+++virtual_mailbox_recipients

jp@sterh.info    jp/
test2@sterh.info    test2/
test@sterh.info    test/
vs@sterh.info    vs/


Ошибки по поорядку исправлял, но вот столкнулся с этой, и не пойму что ему надо:

ошибка в довекот.лог

Aug 26 10:45:06 auth: Debug: auth client connected (pid=0)
Aug 26 10:45:06 auth: Debug: client in: AUTH    1    NTLM    service=smtp    nologin    lip=192.168.11.111    rip=192.168.11.124
Aug 26 10:45:06 auth: Debug: client passdb out: CONT    1    
Aug 26 10:45:06 auth: Debug: client in: CONT    1    TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw== (previous base64 data may contain sensitive data)
Aug 26 10:45:06 auth: Debug: client passdb out: CONT    1    TlRMTVNTUAACAAAAIAAgADAAAAAFAooAzTba4hmjcqQAAAAAAAAAACgAKABQAAAAZgByAGUAZQAuAHMAdABlAHIAaAAuAGwAbwBjAGEAbAADACAAZgByAGUAZQAuAHMAdABlAHIAaAAuAGwAbwBjAGEAbAAAAAAA
Aug 26 10:45:06 auth: Debug: client in: CONT    1    TlRMTVNTUAADAAAAGAAYAIwAAADEAMQApAAAAAAAAABYAAAAIAAgAFgAAAAUABQAeAAAAAAAAABoAQAABQKIAgYBsR0AAAAPdytbC3nhLy2VnQUpA7A8/nQAZQBzAHQAMQBAAHMAdABlAHIAaAAuAGkAbgBmAG8AUwBIAEEARABPAFcALQBNAE8AQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2JXdReAOi6N/glDsrj/rIAQEAAAAAAABjp6LMJ6LOAdQHOUEYS1c8AAAAAAMAIABmAHIAZQBlAC4AcwB0AGUAcgBoAC4AbABvAGMAYQBsAAgAMAAwAAAAAAAAAAAAAAAAMAAANLNBgrBXlBL1nNV3WIo4npKk2puwlnLWHthyVW05WWkKABAAAAAAAAAAAAAAAAAAAAAAAAkAIAB0AGUAcwB0ADEAQABzAHQAZQByAGgALgBpAG4AZgBvAAAAAAAAAAAA (previ
Aug 26 10:45:06 auth: Debug: ous base64 data may contain sensitive data)
Aug 26 10:45:06 auth: Debug: sql(test1@sterh.info,192.168.11.124): query: SELECT username, domain, password FROM users WHERE username = 'test1' AND domain = 'sterh.info'
Aug 26 10:45:06 auth: Info: password(test1@sterh.info,192.168.11.124): Requested NTLM scheme, but we have only MD5 (input: 9d1337eb9fafe68104021e88c0f49a68)
Aug 26 10:45:06 auth: Debug: sql(test1@sterh.info,192.168.11.124): query: SELECT username, domain, password FROM users WHERE username = 'test1' AND domain = 'sterh.info'
Aug 26 10:45:06 auth: Error: sql(test1@sterh.info,192.168.11.124): Multiple password values not supported
Aug 26 10:45:06 auth: Panic: file passdb-sql.c: line 120 (sql_query_callback): assertion failed: (password == NULL || scheme != NULL)
Aug 26 10:45:06 auth: Fatal: master: service(auth): child 904 killed with signal 6 (core not dumped - set service auth { drop_priv_before_exec=yes })
Aug 26 10:45:07 auth: Debug: Loading modules from directory: /usr/local/lib/dovecot/auth
Aug 26 10:45:07 auth: Debug: Read auth token secret from /var/run/dovecot//auth-token-secret.dat
Aug 26 10:45:07 auth: Debug: auth client connected (pid=0)
Aug 26 10:45:07 auth: Debug: client in: AUTH    3    PLAIN    service=smtp    nologin    lip=192.168.11.111    rip=192.168.11.124
Aug 26 10:45:07 auth: Debug: client passdb out: CONT    3    
Aug 26 10:45:07 auth: Debug: client in: CONT    3    AHRlc3QxQHN0ZXJoLmluZm8ARGZoZGZoMjM= (previous base64 data may contain sensitive data)
Aug 26 10:45:07 auth: Debug: sql(test1@sterh.info,192.168.11.124): query: SELECT username, domain, password FROM users WHERE username = 'test1' AND domain = 'sterh.info'
Aug 26 10:45:07 auth: Debug: client passdb out: OK    3    user=test1@sterh.info
Aug 26 10:45:07 auth: Debug: master in: USER    1    jp@sterh.info    service=lda
Aug 26 10:45:07 auth: Debug: sql(jp@sterh.info): SELECT home, uid, gid FROM users WHERE username = 'jp' AND domain = 'sterh.info'
[b]Aug 26 10:45:07 auth: Error: userdb(jp@sterh.info): client doesn't have lookup permissions for this user: userdb uid (1000) doesn't match peer uid (65534) (to bypass this check, set: service auth { unix_listener /var/run/dovecot/auth-userdb { mode=0777 } })[b]
Aug 26 10:45:07 auth: Debug: userdb out: FAIL    1
Aug 26 10:45:07 lda: Error: user jp@sterh.info: Auth USER lookup failed
Aug 26 10:45:07 lda: Debug: auth input:
Aug 26 10:45:07 lda: Fatal: Internal error occurred. Refer to server log for more information.


Содержание

Сообщения в этом обсуждении
"Непонятки с Postfix-dovecot"
Отправлено reader , 26-Авг-13 13:06 
>[оверквотинг удален]
> domain, password FROM users WHERE username = 'test1' AND domain =
> 'sterh.info'
> Aug 26 10:45:07 auth: Debug: client passdb out: OK 3 user=test1@sterh.info
> Aug 26 10:45:07 auth: Debug: master in: USER 1 jp@sterh.info service=lda
> Aug 26 10:45:07 auth: Debug: sql(jp@sterh.info): SELECT home, uid, gid FROM users
> WHERE username = 'jp' AND domain = 'sterh.info'
> [b]Aug 26 10:45:07 auth: Error: userdb(jp@sterh.info): client doesn't have lookup permissions
> for this user: userdb uid (1000) doesn't match peer uid (65534)
> (to bypass this check, set: service auth { unix_listener /var/run/dovecot/auth-userdb
> { mode=0777 } })[b]

а если сделать что предлагается?

> Aug 26 10:45:07 auth: Debug: userdb out: FAIL 1
> Aug 26 10:45:07 lda: Error: user jp@sterh.info: Auth USER lookup failed
> Aug 26 10:45:07 lda: Debug: auth input:
> Aug 26 10:45:07 lda: Fatal: Internal error occurred. Refer to server log
> for more information.


"Непонятки с Postfix-dovecot"
Отправлено jaged , 26-Авг-13 14:05 
>>[оверквотинг удален]
> а если сделать что предлагается?
>> Aug 26 10:45:07 auth: Debug: userdb out: FAIL 1
>> Aug 26 10:45:07 lda: Error: user jp@sterh.info: Auth USER lookup failed
>> Aug 26 10:45:07 lda: Debug: auth input:
>> Aug 26 10:45:07 lda: Fatal: Internal error occurred. Refer to server log
>> for more information.

Так вроде и смотрю лог, если конечно он не предлагает смотреть какой то другой лог вместо dovecot.log

c этой проблемой разобрался (стоял юзер novody в Master.cf ) поставил нужного - стало ок.
немного еще правок и почта стала и сохранятся и отдаваться...


"Непонятки с Postfix-dovecot"
Отправлено KomaLex , 22-Янв-15 04:15 
>[оверквотинг удален]
>> WHERE username = 'jp' AND domain = 'sterh.info'
>> [b]Aug 26 10:45:07 auth: Error: userdb(jp@sterh.info): client doesn't have lookup permissions
>> for this user: userdb uid (1000) doesn't match peer uid (65534)
>> (to bypass this check, set: service auth { unix_listener /var/run/dovecot/auth-userdb
>> { mode=0777 } })[b]
>> Aug 26 10:45:07 auth: Debug: userdb out: FAIL 1
>> Aug 26 10:45:07 lda: Error: user jp@sterh.info: Auth USER lookup failed
>> Aug 26 10:45:07 lda: Debug: auth input:
>> Aug 26 10:45:07 lda: Fatal: Internal error occurred. Refer to server log
>> for more information.

У тебя указана аутентификация через dovecot


smtpd_sasl_type = dovecot

А судя по логам авторизация в dovecot настроена неправильно. Вернее даже не сама авторизация а сервис авотризации. В общем в файле
conf.d/10-master.conf должно быть что то вроде этого:

service auth {
        unix_listener auth-userdb {
                mode = 0666
                user = vmail
                group = dovecot
        }
        unix_listener /var/spool/postfix/private/auth {
                mode = 0660
                user = postfix
                group = postfix
        }
}

Ну в зависимости там от того на какие логины у тебя все настроено.

"Непонятки с Postfix-dovecot"
Отправлено Oinari , 26-Авг-13 14:50 
Может посмотрите в сторону postfixadmin, раз уж с БД (PostgreSQL поддерживается) работаете? Не придётся править данные отдельно в базе и в virtual_mailboxes_recepients.

"Непонятки с Postfix-dovecot"
Отправлено jaged , 29-Авг-13 15:48 
> Может посмотрите в сторону postfixadmin, раз уж с БД (PostgreSQL поддерживается) работаете?
> Не придётся править данные отдельно в базе и в virtual_mailboxes_recepients.

Смотрю в эту сторону, но пока не докрутил его, постепенно двигаюсь)

ПРоблема вылезла как всегда где не ожидал - клиенты могут отправлять почту с неверными паролями, причем в логах пишется -  Aug 29 15:39:19 auth: Info: sql(jp@sth.ru,192.168.11.124): Password mismatch

но письмо все равно кладется адресату в ящик

Aug 29 15:39:27 lda(test1@sth.ru): Info: msgid=<1641074847.20130829153942@sth.ru>: saved mail to INBOX

Рестрикшенами в main.cf добился чтоб отбивало, но помимо неавторизованных клиентов - стало отбивать и другие сервера (отключил):( в каком месте докрутить? сейчас Рестрикшены такие:

smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_recipient_domain,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname


полный лог довекота:

Aug 29 15:39:19 auth: Debug: auth client connected (pid=0)
Aug 29 15:39:19 auth: Debug: client in: AUTH    1       PLAIN   service=smtp    nologin lip=192.168.11.111      rip=192.168.11.124
Aug 29 15:39:19 auth: Debug: client passdb out: CONT    1
Aug 29 15:39:19 auth: Debug: client in: CONT    1       AGpwQHN0ZXJoLmluZm8ARGZoZGZoMTIzMTIz (previous base64 data may contain sensitive data)
Aug 29 15:39:19 auth: Debug: sql(jp@sth.ru,192.168.11.124): query: SELECT username, domain, password FROM users WHERE username = 'jp' AND domain = 'sth.ru'
Aug 29 15:39:19 auth: Info: sql(jp@sth.ru,192.168.11.124): Password mismatch
Aug 29 15:39:19 auth: Debug: sql(jp@sth.ru,192.168.11.124): MD5(Dfhdfh123123) != '9d1337eb9fafe68104021e88c0f49a68'
Aug 29 15:39:21 auth: Debug: client passdb out: FAIL    1       user=jp@sth.ru
Aug 29 15:39:21 auth: Debug: client in: AUTH    2       LOGIN   service=smtp    nologin lip=192.168.11.111      rip=192.168.11.124
Aug 29 15:39:25 auth: Debug: client passdb out: CONT    2       VXNlcm5hbWU6
Aug 29 15:39:25 auth: Debug: client in: CONT    2       anBAc3RlcmguaW5mbw== (previous base64 data may contain sensitive data)
Aug 29 15:39:25 auth: Debug: client passdb out: CONT    2       UGFzc3dvcmQ6
Aug 29 15:39:25 auth: Debug: client in: CONT    2       RGZoZGZoMTIzMTIz (previous base64 data may contain sensitive data)
Aug 29 15:39:25 auth: Debug: sql(jp@sth.ru,192.168.11.124): query: SELECT username, domain, password FROM users WHERE username = 'jp' AND domain = 'sth.ru'
Aug 29 15:39:25 auth: Info: sql(jp@sth.ru,192.168.11.124): Password mismatch
Aug 29 15:39:25 auth: Debug: sql(jp@sth.ru,192.168.11.124): MD5(Dfhdfh123123) != '9d1337eb9fafe68104021e88c0f49a68'
Aug 29 15:39:27 auth: Debug: client passdb out: FAIL    2       user=jp@sth.ru
Aug 29 15:39:27 auth: Debug: master in: USER    1       test1@sth.ru        service=lda
Aug 29 15:39:27 auth: Debug: sql(test1@sth.ru): SELECT home, uid, gid FROM users WHERE username = 'test1' AND domain = 'sth.ru'
Aug 29 15:39:27 auth: Debug: userdb out: USER   1       test1@sth.ru        home=/var/mail  uid=1000        gid=1000
Aug 29 15:39:27 lda: Debug: auth input: test1@sth.ru home=/var/mail uid=1000 gid=1000
Aug 29 15:39:27 lda(test1@sth.ru): Debug: Effective uid=1000, gid=1000, home=/var/mail
Aug 29 15:39:27 lda(test1@sth.ru): Debug: mbox: INBOX defaulted to /var/mail/virtual-mailboxes/test1@sth.ru/inbox
Aug 29 15:39:27 lda(test1@sth.ru): Debug: fs: root=/var/mail/virtual-mailboxes/test1@sth.ru, index=, indexpvt=, control=, inbox=/var/mail/virtual-mailboxes/test1@sth.ru/inbox, alt=
Aug 29 15:39:27 lda(test1@sth.ru): Debug: none: root=, index=, indexpvt=, control=, inbox=, alt=
Aug 29 15:39:27 lda(test1@sth.ru): Debug: Destination address: test1@sth.ru (source: user@hostname)
Aug 29 15:39:27 lda(test1@sth.ru): Info: msgid=<1641074847.20130829153942@sth.ru>: saved mail to INBOX


"Непонятки с Postfix-dovecot"
Отправлено Ano , 29-Авг-13 17:32 
>[оверквотинг удален]
> Aug 29 15:39:27 lda(test1@sth.ru): Debug: mbox: INBOX defaulted to /var/mail/virtual-mailboxes/test1@sth.ru/inbox
> Aug 29 15:39:27 lda(test1@sth.ru): Debug: fs: root=/var/mail/virtual-mailboxes/test1@sth.ru,
> index=, indexpvt=, control=, inbox=/var/mail/virtual-mailboxes/test1@sth.ru/inbox,
> alt=
> Aug 29 15:39:27 lda(test1@sth.ru): Debug: none: root=, index=, indexpvt=, control=, inbox=,
> alt=
> Aug 29 15:39:27 lda(test1@sth.ru): Debug: Destination address: test1@sth.ru (source:
> user@hostname)
> Aug 29 15:39:27 lda(test1@sth.ru): Info: msgid=<1641074847.20130829153942@sth.ru>:
> saved mail to INBOX

Здесь убрать свою подсеть, тогда клиентам придется проходить SMTP авторизацию:
mynetworks = 192.168.11.0/24, 127.0.0.0/8


"Непонятки с Postfix-dovecot"
Отправлено jaged , 30-Авг-13 09:01 
>[оверквотинг удален]
>> index=, indexpvt=, control=, inbox=/var/mail/virtual-mailboxes/test1@sth.ru/inbox,
>> alt=
>> Aug 29 15:39:27 lda(test1@sth.ru): Debug: none: root=, index=, indexpvt=, control=, inbox=,
>> alt=
>> Aug 29 15:39:27 lda(test1@sth.ru): Debug: Destination address: test1@sth.ru (source:
>> user@hostname)
>> Aug 29 15:39:27 lda(test1@sth.ru): Info: msgid=<1641074847.20130829153942@sth.ru>:
>> saved mail to INBOX
> Здесь убрать свою подсеть, тогда клиентам придется проходить SMTP авторизацию:
> mynetworks = 192.168.11.0/24, 127.0.0.0/8

уже убрано, клиенты проходит авторизацию, но результат ее непрохождения не влияет на принятие почты... попробовал отправить с кривым паролем в другой домен, почта не ушла, (релей аксес денид). ПОлучается что почтовик позволяет не зависимо от результата авторизации принимать почту в свой домен, а вот для отправки в другой - нет...
По идее разумно, но что-то я в сомненьях.

mynetworks_style = host

mynetworks = 192.168.11.111(ип почтовика), 127.0.0.0/8


"Непонятки с Postfix-dovecot"
Отправлено jaged , 30-Авг-13 12:03 
>[оверквотинг удален]
>> Здесь убрать свою подсеть, тогда клиентам придется проходить SMTP авторизацию:
>> mynetworks = 192.168.11.0/24, 127.0.0.0/8
> уже убрано, клиенты проходит авторизацию, но результат ее непрохождения не влияет на
> принятие почты... попробовал отправить с кривым паролем в другой домен, почта
> не ушла, (релей аксес денид). ПОлучается что почтовик позволяет не зависимо
> от результата авторизации принимать почту в свой домен, а вот для
> отправки в другой - нет...
> По идее разумно, но что-то я в сомненьях.
> mynetworks_style = host
> mynetworks = 192.168.11.111(ип почтовика), 127.0.0.0/8

и еще трабла начал переводить с файла virtual_mailboxes_maps в базу Pgsql

main.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql/virtual_mailbox_maps


virtual_mailbox_maps
user = mail
password = xxxxxxxxx
host = localhost
dbname = mail
query = select CONCAT (username,'@',domain)as user from users where username='%s' and active='Y'


в базе скрипт отрабатывает четко выдает username@domain например - test1@sth.ru

но при отправке ошибка  - <test1@sth.ru>: Recipient address rejected: User unknown;

думаю запрос нужен нужен другого вида, но какого ? что должен возвращать скл-запрос ?
пробовал чтоб возвращал username@domain и директорию - результат тот же.



"Непонятки с Postfix-dovecot"
Отправлено jaged , 30-Авг-13 12:09 
>[оверквотинг удален]
> user = mail
> password = xxxxxxxxx
> host = localhost
> dbname = mail
> query = select CONCAT (username,'@',domain)as user from users where username='%s' and active='Y'
> в базе скрипт отрабатывает четко выдает username@domain например - test1@sth.ru
> но при отправке ошибка  - <test1@sth.ru>: Recipient address rejected: User unknown;
> думаю запрос нужен нужен другого вида, но какого ? что должен возвращать
> скл-запрос ?
> пробовал чтоб возвращал username@domain и директорию - результат тот же.


"Непонятки с Postfix-dovecot"
Отправлено Ano , 16-Окт-13 20:48 
>[оверквотинг удален]
>> user = mail
>> password = xxxxxxxxx
>> host = localhost
>> dbname = mail
>> query = select CONCAT (username,'@',domain)as user from users where username='%s' and active='Y'
>> в базе скрипт отрабатывает четко выдает username@domain например - test1@sth.ru
>> но при отправке ошибка  - <test1@sth.ru>: Recipient address rejected: User unknown;
>> думаю запрос нужен нужен другого вида, но какого ? что должен возвращать
>> скл-запрос ?
>> пробовал чтоб возвращал username@domain и директорию - результат тот же.

Я тоже когда-то переходил с Mdaemon'a на Postfix и Exim.
Было очень тяжко...

Помогли мануалы написанные на старые ОС. Проблемы были с кривыми конфигами, так как версии пакетов поменялись (свежак пришел), потом запросы к базе не работали, после всего выяснилось что права не так выставлены.

Вообщем все поправил и машина поехала.
Самое главное тут брать минимальный рабочий конфиг, после проверки его работы, можно прибавлять дополнительные настройки.

Сейчас уже с Postfix и Exim более-менее знаком. На платные решения не тянет, так как в компаниях жмотятся на платное ПО, приходится ставить свободное.