Am generat fișiere ssl folosind letsencrypt și totul este instalat și configurat, dar IMAP și SMTP nu funcționează. Ceea ce pot găsi din fișierul /var/log/mail.log este această eroare:
dovecot: imap-login: Deconectat (deconectat înainte ca auth-ul să fie gata, așteptat 0 secunde): user=<>, TLS handshaking: SSL_accept() failed: error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert certificate: SSL alert number 42
Nu există niciun jurnal pentru eșecul SMTP.
/etc/postfix/main.cf
# Consultați /usr/share/postfix/main.cf.dist pentru o versiune comentată, mai completă
# Specific Debian: Specificarea unui nume de fișier va provoca primul
# rând din acel fișier care va fi folosit ca nume. Valoarea implicită Debian
# este /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = nu
# atașarea domeniului .este treaba MUA.
append_dot_mydomain = nr
# Anulați comentariile următoarei rânduri pentru a genera avertismente „e-mail întârziat”.
#delay_warning_time = 4h
readme_directory = nr
# Consultați http://www.postfix.org/COMPATIBILITY_README.html -- implicit la 2 pe
# instalări noi.
compatibility_level = 2
# Parametri TLS
smtpd_tls_cert_file=/etc/letsencrypt/live/domain.net/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/domain.net/privkey.pem
smtpd_tls_security_level=mai
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=mai
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = mail.domain.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, domain.net, albastru, localhost.localdomain, localhost
relayhost =
rețelele mele = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
cutie_poștală_size_limit = 0
destinatar_delimiter = +
inet_interfaces = all
inet_protocols = all
mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = nr
# Configurația milter
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
10-ssl.conf
##
## Setări SSL
##
# Suport SSL/TLS: da, nu, necesar. <doc/wiki/SSL.txt>
ssl = necesar
# Certificat X.509 SSL/TLS codificat PEM și cheie privată. Sunt deschise înainte
# eliminarea privilegiilor root, așa că păstrați fișierul cheie necitit de oricine, în afară de
# rădăcină. Doc/mkcert.sh inclus poate fi folosit pentru a genera cu ușurință auto-semnat
# certificat, asigurați-vă că actualizați domeniile în dovecot-openssl.cnf
ssl_cert = </etc/letsencrypt/live/domain.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/domain.net/privkey.pem
# Dacă fișierul cheie este protejat prin parolă, dați parola aici. Alternativ
# dă-l când pornești dovecot cu parametrul -p. Deoarece acest fișier este adesea
# care poate fi citită în întreaga lume, vă recomandăm să plasați această setare într-o altă setare
# root deținut fișierul 0600 folosind ssl_key_password = <cale.
#ssl_key_password =
# Autoritate de certificare de încredere codificată PEM. Setați acest lucru numai dacă intenționați să îl utilizați
# ssl_verify_client_cert=yes. Fișierul trebuie să conțină certificatul (certificatele) CA
# urmat de CRL-urile care se potrivesc. (de exemplu, ssl_ca = </etc/ssl/certs/ca.pem)
#ssl_ca =
# Solicitați ca verificarea CRL să reușească pentru certificatele client.
#ssl_require_crl = da
# Director și/sau fișier pentru certificate SSL CA de încredere. Acestea sunt folosite numai
# când Dovecot trebuie să acționeze ca un client SSL (de exemplu, backend imapc sau
# serviciu de trimitere). Directorul este de obicei /etc/ssl/certs în
# Sisteme bazate pe Debian și fișierul este /etc/pki/tls/cert.pem în
# Sisteme bazate pe RedHat.
ssl_client_ca_dir = /etc/ssl/certs
#ssl_client_ca_file =
# Necesită un certificat valid când te conectezi la un server la distanță
#ssl_client_require_valid_cert = da
# Solicitați clientului să trimită un certificat. Dacă doriți să o solicitați, setați
# auth_ssl_require_client_cert=da în secțiunea de autentificare.
#ssl_verify_client_cert = nr
# Ce câmp din certificat să folosești pentru numele de utilizator. commonName și
# x500UniqueIdentifier sunt alegerile obișnuite. De asemenea, va trebui să setați
# auth_ssl_username_from_cert=yes.
#ssl_cert_username_field = commonName
# Parametri SSL DH
# Generați parametri noi cu `openssl dhparam -out /etc/dovecot/dh.pem 4096`
# Sau migrați din fișierul vechi ssl-parameters.dat cu comanda dovecot
# dă la pornire când ssl_dh este dezactivat.
ssl_dh = </usr/share/dovecot/dh.pem
# Versiunea minimă a protocolului SSL de utilizat. Valorile potențial recunoscute sunt SSLv3,
# TLSv1, TLSv1.1 și TLSv1.2, în funcție de versiunea OpenSSL utilizată.
#ssl_min_protocol = TLSv1
# Cifre SSL de utilizat, valoarea implicită este:
#ssl_cipher_list = ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
# Pentru a dezactiva DH non-EC, utilizați:
#ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@ PUTERE
# Listă de curbe eliptice separate prin două puncte de utilizat. Valoare goală (prestabilită)
# înseamnă folosirea setărilor implicite din biblioteca SSL. P-521:P-384:P-256 ar fi un
# exemplu de valoare validă.
#ssl_curve_list =
# Preferați ordinea de criptare a serverului decât a clientului.
#ssl_prefer_server_ciphers = da
# Dispozitiv criptografic SSL de utilizat, pentru valori valide, rulați „openssl engine”
#ssl_crypto_device =
# Opțiuni suplimentare SSL. Opțiunile acceptate în prezent sunt:
# compresie - Activați compresia.
# no_ticket - Dezactivează biletele de sesiune SSL.
#ssl_options =
ssl_min_protocol = TLSv1.2
Gazdă virtuală Apache mail.domain.net.conf
<VirtualHost *:80>
ServerName mail.domain.net
DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName mail.domain.net
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log
CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/>
Options FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.net/privkey.pem
</VirtualHost>
porumbel.conf
## Fișierul de configurare Dovecot
# Dacă vă grăbiți, consultați http://wiki2.dovecot.org/QuickConfiguration
# Comanda „doveconf -n” oferă o ieșire curată a setărilor modificate. Foloseste-l
# în loc să copiați și să lipiți fișierele când postați pe lista de corespondență Dovecot.
Caracterul # „#” și tot ce urmează este tratat ca comentarii. Spații suplimentare
# și filele sunt ignorate. Dacă doriți să utilizați oricare dintre acestea în mod explicit, puneți
# valoare în ghilimele, de exemplu: cheie = "# caracter și spații albe în urmă"
# Majoritatea setărilor (dar nu toate) pot fi înlocuite de diferite protocoale și/sau
# IP-uri sursă/destinație prin plasarea setărilor în secțiuni, de exemplu:
# protocol imap { }, local 127.0.0.1 { }, la distanță 10.0.0.0/8 { }
# Valorile implicite sunt afișate pentru fiecare setare, nu este necesar să anulați comentariile
# acestea. Acestea sunt însă excepții de la aceasta: fără secțiuni (de exemplu, spațiu de nume {})
# sau setările pluginului sunt adăugate în mod implicit, acestea sunt enumerate doar ca exemple.
# Căile sunt, de asemenea, doar exemple, valorile implicite reale fiind bazate pe configurare
# Opțiuni. Căile enumerate aici sunt pentru configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var
# Activați protocoalele instalate
protocoale = imap lmtp
!include_try /usr/share/dovecot/protocols.d/*.protocol
# O listă separată prin virgulă de IP-uri sau gazde unde să asculte pentru conexiuni.
# „*” ascultă în toate interfețele IPv4, „::” ascultă în toate interfețele IPv6.
# Dacă doriți să specificați porturi non-implicite sau ceva mai complex,
# editați conf.d/master.conf.
#ascultă = *, ::
# Directorul de bază unde se stochează datele de rulare.
#base_dir = /var/run/dovecot/
# Numele acestei instanțe. În configurarea cu mai multe instanțe doveadm și alte comenzi
# poate folosi -i <nume_instanță> pentru a selecta ce instanță este utilizată (o alternativă
# la -c <config_path>). Numele instanței este, de asemenea, adăugat la procesele Dovecot
# în ieșirea ps.
#instance_name = porumbel
# Mesaj de salut pentru clienți.
#login_greeting = Porumbelul gata.
# Listă separată de spații de intervale de rețea de încredere. Conexiuni de la acestea
# IP-urilor au voie să-și suprascrie adresele și porturile IP (pentru înregistrare și
# pentru verificări de autentificare). disable_plaintext_auth este, de asemenea, ignorat pentru
# aceste rețele. De obicei, ați specifica aici serverele proxy IMAP.
#login_trusted_networks =
# Lista separată de spații de socket-uri de verificare a accesului de conectare (de exemplu, tcpwrap)
#login_access_sockets =
# Cu proxy_maybe=yes dacă destinația proxy se potrivește cu oricare dintre aceste IP-uri, nu faceți acest lucru
# proxy. Acest lucru nu este necesar în mod normal, dar poate fi util dacă destinația
# IP este de ex. IP-ul unui echilibrator de încărcare.
#auth_proxy_self =
# Afișați mai multe titluri detaliate ale proceselor (în ps). În prezent arată numele de utilizator și
# Adresa IP. Util pentru a vedea cine utilizează de fapt procesele IMAP
# (de exemplu, căsuțe poștale partajate sau dacă același uid este folosit pentru mai multe conturi).
#verbose_proctitle = nr
# Ar trebui să se oprească toate procesele atunci când procesul principal Dovecot se închide.
# Setarea la „nu” înseamnă că Dovecot poate fi actualizat fără
# forțarea conexiunilor client existente să se închidă (deși asta ar putea fi și
# o problemă dacă upgrade-ul este de ex. din cauza unei remedieri de securitate).
#shutdown_clients = da
# Dacă nu este zero, rulați comenzi de e-mail prin atâtea conexiuni la serverul doveadm,
# în loc să le rulați direct în același proces.
#doveadm_worker_count = 0
# Socket UNIX sau host:port folosit pentru conectarea la serverul doveadm
#doveadm_socket_path = doveadm-server
# Lista de variabile de mediu separate prin spații care sunt păstrate pe Dovecot
# pornire și transmis tuturor proceselor sale secundare. De asemenea, puteți oferi
# perechi cheie=valoare pentru a seta întotdeauna anumite setări.
#import_environment = TZ
##
## Setări server dicționar
##
# Dicționarul poate fi folosit pentru a stoca liste cheie=valoare. Acesta este folosit de mai mulți
# pluginuri. Dicționarul poate fi accesat fie direct, fie prin a
# server de dicționar. Următorul bloc dict mapează numele dicționarului la URI-uri
# când este utilizat serverul. Acestea pot fi apoi referite folosind URI-uri în format
# "proxy::<nume>".
dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
# Majoritatea configurației reale sunt incluse mai jos. Numele fișierelor sunt
# mai întâi sortat după valoarea lor ASCII și analizat în această ordine. Prefixele 00
# în numele fișierelor sunt menite să faciliteze înțelegerea ordinii.
!include conf.d/*.conf
# Un fișier de configurare poate încerca, de asemenea, să fie inclus fără a da o eroare dacă
# nu a fost găsit:
!include_try local.conf
10-auth.conf
##
## Procese de autentificare
##
# Dezactivează comanda LOGIN și toate celelalte autentificări în text simplu, cu excepția cazului în care
# Se utilizează SSL/TLS (capacitate LOGINDISABLED). Rețineți că dacă IP-ul de la distanță
# se potrivește cu IP-ul local (adică vă conectați de pe același computer),
# conexiunea este considerată sigură, iar autentificarea text simplu este permisă.
# Vezi și ssl=setarea necesară.
disable_plaintext_auth = da
# Dimensiunea memoriei cache de autentificare (de exemplu, 10 M). 0 înseamnă că este dezactivat. Rețineți că
# bsdauth, PAM și vpopmail necesită cache_key să fie setat pentru ca stocarea să fie utilizată.
#auth_cache_size = 0
# Timp de trăit pentru datele stocate în cache. După expirarea TTL, înregistrarea în cache este nr
# folosit mai mult, *cu excepția* dacă căutarea bazei de date principală returnează o eroare internă.
# De asemenea, încercăm să gestionăm automat modificările parolei: Dacă utilizatorul este anterior
# autentificarea a avut succes, dar aceasta nu a fost, cache-ul nu este folosit.
# Deocamdată funcționează numai cu autentificarea text simplu.
#auth_cache_ttl = 1 oră
# TTL pentru accesări negative (utilizatorul nu a fost găsit, parola nepotrivită).
# 0 dezactivează complet stocarea lor în cache.
#auth_cache_negative_ttl = 1 oră
# Lista de domenii separate prin spații pentru mecanismele de autentificare SASL care au nevoie
# lor. Îl puteți lăsa necompletat dacă nu doriți să acceptați mai multe tărâmuri.
# Mulți clienți îl folosesc pur și simplu pe primul listat aici, așa că păstrați domeniul implicit
# în primul rând.
#auth_realms =
# Tărâm/domeniu implicit de utilizat dacă nu a fost specificat niciunul. Acesta este folosit pentru ambele
# tărâmuri SASL și adăugarea @domain la numele de utilizator în autentificări în text simplu.
#auth_default_realm =
# Lista de caractere permise în numele de utilizator. Dacă numele de utilizator dat de utilizator conține
# un caracter care nu este listat aici, autentificarea eșuează automat. Asta e doar
# o verificare suplimentară pentru a vă asigura că utilizatorul nu poate exploata nicio posibilă evadare a citatului
# vulnerabilități cu baze de date SQL/LDAP. Dacă doriți să permiteți toate caracterele,
# setați această valoare la gol.
#auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
# Traducerea caracterelor numelui de utilizator înainte de a fi căutat din baze de date. The
# valoarea conține serii de la -> la caractere. De exemplu, „#@/@” înseamnă
# că caracterele „#” și „/” sunt traduse în „@”.
#auth_username_translation =
# Formatarea numelui de utilizator înainte de a fi căutat din baze de date. Poți să folosești
# variabilele standard de aici, de ex. %Lu ar fi numele de utilizator cu minuscule, %n ar face
# abandonați domeniul dacă a fost dat, sau „%n-AT-%d” ar schimba „@” în
# „-AT-”. Această traducere se face după modificările auth_username_translation.
auth_username_format = %n
# Dacă doriți să permiteți utilizatorilor master să se autentifice, specificând masterul
# nume de utilizator în șirul de nume de utilizator normal (adică nu se utilizează mecanismul SASL
# suport pentru acesta), puteți specifica aici caracterul separator. Formatul
# este atunci <username><separator><master username>. UW-IMAP folosește „*” ca
# separator, așa că ar putea fi o alegere bună.
#auth_master_user_separator =
# Nume de utilizator de utilizat pentru utilizatorii care se conectează cu mecanism SASL ANONIM
#auth_anonymous_username = anonim
# Numărul maxim de procese de lucru pentru autorizarea porumbelului. Sunt obișnuiți să execute
# blocarea interogărilor passdb și userdb (de ex. MySQL și PAM). Ei sunt
# creat și distrus automat după cum este necesar.
#auth_worker_max_count = 30
# Nume gazdă de utilizat în numele principale GSSAPI. Implicit este folosirea
# nume returnat de gethostname(). Folosiți „$ALL” (cu ghilimele) pentru a permite toate tastele
# intrări.
#auth_gssapi_hostname =
# Keytab Kerberos de utilizat pentru mecanismul GSSAPI. Va folosi sistemul
# implicit (de obicei /etc/krb5.keytab) dacă nu este specificat. Este posibil să fie nevoie să vă schimbați
# serviciul de autentificare să ruleze ca root pentru a putea citi acest fișier.
#auth_krb5_keytab =
# Efectuați autentificarea NTLM și GSS-SPNEGO folosind demonul winbind al lui Samba și
# ntlm_auth helper. <doc/wiki/Authentication/Mechanisms/Winbind.txt>
#auth_use_winbind = nu
# Calea pentru binarul de ajutor ntlm_auth de la Samba.
#auth_winbind_helper_path = /usr/bin/ntlm_auth
# Timp de amânare înainte de a răspunde la autentificări eșuate.
#auth_failure_delay = 2 secunde
# Solicitați un certificat de client SSL valid sau autentificarea eșuează.
#auth_ssl_require_client_cert = nr
# Preluați numele de utilizator din certificatul SSL al clientului, folosind
# X509_NAME_get_text_by_NID() care returnează DN-urile subiectului
# Denumirea comună.
#auth_ssl_username_from_cert = nr
# Lista separată de spațiu a mecanismelor de autentificare dorite:
# autentificare simplă digest-md5 cram-md5 ntlm rpa apop anonim gssapi otp skey
# gss-spnego
# NOTĂ: Consultați și setarea disable_plaintext_auth.
auth_mechanisms = autentificare simplă
##
## Parole și baze de date cu utilizatori
##
#
# Baza de date cu parole este folosită pentru a verifica parola utilizatorului (și nimic mai mult).
# Puteți avea mai multe passdb-uri și userdb-uri. Acest lucru este util dacă doriți
# permite atât utilizatorilor de sistem (/etc/passwd) cât și utilizatorilor virtuali să se autentifice fără
# duplicarea utilizatorilor sistemului în baza de date virtuală.
#
# <doc/wiki/PasswordDatabase.txt>
#
# Baza de date cu utilizatori specifică unde se află e-mailurile și ce ID-uri de utilizator/grup
# deține-le. Pentru configurarea cu un singur UID, utilizați userdb „static”.
#
# <doc/wiki/UserDatabase.txt>
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
În setarea mea DNS, am o înregistrare „A mail IP” și o înregistrare „MX domain.net mail.domain.net”.