Negli articoli precedenti, abbiamo discusso come configurare da zero il tuo server di posta su CentOS 8/RHEL 8. Nella parte 1 e nella parte 2 di questa serie di tutorial, abbiamo appreso come configurare il server SMTP Postfix e server IMAP Dovecot , ma finora possiamo avere solo indirizzi e-mail per utenti con account Unix locale. Questo tutorial ti mostrerà come creare caselle di posta virtuali sul server di posta CentOS 8/RHEL 8 con PostfixAdmin , che è un'interfaccia basata sul Web open source per configurare e gestire un server di posta elettronica basato su Postfix per molti domini e utenti.
Con caselle di posta virtuali , non è necessario creare un account Unix locale per ogni indirizzo e-mail. Se hai intenzione di configurare un server di posta per un'azienda o un'organizzazione, è sempre meglio avere un modo semplice per creare caselle di posta virtuali in un'interfaccia basata sul Web, che consente anche agli utenti di modificare le proprie password. È qui che entra in gioco PostfixAdmin.
Funzioni PostfixAdmin
- gestire caselle di posta, domini virtuali e alias
- messaggi di ferie/fuori sede (personalmente penso che questa funzione sia meglio implementata in Roundcube Webmail.)
- alias domini (inoltro da un dominio a un altro con convalida del destinatario)
- gli utenti possono gestire la propria casella di posta (cambia alias, password e messaggio di ferie)
- Supporto della quota per singole caselle di posta e quota totale di un dominio
- Integrazione fetchmail:puoi recuperare le email dal tuo indirizzo email originale al tuo nuovo indirizzo email.
- client da riga di comando postfixadmin-cli per coloro che non vogliono fare clic in un'interfaccia web 😉
Nota :Una volta terminata la parte 3, non puoi più utilizzare gli account Unix locali come indirizzi e-mail. Devi creare indirizzi email dall'interfaccia web di PostfixAdmin.
Prerequisiti
Presumo che tu abbia seguito la parte 1 e la parte 2 di questa serie di tutorial. Se hai seguito i tutorial del server di posta su altri siti Web, ti consiglio di eliminare le tue configurazioni e ricominciare con la mia serie di tutorial, in modo da non essere confuso dai diversi processi di installazione.
Una volta soddisfatti i requisiti di cui sopra, installiamo e configuriamo PostfixAdmin.
Passaggio 1:installa MariaDB Database Server su CentOS 8/RHEL 8
PostfixAdmin è scritto in PHP e richiede un database (MySQL/MariaDB, PostgreSQL o SQLite). Questo articolo utilizzerà MariaDB, che è un sostituto drop-in di MySQL. È stato sviluppato da ex membri del team MySQL preoccupati che Oracle possa trasformare MySQL in un prodotto closed-source. Immettere il comando seguente per installare MariaDB su CentOS 8/RHEL 8.
sudo dnf install mariadb-server mariadb -y
Dopo averlo installato, dobbiamo avviarlo.
sudo systemctl start mariadb
Abilita l'avvio automatico all'avvio del sistema.
sudo systemctl enable mariadb
Verifica lo stato:
systemctl status mariadb
uscita:
● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-10-12 09:02:53 UTC; 33s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Main PID: 18608 (mysqld) Status: "Taking your SQL requests now..." Tasks: 30 (limit: 5092) Memory: 77.0M CGroup: /system.slice/mariadb.service └─18608 /usr/libexec/mysqld --basedir=/usr
"Abilitato ” indica che l'avvio automatico all'avvio è abilitato e possiamo vedere che il server MariaDB è in esecuzione. Ora dobbiamo eseguire lo script di sicurezza.
sudo mysql_secure_installation
Quando ti chiede di inserire la password di root di MariaDB, premi il tasto Invio poiché la password di root non è ancora impostata. Quindi inserisci y
per impostare la password di root per il server MariaDB.
Successivamente, puoi premere Invio per rispondere a tutte le domande rimanenti, che rimuoveranno l'utente anonimo, disabiliteranno l'accesso root remoto e rimuoveranno il database di test. Questo passaggio è un requisito di base per la sicurezza del database MariaDB. (Nota che la lettera Y
è in maiuscolo, il che significa che è la risposta predefinita.)
Passaggio 2:scarica PostfixAdmin su CentOS 8/RHEL 8 Server
Accedi al tuo server di posta, quindi scarica il file di installazione di PostfixAdmin sul tuo server. Vai alla pagina Gitbub di PostfixAdmin per scaricare l'ultima versione. Puoi usare il wget
strumento per scaricarlo dalla riga di comando. Il link per il download è sempre disponibile nel formato seguente. Se esce una nuova versione, sostituisci semplicemente la 3.3.8 con il nuovo numero di versione.
sudo dnf install wget wget https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.3.8.tar.gz
Una volta scaricato, estrai l'archivio.
Se stai usando Apache, estrailo in /var/www/
directory e rinominalo in postfixadmin
.
sudo dnf install tar sudo tar xvf postfixadmin-3.3.8.tar.gz -C /var/www/ sudo mv /var/www/postfixadmin-postfixadmin-3.3.8 /var/www/postfixadmin
Se stai usando Nginx, estrailo in /usr/share/nginx/
directory e rinominalo in postfixadmin
.
sudo dnf install tar sudo tar xvf postfixadmin-3.3.8.tar.gz -C /usr/share/nginx/ sudo mv /usr/share/nginx/postfixadmin-postfixadmin-3.3.8 /usr/share/nginx/postfixadmin
Passaggio 3:configurazione delle autorizzazioni
PostfixAdmin richiede un templates_c
directory e il server Web necessita dell'accesso in lettura e scrittura a questa directory. Abbiamo anche bisogno di cambiare il contesto di SELinux per renderlo scrivibile. Quindi esegui i seguenti comandi.
Apache
sudo mkdir /var/www/postfixadmin/templates_c sudo setfacl -R -m u:apache:rwx /var/www/postfixadmin/templates_c/ sudo chcon -t httpd_sys_rw_content_t /var/www/postfixadmin/templates_c/ -R
Nginx
sudo mkdir /usr/share/nginx/postfixadmin/templates_c sudo setfacl -R -m u:nginx:rwx /usr/share/nginx/postfixadmin/templates_c/ sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/postfixadmin/templates_c/ -R
Per impostazione predefinita, SELinux vieta ad Apache/Nginx di effettuare richieste di rete ad altri server, ma in seguito Apache/Nginx deve richiedere lo stato del certificato TLS dal server Let's Encrypt CA per la pinzatura OCSP, quindi dobbiamo dire a SELinux di consentire ad Apache/Nginx con quanto segue comando.
sudo setsebool -P httpd_can_network_connect 1
Se usi Nginx, devi anche eseguire il comando seguente per dare all'utente nginx i permessi di lettura e scrittura su 3 directory.
sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ /var/lib/php/session/ /var/lib/php/wsdlcache/
Riavvia Apache/Nginx.
sudo systemctl restart httpd sudo systemctl restart nginx
A partire da Dovecot 2.3.11, l'utente del server web ha bisogno dell'autorizzazione per leggere il certificato Let's Encrypt TLS per eseguire l'hashing della password. Esegui i due comandi seguenti per concedere le autorizzazioni.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/
Fase 4:crea un database e un utente per PostfixAdmin
Accedi alla shell MySQL/MariaDB come root con il comando seguente. Dovrai inserire la password di root MySQL/MariaDB.
mysql -u root -p
Una volta effettuato l'accesso, crea un database per PostfixAdmin utilizzando il comando seguente. L'ho chiamato postfixadmin
, ma puoi usare il nome che preferisci. (Non tralasciare il punto e virgola.)
create database postfixadmin;
Quindi inserisci il comando seguente per creare un utente del database per PostfixAdmin. Questo comando concede anche tutti i privilegi del database postfixadmin all'utente. Sostituisci postfixadmin_password
con la tua password preferita. Nota che la password non deve contenere il #
carattere o potresti non essere in grado di accedere in seguito.
grant all privileges on postfixadmin.* to 'postfixadmin'@'localhost' identified by 'postfixadmin_password';
Svuota la tabella dei privilegi per rendere effettive le modifiche e poi esci dalla shell di MariaDB.
flush privileges; exit;
Fase 5:configura PostfixAdmin
Il file di configurazione PostfixAdmin predefinito è config.inc.php
. Dobbiamo creare un config.local.php
file e aggiungi configurazioni personalizzate.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Aggiungi le seguenti righe nel file, in modo che PostfixAdmin possa connettersi al database MySQL/MariaDB. Sostituisci postfixadmin_password
con la vera password PostfixAdmin creata al punto 4.
<?php $CONF['configured'] = true; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_port'] = '3306'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = 'postfixadmin_password'; $CONF['database_name'] = 'postfixadmin'; $CONF['encrypt'] = 'dovecot:BLF-CRYPT'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 12";
Salva e chiudi il file. Nota che useremo lo schema di password BLF-CRYPT.
Fase 6:crea un host virtuale Apache o un file di configurazione Nginx per PostfixAdmin
Apache
Se utilizzi il server web Apache, crea un host virtuale per PostfixAdmin.
sudo nano /etc/httpd/conf.d/postfixadmin.conf
Inserisci il seguente testo nel file. Sostituisci postfixadmin.example.com
con il tuo vero nome di dominio e non dimenticare di impostare un record DNS A per esso.
<VirtualHost *:80> ServerName postfixadmin.example.com DocumentRoot /var/www/postfixadmin/public/ ErrorLog /var/log/httpd/postfixadmin_error.log CustomLog /var/log/httpd/postfixadmin_access.log combined <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/postfixadmin/public/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Salva e chiudi il file. Ricarica Apache per rendere effettive le modifiche.
sudo systemctl reload httpd
Ora dovresti essere in grado di vedere la procedura guidata di installazione basata sul Web di PostfixAdmin su http://postfixadmin.example.com/setup.php
.
Nginx
Se utilizzi il server web Nginx, crea un host virtuale per PostfixAdmin.
sudo nano /etc/nginx/conf.d/postfixadmin.conf
Inserisci il seguente testo nel file. Sostituisci postfixadmin.example.com
con il tuo vero nome di dominio e non dimenticare di impostare un record DNS A per esso.
server { listen 80; listen [::]:80; server_name postfixadmin.example.com; root /usr/share/nginx/postfixadmin/public/; index index.php index.html; access_log /var/log/nginx/postfixadmin_access.log; error_log /var/log/nginx/postfixadmin_error.log; location / { try_files $uri $uri/ /index.php; } location ~ ^/(.+\.php)$ { try_files $uri =404; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
Salva e chiudi il file. Quindi testa la configurazione di Nginx.
sudo nginx -t
Se il test ha esito positivo, ricarica Nginx per rendere effettive le modifiche.
sudo systemctl reload nginx
Ora dovresti essere in grado di vedere la procedura guidata di installazione basata sul Web di PostfixAdmin su http://postfixadmin.example.com/setup.php
.
Passaggio 7:installa i moduli PHP richiesti e consigliati
PostfixAdmin richiede il php-imap
modulo per creare sottocartelle nelle caselle di posta, ma php-imap
non è incluso nel repository CentOS 8/RHEL 8 predefinito, quindi è necessario utilizzare il repository Remi per installare questo modulo PHP.
Installa Remi Repo.
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Quindi reimposta i flussi dei moduli PHP.
sudo dnf module reset php
Abilita il php:remi-7.4
flusso di moduli.
sudo dnf module enable php:remi-7.4 -y
Quindi puoi eseguire il seguente comando per installare i moduli PHP richiesti o consigliati da PostfixAdmin.
sudo dnf install -y php-fpm php-imap php-mbstring php-mysqlnd php-gd php-opcache php-json php-curl php-zip php-xml php-bz2 php-intl php-gmp
Dobbiamo eseguire il comando seguente per dire a SELinux di consentire Apache per eseguire codice PHP tramite PHP-FPM.
sudo setsebool -P httpd_execmem 1
Se usi Nginx , modifica il file di configurazione PHP-FPM:
nano /etc/php-fpm.d/www.conf
Per impostazione predefinita, PHP-FPM viene eseguito come apache
utente. Dato che stai usando il server web Nginx, dobbiamo cambiarlo. Trova le due righe seguenti.
user = apache group = apache
Cambiali in
user = nginx group = nginx
Salva e chiudi il file. Quindi avvia PHP-FPM.
sudo systemctl start php-fpm
Abilita l'avvio automatico all'avvio del sistema.
sudo systemctl enable php-fpm
Riavvia Apache o Nginx.
sudo systemctl restart httpd sudo systemctl restart nginx
Fase 8:abilitazione di HTTPS
Per crittografare il traffico HTTP, possiamo abilitare HTTPS installando un certificato TLS gratuito emesso da Let's Encrypt.
Se utilizzi Apache, esegui questo comando per ottenere e installare il certificato TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
Se utilizzi Nginx, esegui il comando seguente per ottenere e installare il certificato TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d postfixadmin.example.com
Dove:
--apache
:usa il plugin Apache.--nginx
:usa il plugin nginx.--agree-tos
:Accetta i termini di servizio.--redirect
:Forza HTTPS tramite reindirizzamento 301.--hsts
: Aggiungi l'intestazione Strict-Transport-Security a ogni risposta HTTP. Forzare il browser a utilizzare sempre TLS per il dominio. Difende dallo stripping SSL/TLS.--staple-ocsp
: Abilita la pinzatura OCSP. Una risposta OCSP valida viene pinzata al certificato offerto dal server durante TLS.--email
:Email utilizzata per la registrazione e il contatto di recupero.-d
flag è seguito da un elenco di nomi di dominio, separati da virgola. Puoi aggiungere fino a 100 nomi di dominio.
Il certificato dovrebbe ora essere ottenuto e installato automaticamente, come indicato dai messaggi seguenti.
Fase 9:crea una policy SELinux personalizzata per il server Web
Durante l'installazione, PostfixAdmin deve leggere i file di configurazione di Dovecot per creare la password. Per impostazione predefinita, SELinux non consente al server web di leggere i file di configurazione di Dovecot. Dobbiamo creare una politica SELinux personalizzata per consentire questa azione.
Installa i pacchetti richiesti.
sudo dnf install binutils rpm-build setools-console policycoreutils-python3 policycoreutils-devel
Genera una policy personalizzata per httpd. (Se usi Nginx, sostituisci httpd
con nginx
.)
sudo sepolicy generate --init /usr/sbin/httpd
Modifica il file di imposizione del tipo.
sudo nano httpd.te
Aggiungi la riga seguente alla fine di questo file, così Apache/Nginx sarà in grado di leggere i file di configurazione di Dovecot.
dovecot_read_config(httpd_t)
Salva e chiudi il file. Quindi installa la nuova politica di SELinux.
sudo ./httpd.sh
Ora Apache/Nginx dovrebbe essere in grado di leggere i file di configurazione di Dovecot.
Se non sai cosa aggiungere a httpd.te
file, esegui il comando seguente dopo che si è verificata una negazione di SELinux.
sudo ausearch -m AVC -ts recent | audit2allow -R
audit2allow
suggerirà modifiche.
Fase 10:abilita le statistiche in Dovecot
PostfixAdmin ha bisogno di leggere le statistiche di Dovecot. Modifica il file di configurazione di Dovecot.
sudo nano /etc/dovecot/conf.d/10-master.conf
Aggiungi le seguenti righe alla fine di questo file. Se usi Nginx, cambia apache
a nginx
.
service stats { unix_listener stats-reader { user = apache group = apache mode = 0660 } unix_listener stats-writer { user = apache group = apache mode = 0660 } }
Salva e chiudi il file. Quindi aggiungi il server web a dovecot
gruppo.
Apache
sudo gpasswd -a apache dovecot
NGinx
sudo gpasswd -a nginx dovecot
Riavvia Dovecot.
sudo systemctl restart dovecot
Fase 11:termina l'installazione nel browser Web
Vai a postfixadmin.example.com/setup.php
per eseguire la procedura guidata di configurazione basata sul Web. Innanzitutto, devi creare una password di configurazione per PostfixAdmin.
Dopo aver creato l'hash della password, PostfixAdmin visualizzerà una riga come quella di seguito.
$CONF['setup_password'] = 'db1b019982a6ba878bdc6bd923bef03e:4e29fdd341b570364064a5ad69652f3d8bee0bb4';
Devi aprire il config.local.php
file.
Apache
sudo nano /var/www/postfixadmin/config.local.php
Nginx
sudo nano /usr/share/nginx/postfixadmin/config.local.php
Aggiungi la riga visualizzata nella pagina di configurazione di PostfixAdmin alla fine del file come di seguito.
Dopo aver salvato il file, è necessario aggiornare la pagina di configurazione di PostfixAdmin e inserire nuovamente la password di configurazione, quindi creare l'account amministratore. Non utilizzare un indirizzo e-mail Gmail, Yahoo Mail o Microsoft per l'account amministratore, altrimenti potresti non essere in grado di accedere in seguito. Usa un indirizzo email sul tuo dominio. Puoi creare l'indirizzo email in un secondo momento in PostfixAdmin.
Una volta creato l'account di superamministratore, puoi accedere a PostfixAdmin all'indirizzo postfixadmin.example.com/login.php
.
Se visualizzi il seguente errore quando tenti di creare un account di superamministratore,
can’t encrypt password with dovecotpw, see error log for details
È perché l'utente del server Web non dispone dell'autorizzazione per leggere il certificato Let's Encrypt TLS. Per risolverlo, esegui i due comandi seguenti per concedere le autorizzazioni.
Apache
sudo setfacl -R -m u:apache:rx /etc/letsencrypt/live/ sudo setfacl -R -m u:apache:rx /etc/letsencrypt/archive/
Nginx
sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/live/ sudo setfacl -R -m u:nginx:rx /etc/letsencrypt/archive/
Se vedi il seguente errore,
Invalid query: Specified key was too long; max key length is 1000 bytes
Quindi è necessario accedere al server di database MySQL/MariaDB come root dalla riga di comando,
mysql -u root -p
e cambia le regole di confronto predefinite da utf8mb4_general_ci
a utf8_general_ci
.
MariaDB [(none)]> alter database postfixadmin collate ='utf8_general_ci';
Esci dalla console MySQL/MariaDB e ricarica la pagina setup.php.
Fase 12:configura Postfix per utilizzare il database MySQL/MariaDB
Per impostazione predefinita, Postfix consegna e-mail solo agli utenti con un account Unix locale. Per fare in modo che consegni e-mail agli utenti virtuali le cui informazioni sono archiviate nel database, dobbiamo configurare Postfix per utilizzare i domini delle cassette postali virtuali.
Innanzitutto, dobbiamo aggiungere il supporto per le mappe MySQL per Postfix installando postfix-mysql
pacchetto.
sudo dnf install postfix-mysql
Quindi modifica il file di configurazione principale di Postfix.
sudo nano /etc/postfix/main.cf
Aggiungi le seguenti righe alla fine di questo file. (Nell'editor di testo Nano, puoi premere Ctrl+W
, quindi Ctrl+V
per saltare alla fine di un file.)
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Dove:
virtual_mailbox_domains
punta a un file che dirà a Postfix come cercare le informazioni sul dominio dal database.virtual_mailbox_maps
punta a file che diranno a Postfix come cercare gli indirizzi e-mail dal database.virtual_alias_maps
punta a file che diranno a Postfix come cercare gli alias dal database.
Vogliamo utilizzare dovecot per consegnare le email in arrivo all'archivio messaggi degli utenti virtuali, quindi aggiungi anche la seguente riga alla fine di questo file.
virtual_transport = lmtp:unix:private/dovecot-lmtp
Salva e chiudi il file. Successivamente, dobbiamo creare il .cf
file uno per uno. Crea la directory sql.
sudo mkdir /etc/postfix/sql/
Crea mysql_virtual_domains_maps.cf file.
sudo nano /etc/postfix/sql/mysql_virtual_domains_maps.cf
Aggiungi il seguente contenuto. Sostituisci postfixadmin_password
con la password postfixadmin impostata nel passaggio 4.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' #expansion_limit = 100
Crea mysql_virtual_mailbox_maps.cf file.
sudo nano /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
Aggiungi il seguente contenuto.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100
Crea il mysql_virtual_alias_domain_mailbox_maps.cf file.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Aggiungi il seguente contenuto.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
Crea mysql_virtual_alias_maps.cf file.
sudo nano /etc/postfix/sql/mysql_virtual_alias_maps.cf
Aggiungi il seguente contenuto.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s' AND active = '1' #expansion_limit = 100
Crea il mysql_virtual_alias_domain_maps.cf
file.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
Aggiungi il seguente contenuto.
user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Crea il mysql_virtual_alias_domain_catchall_maps
file.
sudo nano /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
Aggiungi il seguente contenuto.
# handles catch-all settings of target-domain user = postfixadmin password = postfixadmin_password hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
Poiché le password del database sono memorizzate in testo normale, dovrebbero essere leggibili solo dall'utente suffisso e root, cosa che viene eseguita eseguendo i due comandi seguenti.
sudo chmod 0640 /etc/postfix/sql/* sudo setfacl -R -m u:postfix:rx /etc/postfix/sql/
Successivamente, dobbiamo modificare il valore di mydestination
parametro in Postfix. Visualizza il valore corrente:
postconf mydestination
Esempio di output:
mydestination = linuxbabe.com, $myhostname, localhost.$mydomain, localhost
Il mydestination
contiene un elenco di nomi di dominio che riceveranno le e-mail consegnate agli account Unix locali. Nella parte 1, abbiamo aggiunto il nome di dominio apex (come linuxbabe.com) a mydestination
. Poiché utilizzeremo la casella di posta virtuale, è necessario rimuovere il nome di dominio apex dall'elenco eseguendo il comando seguente.
sudo postconf -e "mydestination = \$myhostname, localhost.\$mydomain, localhost"
Ora apriamo nuovamente il file di configurazione principale di Postfix.
sudo nano /etc/postfix/main.cf
Aggiungi le seguenti righe alla fine di questo file.
virtual_mailbox_base = /var/vmail virtual_minimum_uid = 2000 virtual_uid_maps = static:2000 virtual_gid_maps = static:2000
La prima riga definisce la posizione di base dei file di posta. Le restanti 3 righe definiscono l'ID utente e l'ID gruppo che Postfix utilizzerà durante la consegna delle e-mail in arrivo alla casella di posta. Utilizziamo l'ID utente 2000 e l'ID gruppo 2000.
Salva e chiudi il file. Riavvia Postfix per rendere effettive le modifiche.
sudo systemctl restart postfix
Successivamente, dobbiamo creare un utente chiamato vmail
con ID 2000 e un gruppo con ID 2000.
sudo adduser vmail --system --uid 2000 --user-group --no-create-home
Crea la posizione della base di posta.
sudo mkdir /var/vmail/
Crea vmail
come proprietario.
sudo chown vmail:vmail /var/vmail/ -R
Abbiamo anche bisogno di cambiare il contesto di SELinux per renderlo scrivibile.
sudo chcon -t mail_spool_t /var/vmail/ -R
Fase 13:Configura Dovecot per utilizzare il database MySQL/MariaDB
Abbiamo anche bisogno di configurare il server Dovecot IMAP per interrogare le informazioni dell'utente dal database. Innanzitutto, esegui il comando seguente per aggiungere il supporto MySQL per Dovecot.
sudo dnf install dovecot-mysql
Quindi modifica 10-mail.conf file.
sudo nano /etc/dovecot/conf.d/10-mail.conf
Nella parte 2, abbiamo utilizzato il seguente mail_location
. I messaggi e-mail sono archiviati nella Maildir
directory nella directory home di ciascun utente.
mail_location = maildir:~/Maildir
Poiché ora stiamo utilizzando il dominio della casella di posta virtuale, dobbiamo abilitare mail_home
per gli utenti virtuali aggiungendo la riga seguente nel file, perché gli utenti virtuali non hanno home directory per impostazione predefinita.
mail_home = /var/vmail/%d/%n
Salva e chiudi il file. Quindi modifica 10-auth.conf file.
sudo nano /etc/dovecot/conf.d/10-auth.conf
Nella parte 2, abbiamo utilizzato il seguente valore per auth_username_format
.
auth_username_format = %n
Il %n
abbandonerebbe il dominio se fosse stato assegnato. Poiché nella parte 2 stavamo utilizzando un account Unix locale per il nome utente di ogni indirizzo e-mail, dobbiamo utilizzare %n
per eliminare il dominio, in modo che gli utenti potessero accedere con l'indirizzo email completo.
Ora stiamo usando i domini delle cassette postali virtuali, il che significa che il nome utente di ogni indirizzo email include la parte del dominio, quindi dobbiamo cambiare il auth_username_format
come segue. %u
non abbandonerà il dominio. Ciò consente agli utenti di accedere con l'indirizzo email completo.
auth_username_format = %u
Decommenta la riga seguente alla fine del file, in modo che Dovecot possa interrogare le informazioni sull'utente dal database.
!include auth-sql.conf.ext
Ora probabilmente non vuoi che gli utenti Unix locali inviino e-mail senza registrare indirizzi e-mail in PostfixAdmin, quindi commenta la riga seguente aggiungendo il carattere # all'inizio, quindi Dovecot non interrogherà il /etc/passwd
o /etc/shadow
file.
#!include auth-system.conf.ext
Può essere utile aggiungere le seguenti due righe in questo file per eseguire il debug dei problemi di accesso. Gli errori di accesso verrebbero registrati in /var/log/maillog
file. (Una volta che gli utenti possono accedere senza problemi, puoi commentare le due righe seguenti.)
auth_debug = yes auth_debug_passwords = yes
Salva e chiudi il file.
Crea il dovecot-sql.conf.ext
file.
sudo nano /etc/dovecot/dovecot-sql.conf.ext
Ecco il contenuto che dovresti avere. Sostituisci postfixadmin_password
con la password postfixadmin impostata nel passaggio 4.
driver = mysql connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin_password default_pass_scheme = BLF-CRYPT password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1' user_query = SELECT maildir, 2000 AS uid, 2000 AS gid FROM mailbox WHERE username = '%u' AND active='1' iterate_query = SELECT username AS user FROM mailbox
Salva e chiudi il file. E riavvia Dovecot.
sudo systemctl restart dovecot
Quando un utente tenta di accedere, Dovecot genera un hash BLF-CRYPT dalla password inserita dall'utente, quindi lo confronta con l'hash della password memorizzato nel database.
Fase 14:aggiungi dominio e cassette postali in PostfixAdmin
Accedi all'interfaccia web di PostfixAdmin come amministratore. Fai clic su Domain List
scheda e seleziona New Domain
per aggiungere un dominio. Puoi scegliere quanti alias e caselle di posta sono consentiti per questo dominio.
Quindi fai clic su Virtual List
scheda e seleziona Add Mailbox
per aggiungere un nuovo indirizzo email per il tuo dominio.
Ora avvia il tuo client di posta elettronica desktop come Mozilla Thunderbird e aggiungi un account di posta. Se Thunderbird ha trovato la configurazione del tuo server di posta come di seguito, fai semplicemente clic su Fine pulsante e sarai in grado di leggere e inviare e-mail.
Se Thunderbird non ha trovato la configurazione del tuo server di posta, fai clic su Configurazione manuale per inserire i dettagli del tuo server di posta.
- Nella sezione del server in arrivo, seleziona il protocollo IMAP, inserisci
mail.your-domain.com
come nome del server, scegli la porta 143 e STARTTLS. Sceglinormal password
come metodo di autenticazione. - Nella sezione in uscita, seleziona il protocollo SMTP, inserisci
mail.your-domain.com
come nome del server, scegli la porta 587 e STARTTLS. Sceglinormal password
come metodo di autenticazione.
Suggerimento :puoi anche utilizzare la porta 993 con crittografia SSL/TLS per IMAP e utilizzare la porta 465 con crittografia SSL/TLS per SMTP. Non dovresti non usa la porta 25 come porta SMTP nei client di posta per inviare le email in uscita.
Ora dovresti essere in grado di connetterti al tuo server di posta elettronica e anche inviare e ricevere e-mail con il tuo client di posta elettronica desktop!
Suggerimenti per la risoluzione dei problemi
Come regola generale, dovresti sempre controllare il registro della posta (/var/log/maillog
) sul tuo server di posta quando si verifica un errore. Di seguito è riportato un elenco di errori specifici e suggerimenti per la risoluzione dei problemi.
Impossibile accedere dai client di posta
Se non riesci ad accedere al tuo server di posta da un client di posta desktop, scansiona il tuo server di posta per scoprire se le porte sono aperte. Nota che dovresti eseguire il comando seguente da un altro computer o server Linux. Se lo esegui sul tuo server di posta, le porte sembreranno sempre aperte.
sudo nmap mail.your-domain.com
E controlla se Dovecot è in esecuzione.
systemctl status dovecot
Puoi anche controllare il registro della posta (/var/log/maillog
), che potrebbe darti degli indizi. Se Dovecot non si avvia, l'errore potrebbe non essere registrato nel /var/log/maillog
file, puoi eseguire il comando seguente per vedere cosa c'è che non va.
sudo journalctl -eu dovecot
Se vedi il seguente errore nel registro della posta, è probabile che tu non abbia impostato una password corretta nel .cf
file in /etc/postfix/sql/
directory.
postfix/trivial-rewrite[28494]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem postfix/trivial-rewrite[28494]: warning: virtual_alias_domains lookup failure
Se vedi il seguente errore nel registro della posta, è perché hai dimenticato di aggiungere mail_location = maildir:~/Maildir
nel /etc/dovecot/conf.d/10-mail.conf
file.
open(/var/mail/[email protected]) failed: Permission denied (euid=2000(vmail) egid=2000(vmail) missing +w perm: /var/mail, we're not in group 8(mail), dir owned by 0:8 mode=0775
DNS Cloudflare
Come ho detto nella parte 1, se utilizzi il servizio DNS Cloudflare, non dovresti abilitare la funzione CDN (proxy) durante la creazione di record DNS A e record AAAA per il nome host del tuo server di posta. Cloudflare non supporta il proxy SMTP o IMAP.
Accesso al relè negato
Se viene visualizzato il messaggio "Accesso al relè negato " errore quando si tenta di inviare e-mail da un client di posta, è molto probabile che si utilizzi la porta 25 come porta SMTP nel client di posta. Come ho detto poco fa, dovresti usare la porta 587 o 465 come porta SMTP nei client di posta (Mozilla Thunberbird, Microsoft Outlook, ecc.) per inviare e-mail in uscita. La porta 25 deve essere utilizzata per le comunicazioni tra server SMTP e server SMTP.
App Posta iOS
If you use the iOS Mail app to log into your mail server and encounter the following error.
You can try to fix it by enforcing SSL encryption, for both SMTP and IMAP.
Fun fact :It seems the iOS Mail app has difficulty in supporting STARTTLS on IMAP port 143, but it supports STARTTLS on the submission port 587.
Temporary Lookup Failure
If your mail server was working fine for some time, but suddenly you find the following error in the mail log,
Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains: proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf: table lookup problem Aug 25 20:25:24 mx postfix/trivial-rewrite[3313]: warning: virtual_alias_domains lookup failure Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: NOQUEUE: reject: 451 4.3.0 <[email protected]>: Temporary lookup failure; proto=ESMTP Aug 25 20:25:24 mx postfix/submission/smtpd[3464]: Temporary lookup failure
It’s likely that your MariaDB/MySQL database stopped somehow. You can use the following command to check when your database server stopped.
sudo journalctl -eu mariadb
o
sudo journalctl -eu mysql
A common cause for this situation is that your server is out-of-memory. Check if your server has enough memory.
htop
o
free -m
Change User Password in PostfixAdmin
Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php
, then change their passwords.
Automatically Clean the Junk Folder and Trash Folder
To delete emails in Junk folder for all users, you can run
sudo doveadm expunge -u *@example.com mailbox Junk all
To delete emails in Trash folder for all users, run
sudo doveadm expunge -u *@example.com mailbox Trash all
I think it’s better to clean emails that have been in the Junk or Trash folder for more than 2 weeks, instead of cleaning all emails.
sudo doveadm expunge -u *@example.com mailbox Junk savedbefore 2w
Then add a cron job to automate the job.
sudo crontab -e
Add the following line to clean Junk and Trash folder every day
@daily doveadm expunge -u *@example.com mailbox Junk savedbefore 2w;doveadm expunge -u *@example.com mailbox Trash savedbefore 2w
Restricting Access to Sendmail
By default, any local user can use the sendmail
binary to submit outgoing emails. Now that your mail server is using virtual mailboxes, you might want to restrict access to the sendmail
binary to trusted local users only, so a malicious user can’t use it to send a large volume of emails to damage your mail server’s reputation. Edit the Postfix main configuration file.
sudo nano /etc/postfix/main.cf
Add the following line to the end of this file, so only the root and www-data user can submit emails via sendmail. You can also add other usernames.
authorized_submit_users = root,www-data
Salva e chiudi il file. Then restart Postfix.
sudo systemctl restart postfix
Passaggio successivo
I hope this tutorial helped you install and use PostfixAdmin on CentOS 8/RHEL 8 to create virtual mailboxes. In part 4, I will show you how to set up SPF and DKIM with Postfix to improve email deliverability and in a future tutorial, I’m going to show you how to host multiple domains with PostfixAdmin.
If you want to access emails from a web browser, then I recommend Roundcube, which is a very popular and featured-rich open-source webmail client. As always, if you found this post useful, subscribe to our free newsletter to get more tips and tricks. Take care 🙂