Hvordan konfigurere Postfix og Dovecot med virtuelle domenebrukere i Linux - Del 2


I den forrige artikkelen i denne serien forklarte vi hvordan du setter opp og administrerer e-postserverdatabasen sikkert ved å bruke phpMyAdmin.

Krav:

  1. Installer Postfix Mail Server og Dovecot med MariaDB – Del 1

Nå er det på tide å konfigurere de interne programmene som vil gjøre sending og mottak av e-post til en realitet: Postfix og Dovecot (for å håndtere henholdsvis utgående og innkommende e-poster).

Konfigurere Postfix Mail Server

Før du begynner å konfigurere Postfix, vil det være verdt å ta en titt på man-sidene her, og legge spesiell vekt på delen med tittelen "Informasjon for nye Postfix-brukere" . Hvis du gjør det, vil du finne det lettere å følge med på denne opplæringen.

Med få ord bør du vite at det er to konfigurasjonsfiler for Postfix:

  1. /etc/postfix/main.cf (Konfigurasjonsparametere for Postfix, se man 5 postconf for flere detaljer).
  2. /etc/postfix/master.cf (Konfigurasjon for Postfix master daemon, se man 5 master for ytterligere detaljer).

I /etc/postfix/main.cf, finn (eller legg til, om nødvendig) følgende linjer og sørg for at de samsvarer med verdiene som er angitt nedenfor:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

De neste tre innstillingene er av spesiell betydning. I filene angitt i gult vil vi konfigurere Postfixs tilgang til tabellene Domains_tbl, Users_tbl og Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Merk at du kan velge forskjellige filnavn ovenfor, så lenge du sørger for å opprette dem og sette inn følgende innhold i dem. I hvert tilfelle erstatter du DittPassord med passordet du valgte for dba-brukeren i Del 1, eller du kan også bruke MariaDB rotlegitimasjon for bruker og passord nedenfor.

Sørg også for at du bruker nøyaktig de samme navnene på e-postserverdatabasen og tabellene opprettet i Del 1.

I /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

I /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

I /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Til slutt, ikke glem å endre tillatelsene til disse filene til 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

Og eierskapet til brukerens root og gruppe postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

For å aktivere sikre tilkoblinger må vi deretter sørge for at følgende innstillinger ikke er kommentert (eller lagt til, om nødvendig) i /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Merk: Innrykk i linjene som begynner med -o-alternativet er kritisk; ellers vil postfix check returnere en feil:

Før du lagrer endringer, legg til følgende linjer nederst i filen:


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

På dette tidspunktet er det viktig å sjekke om Postfix har tilgang til databasetabellene og domenene, kontoene og aliaset som vi opprettet i Del 1.

For å gjøre det bruker vi kommandoen postmap, et verktøy for å teste kommunikasjon med tabellene Postfix vil slå opp under drift, men først og fremst må vi starte postfix på nytt:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

I bildet nedenfor kan vi se at for eksisterende poster i databasen returneres en 1. Ellers vises ingenting tilbake på skjermen. I tilfelle av aliassjekken, merk at den faktiske e-postkontoen aliaset er tilordnet til returneres:

Vær oppmerksom på at vi IKKE autentiserer mot legitimasjonen som er satt for hver e-postkonto, vi tester bare muligheten til Postfix til å oppdage disse postene i databasen.

Derfor, hvis du får en annen utgang enn ovenfor, sørg for at du bruker et gyldig bruker/passord-par i mariadb-vdomains.cf, mariadb-vusers.cf og mariadb-valias.cf (eller hva du velger å kalle disse filene).

Konfigurering av dovecot

Som en IMAP/POP3-server gir Dovecot en måte for brukere gjennom en Mail User Agent (MUA, eller også kjent som klient), for eksempel Thunderbird eller Outlook, for å nevne noen eksempler for å få tilgang til e-posten deres.

For å begynne, la oss opprette en bruker og en gruppe for å håndtere e-poster (vi trenger dette siden e-postkontoene våre ikke er knyttet til en systembruker). Du kan bruke en annen UID og GID (annet enn 5000 som vi gjør nedenfor) så lenge de ikke er i bruk og er et høyt tall:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Innstillingene for Dovecot er delt over flere konfigurasjonsfiler (sørg for at følgende linjer ikke er kommentert og/eller rediger dem slik at de samsvarer med innstillingene angitt nedenfor).

I /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

I /etc/dovecot/conf.d/10-auth.conf (aktiver kun autentisering gjennom SQL og la andre autentiseringsmetoder kommenteres):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

I /etc/dovecot/conf.d/auth-sql.conf.ext (merk at vi vil lagre e-poster i en katalog som heter dittdomene.com i / home/vmail, som du må opprette hvis den ikke eksisterer. I vårt tilfelle gjorde vi mkdir /home/vmail/linuxnewz.com for å administrere e-poster for det domenet):


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Individuelle innbokser for brukerkontoer vil bli opprettet når e-poster for slike kontoer først mottas.

I /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

I /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

I /etc/dovecot/conf.d/10-ssl.conf (erstatt sertifikatet og nøkkelbanene hvis du planlegger å bruke et sertifikat signert av en CA):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

I /etc/dovecot/dovecot-sql.conf.ext skriver du inn databaseinformasjonen din og legitimasjonen til den administrative brukeren opprettet i Del 1.

Viktig: Hvis passordet ditt inneholder en stjerne (#), må du legge ved tilkoblingsstrengen som angitt i eksemplet nedenfor:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

I tillegg kan du konfigurere logging for Dovecot til å være atskilt fra Postfix i /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Til slutt, sørg for at Dovecot-loggen er tilgjengelig for brukeren dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Bekreft og fiks Postifix-konfigurasjon og aktiver SMTP, POP3 og IMAP i brannmur

Hvis du tilfeldigvis støter på problemer mens du konfigurerer Postfix og/eller Dovecot, i stedet for å sende inn alle konfigurasjonsfilene for å be om hjelp, kan du få et konfigurasjonssammendrag (kun ukommenterte linjer) med:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

I tillegg må du sørge for at e-postinnboksene kun kan leses av vmail:


chown –R vmail:vmail /home/vmail

Konfigurasjonsfiler bør også kunne leses av vmail- og dovecot-brukere:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Til slutt, sørg for at du aktiverer SMTP, POP3 og IMAP gjennom brannmuren:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Konfigurer Thunderbird som en e-postklient for Postfix

Etter å ha sikret tilgang gjennom brannmuren for portene som brukes i e-postkommunikasjon, er det på tide å konfigurere en e-postklient. Ved å bruke [email  og tilhørende passord, sammen med mail.linuxnewz.com som IMAP (eller POP3) og SMTP-server, er vi klare til å begynne å sende og motta e-poster til og fra en slik konto:

Du kan trygt se bort fra advarselsmeldingen som vises fordi du bruker et sertifikat som ikke er signert av en klarert tredjeparts CA:

La oss skrive en kort test-e-post og klikke Send:

Når du blir bedt om å godta det selvsignerte sertifikatet for den utgående serveren, bekrefter du det tidligere som før:

Til slutt, gå til destinasjonse-posten for å se om du mottok e-posten som nettopp ble sendt. I så fall, svar på den og se om den er levert tilbake til kilden for e-postinnboksen (ellers kan du se Postfix-loggen på /var/log/maillog eller Dovecot-loggen på /var /log/dovecot.log for feilsøkingsinformasjon):

Du har nå en fungerende Postfix og Dovecot e-postserver og kan begynne å sende og motta e-post.

Sammendrag

I denne artikkelen har vi forklart hvordan du konfigurerer Postfix og Dovecot for å håndtere e-posttrafikk på din Linux-server. Hvis noe ikke fungerer som angitt i denne artikkelen, sørg for at du tar deg tid til å sjekke Postfix- og Dovecot-dokumentasjonen.

Vær oppmerksom på at selv om det ikke er en lett oppgave å sette opp en Postfix-e-postserver, er det en givende opplevelse for hver systemadministrator.

Hvis du etter å ha gått gjennom dokumentene fortsatt sliter med Postfix og/eller Dovecot, send oss gjerne en melding ved å bruke kommentarskjemaet nedenfor, så vil vi gjerne hjelpe deg (ikke glem å laste opp Postfix- og Dovecot-konfigurasjonen til en nettbasert lagringstjeneste som hentet ved hjelp av postconf og doveconf som beskrevet i denne artikkelen).