Sådan konfigureres Postfix og Dovecot med brugere af virtuelle domæner i Linux - del 2


I den forrige artikel i denne serie forklarede vi, hvordan du opsætter og administrerer mailserverdatabasen sikkert ved hjælp af phpMyAdmin.

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

Nu er det tid til at konfigurere de interne programmer, der gør afsendelse og modtagelse af e-mails til virkelighed: Postfix og Dovecot (til at håndtere henholdsvis udgående og indgående e-mails).

Konfiguration af Postfix Mail Server

Inden du begynder at konfigurere Postfix, ville det være værd og godt at se på dets mandsider her og lægge særlig vægt på afsnittet "Information til nye Postfix-brugere". Hvis du gør det, vil du finde det lettere at følge med i denne vejledning.

Med få ord skal du vide, at der er to konfigurationsfiler til Postfix:

  1. /etc/postfix/main.cf (Postfix-konfigurationsparametre, se man 5 postconf for flere detaljer).
  2. /etc/postfix/master.cf (Postfix master daemon configuraton, se man 5 master for yderligere detaljer).

I /etc/postfix/main.cf skal du finde (eller tilføje om nødvendigt) følgende linjer og sørge for, at de matcher nedenstående værdier:

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 næste tre indstillinger er af særlig betydning. I filerne angivet med gult konfigurerer vi Postfix's adgang til Domains_tbl, Users_tbl og Alias_tbl-tabellerne:

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

Bemærk, at du kan vælge forskellige filnavne ovenfor, så længe du sørger for at oprette dem og indsætte følgende indhold i dem. I begge tilfælde skal du udskifte YourPassword med den adgangskode, du valgte til dba-brugeren i del 1, eller du kan også bruge MariaDB-rodlegitimationsoplysningerne til bruger og adgangskode nedenfor.

Sørg også for, at du bruger nøjagtigt de samme navne på e-mail-serverdatabasen og -tabeller oprettet 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'

Endelig glem ikke at ændre tilladelserne til disse filer til 640:

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

Og ejerskabet til brugerrod og gruppepostfix:

# 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 at aktivere sikre forbindelser skal vi derefter sørge for, at følgende indstillinger ikke er kommenterede (eller tilføjes om nødvendigt) 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

Bemærk: Indrykket i linjerne, der begynder med indstillingen -o , er kritisk; Ellers returnerer postfix-kontrol en fejl:

Før du gemmer ændringer, skal du tilføje 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 tidspunkt er det vigtigt at kontrollere, om Postfix har adgang til databasetabellerne og de domæner, konti og alias, som vi oprettede i del 1.

For at gøre dette bruger vi postmap-kommandoen, et værktøj til at teste kommunikation med tabellerne Postfix vil se op under drift, men først og fremmest bliver vi nødt til at genstarte postfix:

# 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

På billedet nedenfor kan vi se, at for 1 poster i databasen returneres en 1. Ellers vises intet tilbage på skærmen. I tilfælde af aliaskontrol skal du bemærke, at den aktuelle e-mail-konto, som aliaset er tilknyttet, returneres:

Bemærk, at vi IKKE autentificerer mod de legitimationsoplysninger, der er angivet for hver e-mail-konto, vi tester kun Postfixs evne til at opdage disse poster i databasen.

Hvis du får en anden output end ovenfor, skal du sørge for at bruge et gyldigt bruger/kodeordspar i mariadb-vdomains.cf, mariadb-vusers.cf og mariadb-valias.cf (eller hvad du end vælger at kalde disse filer ).

Konfigurering af Dovecot

Som IMAP/POP3-server giver Dovecot en måde for brugere gennem en Mail User Agent (MUA, eller også kendt som klient), såsom Thunderbird eller Outlook, at nævne et par eksempler for at få adgang til deres mail.

Lad os begynde med at oprette en bruger og en gruppe til at håndtere e-mails (vi har brug for dette, da vores e-mail-konti ikke er tilknyttet en systembruger). Du kan bruge en anden UID og GID (bortset fra 5000, som vi gør nedenfor), så længe den ikke er i brug og er et højt tal:

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

Indstillingerne for Dovecot er opdelt på flere konfigurationsfiler (sørg for, at de følgende linjer ikke er kommenterede, og/eller rediger dem, så de svarer til nedenstående indstillinger).

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 godkendelse via SQL og lad andre godkendelsesmetoder kommenteres):

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

I /etc/dovecot/conf.d/auth-sql.conf.ext (bemærk, at vi gemmer e-mails i et bibliotek med navnet yourdomain.com inde i/home/vmail, som du skal oprette, hvis det findes ikke. I vores tilfælde gjorde vi mkdir /home/vmail/linuxnewz.com for at administrere e-mails for dette domæne):

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 indbakker til brugerkonti oprettes, når e-mails for sådanne konti først modtages.

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 (udskift certifikatet og nøgleveje, hvis du planlægger at bruge et certifikat underskrevet af 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 indtast dine databaseoplysninger og legitimationsoplysninger for den administrative bruger oprettet i del 1.

Vigtigt: Hvis din adgangskode indeholder en stjerne (#) , skal du vedlægge forbindelsesstrengen som angivet 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';

Derudover kan du konfigurere logning til Dovecot til at være adskilt fra Postfix i /etc/dovecot/conf.d/10-logging.conf :

log_path = /var/log/dovecot.log

Endelig skal du sørge for, at Dovecot-loggen er tilgængelig for brugerdovecot:

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

Bekræft og rett Postifix-konfiguration og aktiver SMTP, POP3 og IMAP i Firewall

Hvis du tilfældigvis løber ind i problemer, mens du konfigurerer Postfix og/eller Dovecot, i stedet for at indsende alle konfigurationsfilerne for at bede om hjælp, kan du få et konfigurationsoversigt (kun ukommenterede 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

Derudover skal du sørge for, at e-mail-indbakkerne kun kan læses af vmail:

# chown –R vmail:vmail /home/vmail

Konfigurationsfiler skal også kunne læses af vmail- og dovecot-brugere:

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

Endelig skal du sørge for at aktivere SMTP, POP3 og IMAP gennem firewallen:

# 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-mail-klient til Postfix

Efter at have sikret adgang via firewallen til de porte, der bruges i e-mail-kommunikation, er det tid til at konfigurere en e-mail-klient. Ved hjælp af [e-mailbeskyttet] og dets tilsvarende adgangskode sammen med mail.linuxnewz.com som IMAP (eller POP3) og SMTP-server er vi klar til at sende og modtage e-mails til og fra en sådan konto:

Du kan sikkert se bort fra den advarselsmeddelelse, der vises, fordi du bruger et certifikat, der ikke er underskrevet af en betroet tredjeparts CA:

Lad os komponere en kort test-e-mail og klikke på Send:

Når du bliver bedt om at acceptere det selvsignerede certifikat for den udgående server, skal du bekræfte det tidligere som før:

Til sidst skal du gå til destinations-e-mailen for at se, om du har modtaget den e-mail, der netop er sendt. Svar i så fald på det, og se om det leveres tilbage til kilde-e-mail-indbakken (ellers henvises til Postfix-loggen på/var/log/maillog eller Dovecot-loggen på /var/log/dovecot.log for oplysninger om fejlfinding) :

Du har nu en fungerende Postfix- og Dovecot-mailserver og kan begynde at sende og modtage e-mails.

Resumé

I denne artikel har vi forklaret, hvordan du konfigurerer Postfix og Dovecot til at håndtere e-mail-trafik på din Linux-server. Hvis noget ikke fungerer som angivet i denne artikel, skal du sørge for at tage dig tid til at kontrollere Dovecot-dokumentationen.

Bemærk, at selvom opsætning af en Postfix-mailserver ikke er en let opgave, er det en givende oplevelse for enhver systemadministrator.

Hvis du efter at have gennemgået dokumenterne stadig kæmper med Postfix og/eller Dovecot, er du velkommen til at sende os en note ved hjælp af kommentarformularen nedenfor, og vi vil være glade for at hjælpe dig (glem ikke at uploade til en online opbevaringstjeneste konfigurationen af Postfix og Dovecot som hentet ved hjælp af postconf og doveconf som beskrevet i denne artikel).