Страница 1 из 1

Dovecot SASL - CRAM-MD5

Добавлено: 2008-07-08 22:25:57
Oloremo
Всем привет.

Я пытаюсь сделать SMTP аутентификацию через Dovecot SASL.
Клиенты будут использовать CRAM-MD5 и DIGEST-MD5 шифрование.
Для тестов использую swaks.

Юзеры хранятся в LDAP.
Насколько я понимкаю CRAM и DIGEST MD5 требуют чтобы пароли хранились не хешированные - ну чтож прекрасно.

В моей схеме юзеры аутентифицируются следующим образом:
login = user@domain
То есть проверятся что приехавший login = полю mail в ldap
и что приехавший пароль соответсвует полю userPassword

Берём юзера со след значениями:
mail: admin3@domain.off
userPassword: 123

Делаем следующее:

Код: Выделить всё

%swaks -a CRAM-MD5 -au admin3@domain.off -ap 123
To: admin3@domain.off
=== Trying mx.domain.off:25...
=== Connected to mx.domain.off.
<-  220 mx.domain.off ESMTP Exim 4.69 Tue, 08 Jul 2008 19:14:24 +0000
  -> EHLO mx.domain.off
<-  250-mx.domain.off Hello mx.domain.off [172.16.1.19]
<-  250-SIZE 13631488
<-  250-PIPELINING
<-  250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
<-  250-STARTTLS
<-  250 HELP
  -> AUTH CRAM-MD5
<-  334 PDM4ODYwNTQ1MjEzMTA3NDEuMTIxNTU0NDQ2NEBteC5kb21haW4ub2ZmPg==
  -> YWRtaW4zQGRvbWFpbi5vZmYgMGJlYzIzOTA5Zjg4OTc3MDdkYTJmZmNmOTEzMDBhMmM=
<** 535 Incorrect authentication data
*** No authentication type succeeded
  -> QUIT
<-  221 mx.domain.off closing connection
=== Connection closed with remote host.

В логах Exim:

Код: Выделить всё

SMTP<< AUTH CRAM-MD5
  9657 dovecot authentication
  9657 AUTH      12      CRAM-MD5        service=smtp    secured 
rip=172.16.1.19 lip=172.16.1.19 resp=
  9657 received: CONT    12 
PDM0MTMzMjg1NTUyOTE0MjMuMTIxNTU0NDcwMUBteC5kb21haW4ub2ZmPg==
  9657 SMTP>> 334 
PDM0MTMzMjg1NTUyOTE0MjMuMTIxNTU0NDcwMUBteC5kb21haW4ub2ZmPg==
  9657 received: FAIL    12      user=admin3@domain.off
  9657 SMTP>> 535 Incorrect authentication data
  9657   auth_cram_md5 authenticator failed for mx.domain.off 
[172.16.1.19] I=[172.16.1.19]:26: 535 Incorrect authentication data 
(set_id=admin3@domain.off)
  9657 SMTP<< QUIT
В логах Dovecot:

Код: Выделить всё

Info: auth(default): new auth connection: pid=9713
Info: auth(default): client in: AUTH   11      CRAM-MD5 
service=smtp    secured rip=172.16.1.19 lip=172.16.1.19 resp=<hidden>
Info: auth(default): client out: CONT  11 
PDU5MjUzNjc0Mjg1NDAyNjUuMTIxNTU0NDkyN0BteC5kb21haW4ub2ZmPg==
Info: auth(default): client in: CONT<hidden>
Info: auth(default): ldap(admin3@domain.off,172.16.1.19): pass search: 
base=dc=Virtual-Domains,dc=DOMAIN scope=subtree 
filter=(&(objectClass=mailUser)(mail=admin3@domain.off)) 
fields=mail,userPassword
Info: auth(default): ldap(admin3@domain.off,172.16.1.19): result: 
mail(user)=admin3@domain.off userPassword(password)=<hidden>
Error: auth(default): password(admin3@domain.off,172.16.1.19): Invalid 
password format for scheme CRAM-MD5
Info: auth(default): client out: FAIL  11      user=admin3@domain.off
---
Вот это строчка явно говорит об ошибке:
password(admin3@domain.off,172.16.1.19): Invalid password format for
scheme CRAM-MD5

Только я не понимаю как так получается.
Безумно прошу помощи. Мои идеи уже почти закончились.

Вот мой dovecot-ldap.conf с убранными комментариями:

Код: Выделить всё

hosts = 127.0.0.1
dn = uid=Dovecot,ou=System-Users,dc=DOMAIN
dnpass = 123
debug_level = 0
ldap_version = 3
base = dc=Virtual-Domains,dc=DOMAIN
deref = never
scope = subtree
user_attrs =
user_filter = (&(objectClass=mailUser)(mail=%u))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=mailUser)(mail=%u))
default_pass_scheme = CRAM-MD5
А вот dovecot -n:

Код: Выделить всё

# 1.1.1: /usr/local/etc/dovecot.conf
base_dir: /var/run/dovecot/
log_path: /var/log/dovecot/dovecot.log
info_log_path: /var/log/dovecot/dovecot.log
protocols: imap imaps pop3 pop3s
ssl_cert_file: /usr/local/etc/certs/cert.crt
ssl_key_file: /usr/local/etc/certs/cert.key
ssl_cipher_list: ALL:!LOW:!SSLv2
login_dir: /var/run/dovecot/login
login_executable(default): /usr/local/libexec/dovecot/imap-login
login_executable(imap): /usr/local/libexec/dovecot/imap-login
login_executable(pop3): /usr/local/libexec/dovecot/pop3-login
login_processes_count: 5
mail_max_userip_connections(default): 10
mail_max_userip_connections(imap): 10
mail_max_userip_connections(pop3): 3
verbose_proctitle: yes
first_valid_gid: 0
mail_privileged_group: mail
mail_uid: dmail
mail_gid: dmail
mail_location: maildir:/var/spool/dovecot/domains/%d/%n/
mail_debug: yes
mail_executable(default): /usr/local/libexec/dovecot/imap
mail_executable(imap): /usr/local/libexec/dovecot/imap
mail_executable(pop3): /usr/local/libexec/dovecot/pop3
mail_plugin_dir(default): /usr/local/lib/dovecot/imap
mail_plugin_dir(imap): /usr/local/lib/dovecot/imap
mail_plugin_dir(pop3): /usr/local/lib/dovecot/pop3
imap_client_workarounds(default): delay-newmail netscape-eoh 
tb-extra-mailbox-sep
imap_client_workarounds(imap): delay-newmail netscape-eoh 
tb-extra-mailbox-sep
imap_client_workarounds(pop3):
pop3_client_workarounds(default):
pop3_client_workarounds(imap):
pop3_client_workarounds(pop3): outlook-no-nuls oe-ns-eoh
auth default:
   mechanisms: plain login cram-md5 digest-md5
   user: dmail
   username_format: %Lu
   debug: yes
   passdb:
     driver: ldap
     args: /usr/local/etc/dovecot-ldap.conf
   userdb:
     driver: ldap
     args: /usr/local/etc/dovecot-ldap.conf
   socket:
     type: listen
     client:
       path: /var/run/dovecot/auth-client
       mode: 432
       user: exim
     master:
       path: /var/run/dovecot/auth-master
       mode: 384
       user: dmail

Re: Dovecot SASL - CRAM-MD5

Добавлено: 2008-07-09 9:23:29
Oloremo
Решил.

Нужно пароли хранить в clearPassword а не в userPassword и в dovecot-ldap поставить default_pass_scheme = CLEARTEXT.
Это конечно не комильфо, но аутентификация дороже.