Назад | Перейти на главную страницу

PostFix и Dovecot - без SMTP аутентификации

я использовал это руководство чтобы настроить мой почтовый сервер, и все работает безупречно, за исключением того, что, похоже, нет аутентификации smtp. Понятия не имею, что происходит, поскольку в mail.log или mail.err нет ничего, что бы указывало на что-либо. Надеюсь, здесь есть кто-то, кто может мне помочь.

Вот что происходит, когда я запускаю команду telnet (я поменял местами домен и адрес электронной почты).

telnet pro.domain.org 25
Trying 50.576.3.15...
Connected to mail.domain.org.
Escape character is '^]'.
220 pro.domain.org ESMTP Postfix (Ubuntu)
ehlo example.com
250-pro.domain.org
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: <chris@gmail.com>
250 2.1.0 Ok
rcpt to: <chris@domain.org>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
asd
.
250 2.0.0 Ok: queued as 7C0F8D620
quit
221 2.0.0 Bye
Connection closed by foreign host.

Вот вывод postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
always_bcc = chris@domain.org
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
inet_interfaces = all
mailbox_size_limit = 0
mydestination = localhost
myhostname = pro.domain.org
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/certs/dovecot.pem
smtpd_tls_key_file = /etc/ssl/private/dovecot.pem
smtpd_use_tls = yes
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp

Вот результат postconf -a

cyrus
dovecot

Вот вывод dovecot -n

# 2.0.19: /etc/dovecot/dovecot.conf
# OS: Linux 3.9.2-x86_64-linode32 x86_64 Ubuntu 12.04.2 LTS ext3
auth_mechanisms = plain login
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocols = imap pop3 lmtp
service auth-worker {
  user = vmail
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
  user = dovecot
}
service imap-login {
  inet_listener imap {
    port = 0
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
}
ssl = required
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
  driver = static
}

Похоже, что dovecot действительно создает сокет

ls -la /var/spool/postfix/private/auth
srw-rw-rw- 1 postfix postfix 0 May 22 23:10 /var/spool/postfix/private/auth

Есть идеи, что делать сейчас?

Взглянув на конфигурацию вашей голубятни, у вас есть:

unix_listener /var/spool/postfix/private/auth {
  group = postfix
  mode = 0666
  user = postfix

Согласно документации на постфикс, у вас должен быть прослушивающий сокет, а не unix_listener - если вы используете unix_listener, у вас также должен быть сокет TCP. Итак, ваш dovecot.conf должен вместо этого содержать следующее:

   socket listen {
     client {
       path = /var/spool/postfix/private/auth
       mode = 0660
       user = postfix
       group = postfix
     }
   }

После этого перезапустите dovecot и postfix. Если это по-прежнему не работает, проверьте свои журналы постфиксов (обычно /var/log/mail.log) и опубликуйте любую информацию оттуда в качестве редактирования в исходном вопросе.

Оригинальный ответ, неприменимо согласно комментариям

Вы отправляете электронное письмо на адрес получателя, указанный в $ mydomain, и вы настроили почтовый сервер так, чтобы он всегда принимал эти письма.

Чтобы проверить аутентификацию, вам необходимо подключиться из сети, которая не указана в $ mynetwork, и отправить письмо получателю, который не указан как разрешенный домен получателя.

(Если бы вы действительно выполняли тест правильно, было бы намного проще выяснить, если бы вы не изменили половину информации, которую делаете.)

Ваша конфигурация использует smtpd_tls_auth_only = yes, что и должно быть, так как это запрещает отправку паролей в открытом виде. Однако это означает, что AUTH доступен только по зашифрованным каналам. Вы должны протестировать

openssl s_client -connect smtp.example.com:25 -starttls smtp -CApath /etc/ssl/certs/