LINUX.ORG.RU
решено ФорумAdmin

dovecot + mysql не работает авторизация.

 , , ,


0

2

День добрый. Появилась необходимость поставить почту. Покопался, нарыл маны, всё говорит, что связка dovecot+postfix+mysql это хорошо. Покопался. postfix передаёт данные для авторизации в dovecot. telnet показывает wellcome. На порту smtp показывает нормальный ehlo localhost. А вот логин/пасс - уже не говорит, что неа... Вроде бы настроено правильно, драйвер указан, коннект указан. Но даже не ругается, что что-то не нашло - юзера или пароль. + по мануалу http://sudouser.com/ustanovka-pochtovogo-servera-postfix-dovecot-mysql-i-virtualnyx-domenov.html сказано, что перезапуске dovecot'a второй строкой должно говорить, что приконнектилось к базе, но ничего такого не выводит. Выставил всё в полный дебаг, в master.cf выставил smtpd -v. Перебрал здесь 40-50 тем - пока так и нет понятия, почему не работает. saslauthd настроить на получение авторизации из базы получилось минут за 30-40. Уже и не знаю, может проще было бы натравить dovecot на sasauthd, раз тот работает с базой нормально.... doveconf -n:

# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.16.7-24-desktop x86_64 openSUSE 13.2 (x86_64) 
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login
auth_verbose = yes
disable_plaintext_auth = no
listen = *
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_greeting = Wellcome and login please
mail_debug = yes
mail_location = maildir:/home/vmail/%d/%n
mail_plugins = " quota"
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
plugin {
  quota = dict:user::file:/var/vmail/%d/%n/.quotausage
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}
protocols = imap pop3
service auth-worker {
  group = root
  user = root
}
service auth {
  group = root
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-master {
    group = vmail
    mode = 0660
    user = vmail
  }
  unix_listener auth-userdb {
    group = vmail
    mode = 0666
    user = vmail
  }
  user = root
}
service imap-login {
  client_limit = 1000
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  process_limit = 500
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
ssl_key_password = 785523
userdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
verbose_ssl = yes
protocol imap {
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_plugins = quota
  pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
  mail_plugins = sieve quota
}
protocol lmtp {
  mail_plugins = quota sieve
  postmaster_address = webmaster@localhost
}

main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
unknown_local_recipient_reject_code = 550
smtpd_banner = $myhostname ESMTP
debug_peer_level = 3
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/packages/postfix-doc/html
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/packages/postfix-doc/samples
readme_directory = /usr/share/doc/packages/postfix-doc/README_FILES

biff = no
content_filter = amavis:[127.0.0.1]:10024
delay_warning_time = 1h
disable_dns_lookups = no
disable_mime_output_conversion = no
disable_vrfy_command = yes
inet_interfaces = all
inet_protocols = ipv4
masquerade_classes = envelope_sender, header_sender, header_recipient
masquerade_domains = 
masquerade_exceptions = root
mydestination = SUSE.example.lo, localhost, localhost.localdomain
myhostname = SUSE
mydomain = example.lo
mynetworks_style = subnet
mynetworks = 192.168.0.0/24, 127.0.0.0/24
relayhost = 

alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
canonical_maps = hash:/etc/postfix/canonical
relocated_maps = hash:/etc/postfix/relocated
sender_canonical_maps = hash:/etc/postfix/sender_canonical
transport_maps = hash:/var/lib/mailman/data/transport-mailman, proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
mail_spool_directory = /var/mail
message_strip_characters = \0
defer_transports = 
mailbox_command = 
mailbox_transport = 
mailbox_size_limit = 0
message_size_limit = 900000000
strict_8bitmime = no
strict_rfc821_envelopes = no
smtpd_delay_reject = yes
smtpd_helo_required = yes

smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf

smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:/etc/postfix/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:/etc/postfix/blacklist_helo

smtpd_sender_restrictions = check_sender_access regexp:/etc/postfix/tag_as_originating.re , permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf, check_sender_access regexp:/etc/postfix/tag_as_foreign.re

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_rbl_client zen.spamhaus.org


smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous 
smtp_sasl_password_maps = hash:/disk0/postfix/sasl_passwd 
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_client_message_rate_limit = 1
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
relay_clientcerts = 
smtpd_use_tls = no
smtpd_tls_loglevel = 3
relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
virtual_alias_domains = 
virtual_alias_maps = hash:/etc/mailman/virtual-mailman, proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, proxy:mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_transport = dovecot

alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /var/vmail
virtual_uid_maps = mysql:/etc/postfix/mysql-virtual_uids.cf
virtual_gid_maps = mysql:/etc/postfix/mysql-virtual_gids.cf
sender_bcc_maps = proxy:mysql:/etc/postfix/mysql-virtual_outgoing_bcc.cf
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_relayrecipientmaps.cf
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
virtual_transport = dovecot
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
nested_header_checks = regexp:/etc/postfix/nested_header_checks
body_checks = regexp:/etc/postfix/body_checks
receive_override_options = no_address_mappings

master.cf

smtp      inet  n       -       n       -       -       smtp -v
submission inet  n       -       n       -       -       smtpd -v
   -o syslog_name=postfix/submission
   -o smtpd_sasl_auth_enable=yes
   -o smtpd_sasl_type=dovecot
   -o smtpd_sasl_path=private/auth
   -o smtpd_sasl_security_options=noanonymous
   -o smtpd_sasl_local_domain=$myhostname
   -o smtpd_client_restrictions=permit_sasl_authenticated,reject
   -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
   -o smtpd_sender_restrictions=reject_sender_mismatch
   -o smtpd_recipient_restrictions=
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp -v
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
cyrus     unix  -       n       n       -       -       pipe
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

amavis unix - - - - 2 smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes


0.0.0.0:1025 inet n - n - - smtpd -v
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes


0.0.0.0:925 inet n - n - - smtpd -v
        -o content_filter=
	-o smtpd_sasl_auth_enable=yes
	-o broken_sasl_auth_clients=yes
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=#permit_sasl_authenticated,permit_mynetworks
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8,192.168.0.0/24
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtp_send_xforward_command=yes
	-o milter_default_action=accept
    	-o milter_macro_daemon_name=ORIGINATING
        -o disable_dns_lookups=yes


127.0.0.1:10025 inet n - n - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes


127.0.0.1:10027 inet n - n - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtp_send_xforward_command=yes
	-o milter_default_action=accept
    	-o milter_macro_daemon_name=ORIGINATING
        -o disable_dns_lookups=yes

как бы вроде бы должен был всё настроить ispconfig сам, но видимо что-то пошло не так. postfix хорошо настроился - в базу коннектиться и берёт всё, что нужно. А dovecot - даж не ясно, коннетиться или нет. Хотя нет - ясно - не коннектиться , в mysql.log пусто. вроде бы всё просто - забить в passdb и userdb driver и args на файл с запросами и должно работать, ан нет( + не могу найти нормальных мануалов на dovecot 2.2* всё, что нашлось оно про 1.*, а там часть всего вообще больше не используется, или работает уже не так. Если у кого под рукой ссылка на настройку dovecot 2.* + mysql - буду благодарен.

dovecot-sql.conf:

driver = mysql
connect = host=localhost dbname=dbispconfig111 user=ispconfig password=*****
default_pass_scheme = PLAIN

# password-query with prefetch
#password_query = SELECT email as user, password, maildir as userdb_home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as userdb_mail, uid as userdb_uid, gid as userdb_gid, #CONCAT('*:storage=', quota, 'B') AS userdb_quota_rule, CONCAT(maildir, '/.sieve') as userdb_sieve FROM mail_user WHERE (login = '%u' OR email = '%u')

#user_query = SELECT email as user, maildir as home, CONCAT( maildir_format, ':', maildir, '/', IF(maildir_format='maildir','Maildir',maildir_format)) as mail, uid, gid, CONCAT('*:storage=', quota, 'B') AS quota_rule, CONCAT(maildir, '/.sieve') as sieve FROM mail_user WHERE (login = '%u' OR email = '%u') AND `disable%Ls` = 'n' AND server_id = '1'

password_query = SELECT clearpassword as password, email as user FROM mail_user WHERE email='%u'
user_query = SELECT email as user, login as userdb, email as userdb_home, maildir as home, email as mail, mailuser_id us uid, sys_groupid as guid FROM mail_user WHERE email='%u'

# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
iterate_query = SELECT login as user, domain FROM mail_user

Если делать doveadm user test он просто висит и всё. в статусе dovecot'a только: auth: Debug: master in USER 1 test service=doveadm

PearlyDragon ()
Ответ на: комментарий от menzoberronzan

В SUSE он назван как dovecot22-backend-mysql. По крайней мере ничего другого со словами dovecot и mysql на software.opensuse.org не нашлось.В информации написано, что это MySQL support for Dovecot. Стоит версия 2.2.13-3.2.2

PearlyDragon ()

В sql закомментированы запросы, автоматически созданные ispconfig. решил попроще сделать, чтобы посмотреть хоть как более простое работает, и действительно ли надо длинный и сложный запрос делать.

PearlyDragon ()
Ответ на: комментарий от menzoberronzan

auth: Debug: auth client connected (pid=0) Auth: Debug: client in: auth 1 plain service smtp nologin lip=127.0.0.1 rip=127.0.0.1 resp=абракадабракакая-то (previous base64 data may contain sensitive data) auth: warning: auth client 0 disconnected with 1 pending requests: EOF auth: Error: plain(test@examplae.lo,127.0.0.1): request 0.1 timed out after 150secs, state=1

PearlyDragon ()
Ответ на: комментарий от PearlyDragon

telnet в это время говорит, что authentication failed: Connection lost to authentication server. Пробовал гуглить про эту надпись, но ничего толкового про это не удалось найти.

PearlyDragon ()
Ответ на: комментарий от menzoberronzan
Oct 25 16:02:35 SUSE dovecot[27093]: auth: Debug: auth client connected (pid=21979)
Oct 25 16:02:51 SUSE dovecot[27093]: auth: Debug: client in: AUTH        1        PLAIN        service=imap        secured        session=/T3zxaw/jgB/AAAB        lip=127.0.0.1        rip=127.0.0.1        lport=143        rport=55950        resp=тарампарам (previous base64 data may contain sensitive data)
Oct 25 16:05:21 SUSE dovecot[27093]: auth: Error: plain(test@example.lo,127.0.0.1,</T3zxaw/jgB/AAAB>): Request 21979.1 timed out after 150 secs, state=1
Oct 25 16:05:35 SUSE dovecot[27093]: imap-login: Disconnected: Inactivity during authentication (disconnected while authenticating, waited 164 secs): user=<>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured, session=</T3zxaw/jgB/AAAB>
Oct 25 16:05:35 SUSE dovecot[27093]: auth: Debug: client in: CANCEL        1
PearlyDragon ()

Создайте тестового юзера, распишите dovecot-sql.conf в виде 2-х команд mysql и ковыряйте базу, пока эти команды не начнут возвращать корректные значения логина и пароля для тестового юзера.

ArcFi ()
Ответ на: комментарий от ArcFi

Есть тестовый пользователь. На нём и тестируется. Вопрос в том, возвращается ли в статус Dovecot 2.* то, что он успешно подключился к БД. Ибо в mysql.log нет во время логи на записей, что кто-то подключился к базе. Точнее есть, но это записи только постфикса. Запускаешь телнет или doveadm user test - как небыло записей за посление 5 минут в mysql.log так и нет. Отработал, показал, что failed - записей так и не появилось. Я бы так и сделал, ибо так и протестировал saslauthd+mysql. Но Dovecot не коннектится и не понятно почему. Драйвер есть, если фигню вместо драйвера написать - ругается, в статус пишет, что драйвер работы с базой он подгрузил. пиши не пиши фигню в строке конннекта - в статус ничего не падает при проверке логина/пароля.

PearlyDragon ()
Ответ на: комментарий от ArcFi

Хотя у меня есть подозрения, что коннектится к базе auth-worker, а он при перезапуске теряет права к dovecot:root. Записал гыук = root в секцию service auth-worker в 10-master.conf, как нашёл в мануалах - никакого эффекта, владелей сбрасывается приперезапуске к dovecot:root.

PearlyDragon ()
Ответ на: комментарий от PearlyDragon

Хм. А если попробовать подключение к mysql через сокет?

connect = host=/var/run/mysql/mysql.sock dbname=dbispconfig111 user=ispconfig password=*****
В opensuse сокет может располагаться в другом месте.

menzoberronzan ()
Ответ на: комментарий от PearlyDragon

Блин, вот как оно на самом деле прописывается:

service auth-worker { user = $default_internal_user

unix_listener auth-worker { user = root } } А не: service auth-worker { user = root }

Теперь есть коннект, можно и с запросом посмотреть, что не так.

PearlyDragon ()
Ответ на: комментарий от menzoberronzan

Не, этот там работает, я посмотрел именно в netstat, что сокет именно там, посмотрел в my.cnf, что именно он там прописан. В мануалах обычно встречается немного другой путь в виде host=/var/run/mysqld/mysqld.sock Это я сразу же проверил. С этим нормально.

PearlyDragon ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.