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

Dovecot + Postfix - проблема

Добавлено: 2008-04-28 13:14:59
lodErunnEr
Первый раз настраиваю связку Postfix и Doveсot. Все работает нормально (pop, imap, sasl), до того момента, как я пытаюсь использовать Dovecot как LDA. Т.е. как только я добавляю в конфиг master.cf строчки:

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

dovecot   unix  -       n       n       -       -       pipe
   flags=DRhu user=virtual:virtual argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}
postfix перестает работать, а в логи спится вот что:

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

Apr 28 13:57:19 mail postfix/master[978]: daemon started -- version 2.3.14, configuration /usr/local/etc/postfix
Apr 28 13:57:49 mail postfix/smtpd[982]: fatal: no SASL authentication mechanisms
Apr 28 13:57:49 mail postfix/pipe[984]: warning: unexpected end-of-input from dovecot socket while reading input attribute name
Apr 28 13:57:49 mail postfix/pipe[984]: warning: deliver_request_get: error receiving common attributes
Apr 28 13:57:50 mail postfix/master[978]: warning: process /usr/local/libexec/postfix/smtpd pid 982 exit status 1
Apr 28 13:57:50 mail postfix/master[978]: warning: /usr/local/libexec/postfix/smtpd: bad command startup -- throttling
Привожу полные конфиги Postfix-a и Dovecot-a:

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

# cat main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix

myhostname = mail.domain.org
#mydomain = domain.tld
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost
unknown_local_recipient_reject_code = 550
mynetworks_style = host
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
recipient_delimiter = +
smtpd_banner = $myhostname ESMTP ready
debug_peer_level = 2
#debug_peer_list = 127.0.0.1
#debug_peer_list = some.domain
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = no
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = no

virtual_gid_maps = static:2000
virtual_uid_maps = static:2000
virtual_mailbox_base = /var/mail/domains
virtual_mailbox_domains = domain.org
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/virtual-maps.cf

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot
smtpd_sasl_security_options = noanonymous

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

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

# cat dovecot.conf
## Dovecot configuration file
protocols = imap pop3
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot.log
#syslog_facility = mail
ssl_disable = yes
login_greeting = POP3 ready.

mail_location = maildir:/var/mail/domains/%d/%n
mail_privileged_group = virtual

mail_debug = yes
verbose_proctitle = yes
first_valid_uid = 2000
last_valid_uid = 2000
first_valid_gid = 2000
last_valid_gid = 2000



protocol imap {
  imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol lda {
  postmaster_address = postmaster@domain.org
  sendmail_path = /usr/sbin/sendmail
}

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

auth default {
  mechanisms = plain login

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

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

    user = virtual

  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = dovecot
      group = dovecot
    }
    client {
      path = /var/spool/postfix/private/dovecot
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

Re: Dovecot + Postfix - проблема

Добавлено: 2009-03-03 2:36:27
Alex Keda
выкиньте постфикс, поставьте экзим.

Re: Dovecot + Postfix - проблема

Добавлено: 2009-03-03 8:53:04
moury
Причина Ваших проблем - в том, что dovecot не может создать master-сокет, и на этом останавливается. И не создает client-сокет. А не обнаружив client-сокет, не может работать постфикс.

Вы задали

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

    user = virtual
А .юзеру virtual хватит прав писать в /var/run/dovecot?

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

  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = dovecot
      group = dovecot
Почему у Вас вдалельцем master-сокета является dovecot? Ведь чуть ниже "mode = 0600" в типовом конфиге написано:
# Default user/group is the one who started dovecot-auth (root)
То есть, в Вашем случае, virtual.

Re: Dovecot + Postfix - проблема

Добавлено: 2009-03-03 11:17:04
terminus
Пример рабочей конфигурации Postfix + Dovecot + LDA

Postfix:

main.cf

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

bounce_queue_lifetime = 2d
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 50
delay_warning_time = 3h
dovecot_destination_recipient_limit = 1
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
local_destination_concurrency_limit = 2
mail_owner = postfix
mailbox_size_limit = 0
mailq_path = /usr/local/bin/mailq
manpage_directory = /usr/local/man
message_size_limit = 102400000
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = xxx.lv
myhostname = mail.xxx.lv
mynetworks = 127.0.0.0/8, 192.168.0.0/16
mynetworks_style = subnet
newaliases_path = /usr/local/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
relayhost = [1.2.3.4]
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
setgid_group = maildrop
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
transport_maps = hash:/usr/local/etc/postfix/transport
unknown_local_recipient_reject_code = 550
virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:1002
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 0
virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1002
virtual_transport = dovecot
virtual_uid_maps = static:1002
smtpd_reject_unlisted_recipient = no
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
master.cf

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

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}
Dovecot:

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

base_dir = /var/run/dovecot/
protocols = pop3
listen = *
disable_plaintext_auth = no
shutdown_clients = yes
syslog_facility = local7
ssl_disable = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
login_process_per_connection = yes
login_processes_count = 10
login_max_processes_count = 128
login_greeting = Dovecot ready.
mail_location = maildir:/home/vmail/%d/%n/Maildir
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail
mail_debug = no
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 1002
last_valid_uid = 1002
first_valid_gid = 1002
last_valid_gid = 1002
max_mail_processes = 512
mail_process_size = 256
maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = yes
protocol pop3 {
  login_executable = /usr/local/libexec/dovecot/pop3-login
  mail_executable = /usr/local/libexec/dovecot/pop3
  pop3_enable_last = yes
  pop3_uidl_format = %08Xu%08Xv
  mail_max_userip_connections = 20
  mail_plugins = quota
  mail_plugin_dir = /usr/local/lib/dovecot/pop3
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

protocol lda {
  postmaster_address = root@mail.xxx.lv
  hostname = mail.xxx.lv
  mail_plugins = quota
  mail_plugin_dir = /usr/local/lib/dovecot/lda
  quota_full_tempfail = yes
  sendmail_path = /usr/sbin/sendmail
  auth_socket_path = /var/run/dovecot/auth-master
  log_path =
  info_log_path =
  syslog_facility = mail
}
auth_default_realm = xxx.lv
auth_username_format = %Lu
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
auth_worker_max_count = 50
auth_worker_max_request_count = 50
auth_failure_delay = 2
auth default {
  mechanisms = plain login
  passdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }
  userdb sql {
    args = /usr/local/etc/dovecot-sql.conf
  }
  userdb prefetch {
  }
  user = nobody
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = vmail
    }
  }
}
dict {
}
plugin {
  quota = maildir:User quota
}
/usr/local/etc/dovecot-sql.conf

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

driver = mysql

connect = host=localhost dbname=postfix user=postfix-read password=xxx

default_pass_scheme = MD5-CRYPT

user_query = SELECT concat('/home/vmail/', maildir) as home, concat('maildir:/home/vmail/', maildir ,'Maildir') as mail, 1002 AS uid, 1002 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' AND active = '1'
/usr/local/etc/postfix/mysql_virtual_alias_maps.cf

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

user            = postfix-read
password        = xxx
hosts           = localhost
dbname          = postfix
query           = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/usr/local/etc/postfix/mysql_virtual_domains_maps.cf

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

user            = postfix-read
password        = xxx
hosts           = localhost
dbname          = postfix
query           = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf

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

user            = postfix-read
password        = xxx
hosts           = localhost
dbname          = postfix
query           = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'