GNU/Linux >> Linux Esercitazione >  >> Ubuntu

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

Negli articoli precedenti, abbiamo discusso di come configurare da zero il tuo server di posta su Ubuntu. Nella parte 1 e nella parte 2 di questa serie di tutorial, abbiamo appreso come configurare il server SMTP Postfix e il server IMAP Dovecot, ma finora possiamo avere indirizzi e-mail solo per utenti con account Unix locali. Questo tutorial ti mostrerà come creare caselle di posta virtuali su un server di posta Ubuntu 20.04 con PostfixAdmin, che è un'interfaccia web open source per configurare e gestire un server di posta basato su Postfix per molti domini e utenti.

Con le cassette postali 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 sia meglio farlo nella webmail di Roundcube)
  • 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

È necessario aver seguito la parte 1 e la parte 2 di questa serie di tutorial prima di continuare a leggere questo articolo. Se hai seguito i tutorial del server di posta su altri siti Web, ti consiglio di eliminare le tue configurazioni (sudo apt purge postfix dovecot-core ) e ricominciare con la mia serie di tutorial, in modo da non essere confuso da diversi processi di installazione.

Una volta soddisfatti i requisiti di cui sopra, installiamo e configuriamo PostfixAdmin.

Passaggio 1:installa il server di database MariaDB

PostfixAdmin è scritto in PHP e richiede un database (MySQL/MariaDB, PostgreSQL o SQLite). Questo articolo utilizzerà il database 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 Ubuntu 20.04.

sudo apt install mariadb-server mariadb-client

Dopo l'installazione, il server MariaDB dovrebbe essere avviato automaticamente. Usa systemctl per verificarne lo stato.

systemctl status mariadb

Uscita:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

Se non è in esecuzione, avvialo con questo comando:

sudo systemctl start mariadb

Per consentire a MariaDB di avviarsi automaticamente all'avvio, esegui

sudo systemctl enable mariadb

Ora esegui lo script di sicurezza post-installazione.

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 Y è in maiuscolo, il che significa che è la risposta predefinita.)

Passaggio 2:installa PostfixAdmin sul server Ubuntu 20.04

Accedi al tuo server di posta. Poiché alcuni lettori usano il server MariaDB, mentre altri usano MySQL, il che complica le cose, quindi prima di installare PostfixAdmin, installiamo dbconfig-no-thanks pacchetto per prevenire il postfixadmin pacchetto dall'avvio della procedura guidata di configurazione del database.

sudo apt install dbconfig-no-thanks

Quindi installa PostfixAdmin dal repository del software Ubuntu predefinito.

sudo apt install postfixadmin

Nota :Se hai precedentemente installato mysql-server su Ubuntu, l'installazione di PostfixAdmin rimuoverà probabilmente il mysql-server pacchetto dal tuo sistema. Puoi reinstallarlo eseguendo il comando seguente.

sudo apt install mysql-server

Ora dobbiamo rimuovere dbconfig-no-thanks pacchetto.

sudo apt remove dbconfig-no-thanks

Quindi avvia la procedura guidata di configurazione del database per PostfixAdmin.

sudo dpkg-reconfigure postfixadmin

Durante l'installazione, ti verrà chiesto se desideri reinstallare il database per PostfixAdmin. Questo significa semplicemente creare un database chiamato postfixadmin , non rimuoverà i database esistenti. Premi il tasto Tab per scegliere .

Quindi seleziona il tipo di database predefinito:mysql , se utilizzi MySQL o MariaDB.

Quindi, scegli il metodo di connessione predefinito:Unix socket .

Quindi scegli il plug-in di autenticazione predefinito per MySQL/MariaDB.

Premi Invio per scegliere il nome del database predefinito per PostfixAdmin.

Premi Invio per scegliere il nome utente del database predefinito per PostfixAdmin.

Successivamente, è necessario impostare una password per questo utente. Nota che la password non deve contenere il # carattere o potresti non essere in grado di accedere in seguito.


Infine, scegli l'utente amministrativo predefinito del database.

Dopo aver installato PostfixAdmin, puoi accedere alla console MySQL/MariaDB con il comando seguente. Dovrai inserire la password per il postfixadmin utente.

mysql -u postfixadmin -p

E puoi controllare a quali database l'utente ha i permessi per accedere con il seguente comando.

SHOW DATABASES;

Uscita:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| postfixadmin       |
+--------------------+
2 rows in set (0.002 sec)

Per impostazione predefinita, il postfixadmin il database non contiene tabelle. Puoi disconnetterti dalla console MySQL/MariaDB con il seguente comando.

EXIT;

L'installazione creerà anche due file di configurazione:/etc/dbconfig-common/postfixadmin.conf e /etc/postfixadmin/dbconfig.inc.php , entrambi contengono le impostazioni di accesso al database, inclusi il nome utente e la password del database. Dobbiamo cambiare il tipo di database da mysql a mysqli in entrambi i due file.

sudo nano /etc/dbconfig-common/postfixadmin.conf

Cambia

dbc_dbtype='mysql'

a

dbc_dbtype='mysqli'

Quindi modifica il secondo file.

sudo nano /etc/postfixadmin/dbconfig.inc.php

Cambia

$dbtype='mysql';

a

$dbtype='mysqli';

I file web vengono installati in /usr/share/postfixadmin/ directory, che è di proprietà di root. PostfixAdmin richiede un templates_c directory, quindi creala.

sudo mkdir /usr/share/postfixadmin/templates_c

Dobbiamo fornire www-data l'utente legge, scrive ed esegue i permessi su questa directory con il comando seguente.

sudo setfacl -R -m u:www-data:rwx /usr/share/postfixadmin/templates_c/

Se il tuo sistema non riesce a trovare il setfacl comando, devi installare il acl pacchetto.

sudo apt install acl

Fase 3: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/apache2/sites-available/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 /usr/share/postfixadmin/public

  ErrorLog ${APACHE_LOG_DIR}/postfixadmin_error.log
  CustomLog ${APACHE_LOG_DIR}/postfixadmin_access.log combined

  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>

  <Directory /usr/share/postfixadmin/>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

Salva e chiudi il file. Quindi abilita questo host virtuale con:

sudo a2ensite postfixadmin.conf

Ricarica Apache per rendere effettive le modifiche.

sudo systemctl reload apache2

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/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/php7.4-fpm.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 .

Fase 4:installa i moduli PHP richiesti e consigliati

Esegui il comando seguente per installare i moduli PHP richiesti o consigliati da PostfixAdmin.

sudo apt install php7.4-fpm php7.4-imap php7.4-mbstring php7.4-mysql php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-bz2 php7.4-intl php7.4-gmp

Quindi riavvia Apache. (Se usi Nginx, non è necessario riavviare Nginx.)

sudo systemctl restart apache2

Fase 5:abilitazione di HTTPS

Per crittografare il traffico HTTP, possiamo abilitare HTTPS installando un certificato TLS gratuito emesso da Let's Encrypt. Esegui il comando seguente per installare il client Let's Encrypt (certbot) sul server Ubuntu 20.04.

sudo apt install certbot

Se usi Apache, installa il plugin Certbot Apache.

sudo apt install python3-certbot-apache

Ed 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 usi Nginx, devi anche installare il plugin Certbot Nginx.

sudo apt install python3-certbot-nginx

Quindi, 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

  • --nginx :usa il plugin nginx.
  • --apache :usa il plugin Apache.
  • --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.

Il certificato dovrebbe ora essere ottenuto e installato automaticamente, come indicato dal messaggio sottostante.

Fase 6:utilizza lo schema di password complesse in PostfixAdmin e Dovecot

Per impostazione predefinita, PostfixAdmin e Dovecot utilizzano MD5-CRYPT, che è uno schema di password debole. Puoi elencare gli schemi di password disponibili in Dovecot con il seguente comando.

sudo doveadm pw -l

Esempio di output:

SHA1 SSHA512 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA RPA DES-CRYPT CRYPT SSHA MD5-CRYPT SKEY PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 LANMAN SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 NTLM MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

Argon2 è uno schema di password abbastanza forte. Per usarlo, dobbiamo modificare il file di configurazione di PostfixAdmin, che per impostazione predefinita è /usr/share/postfixadmin/config.inc.php , ma possiamo creare un file separato (config.local.php ) per memorizzare le nostre modifiche, in modo che non vengano sovrascritte quando verrà installata una nuova versione di PostfixAdmin in futuro.

sudo nano /usr/share/postfixadmin/config.local.php

Aggiungi le seguenti righe nel file per utilizzare lo schema di password Argon2.

<?php
$CONF['encrypt'] = 'dovecot:ARGON2I';

$CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5";
if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see https://github.com/postfixadmin/postfixadmin/issues/171
    $CONF['dovecotpw'] = "/usr/bin/doveadm pw -r 5"; # debian
}

Salva e chiudi il file. Possiamo anche creare un collegamento simbolico in /etc/postfixadmin/ directory, nel caso in cui PostfixAdmin non riesca a trovare il file.

sudo ln -s /usr/share/postfixadmin/config.local.php /etc/postfixadmin/config.local.php

Configurare lo schema di password per Dovecot nel passaggio 11.

Fase 7: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.

service stats {
    unix_listener stats-reader {
    user = www-data
    group = www-data
    mode = 0660
}

unix_listener stats-writer {
    user = www-data
    group = www-data
    mode = 0660
  }
}

Salva e chiudi il file. Quindi aggiungi il server web a dovecot gruppo.

sudo gpasswd -a www-data dovecot

Riavvia Dovecot.

sudo systemctl restart dovecot

Fase 8:termina l'installazione nel browser Web

Vai a postfixadmin.example.com/setup.php per eseguire la procedura guidata di configurazione basata sul Web. Innanzitutto, verificherà se tutte le dipendenze sono installate e creerà le tabelle del database.

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,

sudo mysql -u root

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. Una volta soddisfatti tutti i requisiti, puoi creare una password di configurazione per PostfixAdmin.

Dopo aver creato l'hash della password, devi aprire il /usr/share/postfixadmin/config.local.php file e aggiungi l'hash della password di installazione alla fine del file come di seguito. Ovviamente, devi utilizzare l'hash della tua password.

Quindi, crea 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.

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é i www-data l'utente non dispone dell'autorizzazione per leggere il certificato Let's Encrypt TLS. Per risolverlo, esegui il seguente comando per concedere le autorizzazioni.

sudo setfacl -R -m u:www-data:rx /etc/letsencrypt/live/ /etc/letsencrypt/archive/

Una volta creato l'account superadmin, puoi accedere a PostfixAdmin su postfixadmin.example.com/login.php .

Fase 9:verifica delle tabelle nel database

Il processo di configurazione di PostfixAdmin popola il postfixadmin database con alcune tabelle predefinite. Per noi è utile conoscere i nomi e la struttura delle tabelle. Accedi alla console MySQL/MariaDB.

sudo mysql -u root

Seleziona il postfixadmin banca dati.

USE postfixadmin;

Elenca tutte le tabelle in questo database.

SHOW TABLES;

Uscita:

+------------------------+
| Tables_in_postfixadmin |
+------------------------+
| admin                  |
| alias                  |
| alias_domain           |
| config                 |
| domain                 |
| domain_admins          |
| fetchmail              |
| log                    |
| mailbox                |
| quota                  |
| quota2                 |
| vacation               |
| vacation_notification  |
+------------------------+
13 rows in set (0.001 sec)

Le 3 tabelle più importanti sono:

  • domain :contiene informazioni sui domini che utilizzano il tuo server di posta per inviare e ricevere email.
  • mailbox :contiene informazioni su ogni indirizzo email, inclusa la password con hash e la posizione dei file di posta.
  • alias :contiene l'alias di ogni indirizzo email.

Se sei interessato, puoi controllare quali colonne contiene ogni tabella. Ad esempio, il comando seguente ci mostrerà le colonne nel domain tabella.

DESCRIBE domain;

Uscita:

+-------------+--------------+------+-----+---------------------+-------+
| Field       | Type         | Null | Key | Default             | Extra |
+-------------+--------------+------+-----+---------------------+-------+
| domain      | varchar(255) | NO   | PRI | NULL                |       |
| description | varchar(255) | NO   |     | NULL                |       |
| aliases     | int(10)      | NO   |     | 0                   |       |
| mailboxes   | int(10)      | NO   |     | 0                   |       |
| maxquota    | bigint(20)   | NO   |     | 0                   |       |
| quota       | bigint(20)   | NO   |     | 0                   |       |
| transport   | varchar(255) | NO   |     | NULL                |       |
| backupmx    | tinyint(1)   | NO   |     | 0                   |       |
| created     | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| modified    | datetime     | NO   |     | 2000-01-01 00:00:00 |       |
| active      | tinyint(1)   | NO   |     | 1                   |       |
+-------------+--------------+------+-----+---------------------+-------+

Esci dalla console MySQL/MariaDB.

EXIT;

Passaggio 10: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 apt 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.

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 dei 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 password con la password postfixadmin impostata nel passaggio 2.

user = postfixadmin
password = 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 = 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 = 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 = 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 = 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 = 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 = $myhostname, linuxbabe.com, 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 --group --uid 2000 --disabled-login --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

Fase 11: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 apt 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 abbasserebbe il dominio se fosse stato fornito. 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 di questo file, in modo che Dovecot possa interrogare le informazioni sull'utente dal database MySQL/MariaDB.

!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/mail.log 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.

Modifica il dovecot-sql.conf.ext file.

sudo nano /etc/dovecot/dovecot-sql.conf.ext

Ecco il contenuto che dovresti avere in questo file. Per impostazione predefinita, tutte le righe in questo file sono commentate, quindi puoi semplicemente copiarle e incollarle in fondo. Sostituisci password con la password postfixadmin impostata nel passaggio 2.

driver = mysql

connect = host=localhost dbname=postfixadmin user=postfixadmin password=password

default_pass_scheme = ARGON2I

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

Riavvia Dovecot.

sudo systemctl restart dovecot

Quando un utente tenta di accedere, Dovecot utilizza l'algoritmo Argon2 per generare un hash della password dalla password immessa dall'utente, quindi confrontarlo con l'hash della password memorizzato nel database.

Fase 12: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.

Successivamente, puoi aprire il tuo client di posta elettronica desktop come Mozilla Thunderbird e aggiungere un account 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! Nota che non puoi utilizzare account Unix locali per accedere ora. Devi accedere con l'utente virtuale creato dall'interfaccia web di PostfixAdmin.

Suggerimenti per la risoluzione dei problemi

Come regola generale, dovresti sempre controllare il registro della posta (/var/log/mail.log ) 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/mail.log ), che potrebbe darti degli indizi. Se Dovecot non si avvia, l'errore potrebbe non essere registrato in /var/log/mail.log 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

Se utilizzi l'app Mail di iOS per accedere al tuo server di posta e riscontri il seguente errore.

Puoi provare a risolverlo applicando la crittografia SSL, sia per SMTP che per IMAP.

Fatto divertente :sembra che l'app iOS Mail abbia difficoltà a supportare STARTTLS sulla porta IMAP 143, ma supporta STARTTLS sulla porta di invio 587.

Ricerca temporanea non riuscita

Se il tuo server di posta ha funzionato bene per un po' di tempo, ma all'improvviso trovi il seguente errore nel registro della posta,

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

È probabile che il tuo database MariaDB/MySQL si sia interrotto in qualche modo. 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

Automatically Clean the Junk Folder and Trash Folder

To delete emails in Junk folder for all users, you can run

sudo doveadm expunge -A mailbox Junk all

To delete emails in Trash folder, run

sudo doveadm expunge -A 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 -A 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 -A mailbox Junk savedbefore 2w;doveadm expunge -A mailbox Trash savedbefore 2w

To receive report when a Cron job produces an error, you can add the following line above all Cron jobs.

MAILTO="[email protected]"

Salva e chiudi il file. And you’re done.

Change User Password in PostfixAdmin

Users can log into PostfixAdmin at https://postfixadmin.example.com/users/login.php , then change their passwords.

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. Modifica il file di configurazione principale di Postfix.

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. Quindi riavvia Postfix.

sudo systemctl restart postfix

Passaggio successivo

I hope this tutorial helped you install and use PostfixAdmin on Ubuntu 20.04 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. Abbi cura di 🙂


Ubuntu
  1. Come installare DKIM sul server Ubuntu

  2. Come configurare Zimbra Mail Server su Ubuntu 16

  3. Installa il server web Apache su Ubuntu 12.10

  4. Server FTP di base di Ubuntu?

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

Come creare un ambiente virtuale Python 3 su Ubuntu 20.04

Come creare un server di posta completo su Ubuntu

Come installare Postfix Mail Server su Ubuntu 20.04

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

Come installare il server di posta con PostfixAdmin su CentOS 7

Come creare un server Minecraft su Ubuntu 20.04