GNU/Linux >> Linux Esercitazione >  >> Cent OS

Parte 3:PostfixAdmin – Crea cassette postali virtuali su CentOS 8/RHEL 8 Mail Server

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. Scegli normal 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. Scegli normal 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 🙂


Cent OS
  1. Installa il server web Apache CentOS 6 / RHEL 6

  2. Come installare Puppet su RHEL 8/CentOS 8

  3. Configura un server di posta con PostfixAdmin e MariaDB su CentOS 7

  4. Come configurare un server di posta con PostfixAdmin su CentOS 7

  5. Come creare un banner SSH nel server CentOS/RHEL

Configura il server Samba su CentOS 8/RHEL 8 per la condivisione di file

Ospita più domini di posta in PostfixAdmin su CentOS/RHEL

Installa e configura OpenDKIM su CentOS 8/RHEL 8 Mail Server

Parte 4:configurazione di SPF e DKIM con Postfix su CentOS 8/RHEL 8 Mail Server

Parte 3:PostfixAdmin – Crea cassette postali virtuali su Ubuntu 20.04 Mail Server

Come installare il server di posta con PostfixAdmin su CentOS 7