<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi,<br></div><div><br></div><div>We recently shutdown our old LDAP server and repointed our mail server (dovecot + postfix) to our new LDAP server and ever since we've been unable to fetch mail. Mail is getting delivered, but we just can't pop it. We're using Ubuntu 16.04, btw.<br></div><div><br></div>We keep on getting the following error messages in /var/log/dovecote:<br><br><div style="margin-left:40px"><span style="font-family:courier new,monospace">2019-05-15 16:27:43 auth: Error: LDAP /etc/dovecot/dovecot-ldap.conf.ext: ldap_start_tls_s() failed: Can't contact LDAP server</span></div></div><div style="margin-left:40px"><span style="font-family:courier new,monospace">2019-05-15 16:39:36 auth: Error: LDAP /etc/dovecot/dovecot-ldap.conf.ext: ldap_start_tls_s() failed: Connect error<br>2019-05-15 16:39:43 auth: Error: LDAP /etc/dovecot/dovecot-ldap.conf.ext: ldap_start_tls_s() failed: Local error</span></div><div dir="ltr"><br></div><div>However, our server is finding our LDAP users and postfix doesn't seem to have a problem, just Dovecot. Also, when we try to connect via Dovecot, we get the following message:</div><div><br></div><div style="margin-left:40px"><span style="font-family:courier new,monospace">-ERR [SYS/TEMP] Temporary authentication failure. [mail:2019-05-15 21:40:06]</span></div><div><br></div><div>Our /etc/dovecot/dovecot.conf contains the following:</div><div style="margin-left:40px"><br></div><div><div style="margin-left:40px"><span style="font-family:courier new,monospace">## Dovecot configuration file<br><br># If you're in a hurry, see <a href="http://wiki2.dovecot.org/QuickConfiguration">http://wiki2.dovecot.org/QuickConfiguration</a><br><br># "doveconf -n" command gives a clean output of the changed settings. Use it<br># instead of copy&pasting files when posting to the Dovecot mailing list.<br><br># '#' character and everything after it is treated as comments. Extra spaces<br># and tabs are ignored. If you want to use either of these explicitly, put the<br># value inside quotes, eg.: key = "# char and trailing whitespace  "<br><br># Most (but not all) settings can be overridden by different protocols and/or<br># source/destination IPs by placing the settings inside sections, for example:<br># protocol imap { }, local 127.0.0.1 { }, remote <a href="http://10.0.0.0/8">10.0.0.0/8</a> { }<br><br># Default values are shown for each setting, it's not required to uncomment<br># those. These are exceptions to this though: No sections (e.g. namespace {})<br># or plugin settings are added by default, they're listed only as examples.<br># Paths are also just examples with the real defaults being based on configure<br># options. The paths listed here are for configure --prefix=/usr<br># --sysconfdir=/etc --localstatedir=/var<br><br># Enable installed protocols<br>!include_try /usr/share/dovecot/protocols.d/*.protocol<br><br># A comma separated list of IPs or hosts where to listen in for connections. <br># "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.<br># If you want to specify non-default ports or anything more complex,<br># edit conf.d/master.conf.<br>#listen = *, ::<br><br># Base directory where to store runtime data.<br>#base_dir = /var/run/dovecot/<br><br># Name of this instance. In multi-instance setup doveadm and other commands<br># can use -i <instance_name> to select which instance is used (an alternative<br># to -c <config_path>). The instance name is also added to Dovecot processes<br># in ps output.<br>#instance_name = dovecot<br><br># Greeting message for clients.<br>#login_greeting = Dovecot ready.<br><br># Space separated list of trusted network ranges. Connections from these<br># IPs are allowed to override their IP addresses and ports (for logging and<br># for authentication checks). disable_plaintext_auth is also ignored for<br># these networks. Typically you'd specify your IMAP proxy servers here.<br>#login_trusted_networks =<br><br># Space separated list of login access check sockets (e.g. tcpwrap)<br>#login_access_sockets = <br><br># With proxy_maybe=yes if proxy destination matches any of these IPs, don't do<br># proxying. This isn't necessary normally, but may be useful if the destination<br># IP is e.g. a load balancer's IP.<br>#auth_proxy_self =<br><br># Show more verbose process titles (in ps). Currently shows user name and<br># IP address. Useful for seeing who are actually using the IMAP processes<br># (eg. shared mailboxes or if same uid is used for multiple accounts).<br>#verbose_proctitle = no<br><br># Should all processes be killed when Dovecot master process shuts down.<br># Setting this to "no" means that Dovecot can be upgraded without<br># forcing existing client connections to close (although that could also be<br># a problem if the upgrade is e.g. because of a security fix).<br>#shutdown_clients = yes<br><br># If non-zero, run mail commands via this many connections to doveadm server,<br># instead of running them directly in the same process.<br>#doveadm_worker_count = 0<br># UNIX socket or host:port used for connecting to doveadm server<br>#doveadm_socket_path = doveadm-server<br><br># Space separated list of environment variables that are preserved on Dovecot<br># startup and passed down to all of its child processes. You can also give<br># key=value pairs to always set specific settings.<br>#import_environment = TZ<br><br>##<br>## Dictionary server settings<br>##<br><br># Dictionary can be used to store key=value lists. This is used by several<br># plugins. The dictionary can be accessed either directly or though a<br># dictionary server. The following dict block maps dictionary names to URIs<br># when the server is used. These can then be referenced using URIs in format<br># "proxy::<name>".<br><br>dict {<br>  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext<br>  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext<br>  quota = ldap:/etc/dovecot/dovecot-ldap.conf.ext<br>  expire = ldap:/etc/dovecot/dovecot-ldap.conf.ext<br>}<br><br># Most of the actual configuration gets included below. The filenames are<br># first sorted by their ASCII value and parsed in that order. The 00-prefixes<br># in filenames are intended to make it easier to understand the ordering.<br>!include conf.d/*.conf<br><br># A config file can also tried to be included without giving an error if<br># it's not found:<br>!include_try local.conf<br><br># Added by Elias<br>protocols = pop3 imap<br>#ssl_cert = </etc/ssl/certs/server.crt<br>#ssl_key = </etc/ssl/private/server.key<br>ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem<br>ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key<br><br>log_path = /var/log/dovecote<br>info_log_path = /var/log/dovecote_info<br>log_timestamp = "%Y-%m-%d %H:%M:%S "<br>#syslog_facility = mail_dovecote<br>#ssl = no<br>#mail_location = mbox:~/:INBOX=/var/mail/%u<br>#namespace {<br>#  type = private<br>#  separator = .<br>#  inbox = yes<br>#} <br>mail_privileged_group = mail<br>mail_full_filesystem_access = yes<br>mail_debug = yes<br>mmap_disable = yes<br>mail_nfs_storage = yes<br>mail_nfs_index = yes<br>mail_fsync = always<br>mbox_read_locks = dotlock<br>mbox_write_locks = dotlock<br>passdb ldap {<br>  driver = ldap<br>    # Path for LDAP configuration file<br>    args = /etc/dovecot/dovecot-ldap.conf.ext<br>  }<br>userdb {<br>    driver=passwd<br>  }<br>userdb ldap {<br>    driver = ldap<br>    # Path for LDAP configuration file<br>    args = /etc/dovecot/dovecot-ldap.conf.ext<br>  }</span><br></div></div><div>And our /etc/dovecot/dovecot-ldap.conf.ext has this:</div><div style="margin-left:40px"><br></div><div><div style="margin-left:40px"><span style="font-family:courier new,monospace"># This file is commonly accessed via passdb {} or userdb {} section in<br># conf.d/auth-ldap.conf.ext<br><br># This file is opened as root, so it should be owned by root and mode 0600.<br>#<br># <a href="http://wiki2.dovecot.org/AuthDatabase/LDAP">http://wiki2.dovecot.org/AuthDatabase/LDAP</a><br>#<br># NOTE: If you're not using authentication binds, you'll need to give<br># dovecot-auth read access to userPassword field in the LDAP server.<br># With OpenLDAP this is done by modifying /etc/ldap/slapd.conf. There should<br># already be something like this:<br><br># access to attribute=userPassword<br>#        by dn="<dovecot's dn>" read # add this<br>#        by anonymous auth<br>#        by self write<br>#        by * none<br><br># Space separated list of LDAP hosts to use. host:port is allowed too.<br>hosts = 139.147.9.135<br><br># LDAP URIs to use. You can use this instead of hosts list. Note that this<br># setting isn't supported by all LDAP libraries.<br>#uris = ldaps://<a href="http://139.147.9.135">139.147.9.135</a><br><br># Distinguished Name - the username used to login to the LDAP server.<br># Leave it commented out to bind anonymously (useful with auth_bind=yes).<br>dn = cn=admin,dc=cs,dc=lafayette,dc=edu <br><br># Password for LDAP server, if dn is specified.<br>dnpass = blahblah123<br><br># Use SASL binding instead of the simple binding. Note that this changes<br># ldap_version automatically to be 3 if it's lower. Also note that SASL binds<br># and auth_bind=yes don't work together.<br>#sasl_bind = no<br># SASL mechanism name to use.<br>#sasl_mech =<br># SASL realm to use.<br>#sasl_realm =<br># SASL authorization ID, ie. the dnpass is for this "master user", but the<br># dn is still the logged in user. Normally you want to keep this empty.<br>#sasl_authz_id =<br><br># Use TLS to connect to the LDAP server.<br>tls = yes<br># TLS options, currently supported only with OpenLDAP:<br>#tls_ca_cert_file =/etc/ssl/certs/ldap.crt<br>tls_ca_cert_file =/etc/ssl/certs/ldap6_cacert.pem<br>#tls_ca_cert_dir =/etc/ssl/certs/<br>#tls_cipher_suite =<br># TLS cert/key is used only if LDAP server requires a client certificate.<br>#tls_cert_file = /etc/ssl/certs/ldap01_slapd_cert.pem<br>#tls_key_file = /etc/ssl/private/ldap01_slapd_key.pem<br># Valid values: never, hard, demand, allow, try<br>#tls_require_cert = demand<br><br># Use the given ldaprc path.<br>#ldaprc_path =<br><br># LDAP library debug level as specified by LDAP_DEBUG_* in ldap_log.h.<br># -1 = everything. You may need to recompile OpenLDAP with debugging enabled<br># to get enough output.<br>#debug_level = 0<br><br># Use authentication binding for verifying password's validity. This works by<br># logging into LDAP server using the username and password given by client.<br># The pass_filter is used to find the DN for the user. Note that the pass_attrs<br># is still used, only the password field is ignored in it. Before doing any<br># search, the binding is switched back to the default DN.<br>auth_bind = yes<br><br># If authentication binding is used, you can save one LDAP request per login<br># if users' DN can be specified with a common template. The template can use<br># the standard %variables (see user_filter). Note that you can't<br># use any pass_attrs if you use this setting.<br>#<br># If you use this setting, it's a good idea to use a different<br># dovecot-ldap.conf.ext for userdb (it can even be a symlink, just as long as<br># the filename is different in userdb's args). That way one connection is used<br># only for LDAP binds and another connection is used for user lookups.<br># Otherwise the binding is changed to the default DN before each user lookup.<br>#<br># For example:<br>#   auth_bind_userdn = cn=%u,ou=people,o=org<br>#<br>#auth_bind_userdn =<br><br># LDAP protocol version to use. Likely 2 or 3.<br>ldap_version = 3<br><br># LDAP base. %variables can be used here.<br># For example: dc=mail, dc=example, dc=org<br>base = ou=People,dc=cs,dc=lafayette,dc=edu<br><br># Dereference: never, searching, finding, always<br>deref = never<br><br># Search scope: base, onelevel, subtree<br>scope = subtree<br><br># User attributes are given in LDAP-name=dovecot-internal-name list. The<br># internal names are:<br>#   uid - System UID<br>#   gid - System GID<br>#   home - Home directory<br>#   mail - Mail location<br>#<br># There are also other special fields which can be returned, see<br># <a href="http://wiki2.dovecot.org/UserDatabase/ExtraFields">http://wiki2.dovecot.org/UserDatabase/ExtraFields</a><br>user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid<br><br># Filter for user lookup. Some variables can be used (see<br># <a href="http://wiki2.dovecot.org/Variables">http://wiki2.dovecot.org/Variables</a> for full list):<br>#   %u - username<br>#   %n - user part in user@domain, same as %u if there's no domain<br>#   %d - domain part in user@domain, empty if user there's no domain<br>user_filter = (&(objectClass=posixAccount)(uid=%u))<br><br># Password checking attributes:<br>#  user: Virtual user name (user@domain), if you wish to change the<br>#        user-given username to something else<br>#  password: Password, may optionally start with {type}, eg. {crypt}<br># There are also other special fields which can be returned, see<br># <a href="http://wiki2.dovecot.org/PasswordDatabase/ExtraFields">http://wiki2.dovecot.org/PasswordDatabase/ExtraFields</a><br>pass_attrs = uid=user,userPassword=password<br><br># If you wish to avoid two LDAP lookups (passdb + userdb), you can use<br># userdb prefetch instead of userdb ldap in dovecot.conf. In that case you'll<br># also have to include user_attrs in pass_attrs field prefixed with "userdb_"<br># string. For example:<br>#pass_attrs = uid=user,userPassword=password,\<br>#  homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid<br><br># Filter for password lookups<br>pass_filter = (&(objectClass=posixAccount)(uid=%u))<br><br># Attributes and filter to get a list of all users<br>#iterate_attrs = uid=user<br>#iterate_filter = (objectClass=posixAccount)<br><br># Default password scheme. "{scheme}" before password overrides this.<br># List of supported schemes is in: <a href="http://wiki2.dovecot.org/Authentication">http://wiki2.dovecot.org/Authentication</a><br>#default_pass_scheme = CRYPT</span><br></div><br></div><div>What do you suppose could be the problem?</div><div><br></div><div>Thanks,</div><div>Elias<br></div><div><br></div></div></div></div></div></div></div>