Ricerca nel sito web

Come configurare in modo sicuro il server di posta Postfix e Dovecot con il database (MariaDB) - Parte 1


In questa serie di 3 articoli discuteremo come configurare un server di posta Postfix con protezione antivirus e antispam in una scatola CentOS 7. Tieni presente che queste istruzioni funzionano anche su altre distribuzioni come RHEL/Fedora e Debian/Ubuntu.

Il nostro piano consiste nel memorizzare account di posta elettronica e alias in un database MariaDB che, per nostra comodità, sarà gestito tramite phpMyAdmin.

Se scegli di non installare phpMyAdmin o hai a che fare con un server solo CLI, forniremo anche il codice equivalente per creare le tabelle del database che verranno utilizzate in questa serie.

Poiché mantenere attivo e funzionante un server di posta è uno dei compiti essenziali solitamente assegnati agli amministratori di sistema e agli ingegneri, forniremo anche alcuni suggerimenti per eseguire in modo efficiente questo servizio critico in un ambiente di produzione.

Crea record A e MX per il dominio in DNS

Prima di procedere oltre è necessario soddisfare alcuni prerequisiti:

1. Avrai bisogno di un dominio valido registrato tramite un registrar di domini. In questa serie utilizzeremo www.linuxnewz.com, che è stato registrato tramite GoDaddy.

2. Tale dominio deve puntare all'IP esterno del tuo VPS o provider di cloud hosting. Se ospiti autonomamente il tuo server di posta, puoi utilizzare il servizio offerto da FreeDNS (richiede la registrazione).

In ogni caso, devi impostare i record A e MX anche per il tuo dominio (puoi saperne di più sui record MX in queste FAQ di Google).

Una volta aggiunti, puoi cercarli utilizzando uno strumento online come MxToolbox o ViewDNS per assicurarti che siano impostati correttamente.

Importante: tieni presente che potrebbe essere necessario del tempo (1-2 giorni) prima che i record DNS vengano propagati e il tuo dominio sia disponibile. Nel frattempo puoi accedere al tuo VPS tramite il suo indirizzo IP per eseguire le attività indicate di seguito.

3. Configura il FQDN (nome di dominio completo) del tuo VPS:

hostnamectl set-hostname yourhostname

per impostare il nome host del sistema, quindi modifica /etc/hosts come segue (sostituisci AAA.BBB.CCC.DDD, tuonomehost e tuodominio con l'IP pubblico del tuo server, il tuo nome host e il tuo dominio registrato):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       yourhostname

dove yourhostname è il nome host del sistema impostato in precedenza utilizzando il comando hostnamectl.

Installazione dei pacchetti software richiesti

4. Per installare i pacchetti software richiesti come Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, ecc., è necessario abilitare il repository EPEL:

yum install epel-release

5. Dopo aver seguito i passaggi precedenti, installa i pacchetti necessari:

Nei sistemi basati su CentOS:

yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin

In Debian e derivati:

aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php5 phpMyAdmin

6. Avvia e attiva i server Web e database:

Nei sistemi basati su CentOS:

systemctl enable httpd mariadb
systemctl start httpd mariadb

In Debian e derivati:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Quando l'installazione sarà completata e i servizi di cui sopra saranno abilitati e in esecuzione, inizieremo configurando il database e le tabelle per archiviare le informazioni sugli account di posta Postfix.

Creazione del database degli account di posta Postfix

Per semplicità, utilizzeremo phpMyAdmin, uno strumento destinato a gestire l'amministrazione dei database MySQL/MariaDB attraverso un'interfaccia web, per creare e gestire il database della posta elettronica.

Tuttavia, per accedere e utilizzare questo strumento, dobbiamo seguire questi passaggi:

7. Abilita l'account MariaDB (puoi farlo eseguendo l'utilità mysql_secure_installation dalla riga di comando, assegnando una password per l'utente root e impostando le impostazioni predefinite proposte dallo strumento TRANNE "Non consentire l'accesso root da remoto?":

o creare in altro modo un nuovo utente del database:

MariaDB [(none)]> CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

Proteggi Apache con un certificato

8. Poiché utilizzeremo un'applicazione Web per gestire il database del server di posta elettronica, dobbiamo prendere le precauzioni necessarie per proteggere le connessioni al server. Altrimenti, le nostre credenziali phpMyAdmin viaggeranno in chiaro via cavo.

Per configurare Transport Layer Security (TLS) nel tuo server, segui i passaggi delineati nella Parte 8 della serie RHCE: Implementazione di HTTPS tramite TLS utilizzando Network Security Service (NSS) per Apache prima di procedere oltre.

Nota: se non hai accesso alla console del server dovrai trovare un altro modo per generare l'entropia necessaria durante la creazione della chiave. In tal caso, potresti prendere in considerazione l'installazione di rng-tools e l'esecuzione di rngd -r /dev/urandom.

Configura e proteggi PhpMyAdmin

9. In /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) o /etc/phpmyadmin/apache. conf (Debian e derivati), individua tutte le occorrenze delle seguenti righe e assicurati che puntino all'IP pubblico del tuo server:

Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD

Inoltre, disabilita gli alias predefiniti e creane uno nuovo per accedere alla pagina di accesso di phpMyAdmin. Ciò contribuirà a proteggere il sito da bot e aggressori esterni che prendono di mira www.tuodominio.com/phpmyadmin o www.tuodominio.com/phpMyAdmin.

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin

Inoltre, aggiungi la seguente riga all'interno di :

Require all granted

Crea Apache VirtualHost per il dominio

10. Assicurati che il tuo dominio sia aggiunto ai siti abilitati. Crea /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) o /etc/apache2/sites-available/linuxnewz.com (Debian) con i seguenti contenuti (assicuratevi che DocumentRoot, sites-available e sites-enabled > le directory esistono):

<VirtualHost *:80>
    ServerName www.linuxnewz.com
    ServerAlias linuxnewz.com
    DocumentRoot /var/www/linuxnewz.com/public_html
    ErrorLog /var/www/linuxnewz.com/error.log
    CustomLog /var/www/linuxnewz.com/requests.log combined
    Options Indexes FollowSymLinks
</VirtualHost>

e il collegamento simbolico:

Su CentOS:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
Su Debian:
a2ensite linuxnewz.com

e hai finito.

Configura il database di posta elettronica Postfix

11. Ora puoi aprire la tua interfaccia phpMyAdmin su https://www.tuodominio.com/gestitob (nota che gestitob< è l'alias che abbiamo impostato in precedenza per la directory dei dati di phpMyAdmin).

Se questo non funziona (il che può essere causato da un ritardo nella propagazione o dalla mancata configurazione dei record DNS) per il momento puoi provare a utilizzare l'indirizzo IP pubblico del tuo server invece di www.tuodominio.com :

In ogni caso, dopo aver effettuato l'accesso a phpMyAdmin vedrai la seguente interfaccia. Fai clic su Nuovo nella sezione a sinistra:

Inserisci un nome per il database (EmailServer_db in questo caso, non è necessario selezionare una Collazione) e fai clic su Crea:

12. Nella schermata successiva, scegli un nome per la prima tabella (dove memorizzeremo i domini che questo server di posta gestirà.

Tieni presente che anche se in questa serie gestiremo solo un dominio (puoi aggiungerne altri in seguito) e il numero di campi che desideri in esso, quindi fai clic su Vai. Ti verrà richiesto di nominare e configurare questi due campi, dove potrai tranquillamente procedere come indicato nelle immagini seguenti:

Quando scegli PRIMARY in Index per DomainId, accetta i valori predefiniti e fai clic su Vai:

In alternativa, puoi fare clic su Anteprima SQL per vedere il codice sotto il cofano:

CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

Quando sei pronto, fai clic su Salva per confermare le modifiche. Potrai quindi fare clic su Nuovo in EmailServer_db per continuare a creare tabelle:

13. Ora segui questi passaggi per creare il resto delle tabelle. Fare clic sulla scheda SQL e inserire il codice indicato per ciascun oggetto del database.

Tieni presente che in questo caso abbiamo scelto di creare la tabella utilizzando una query SQL a causa delle relazioni che devono essere stabilite tra le diverse tabelle:

Utenti_tbl

CREATE TABLE `Users_tbl` ( 
    `UserId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(100) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`UserId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB; 

Dovresti ricevere un messaggio di conferma (in caso contrario, phpMyAdmin richiederà errori di sintassi):

Alias_tbl

CREATE TABLE `Alias_tbl` (
    `AliasId` INT NOT NULL AUTO_INCREMENT, 
    `DomainId` INT NOT NULL, 
    `Source` varchar(100) NOT NULL, 
    `Destination` varchar(100) NOT NULL, 
    PRIMARY KEY (`AliasId`), 
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

(Clicca su Vai in basso per procedere con la creazione della tabella).

Fino a questo punto, dovresti avere la seguente struttura del database:

Ciò significa che sei pronto per iniziare ad aggiungere alcuni record nella sezione successiva.

Creazione di un dominio Postfix, utenti e alias

14. Ora inseriremo i seguenti record nelle tre tabelle. Le password per [email  e [email  verranno crittografate e l'istruzione INSERT INTO Users_tbl.

Inoltre, tieni presente che le email inviate a [email  verranno reindirizzate a [email :

INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');

Dopo aver aggiunto il nostro dominio, due account utente e un alias email, siamo pronti per continuare a configurare il nostro server di posta elettronica nel prossimo articolo di questa serie, dove configureremo Dovecot e Postfix forte>.

Riepilogo

In questo articolo abbiamo elencato i pacchetti necessari per installare un server di posta Postfix in un VPS CentOS 7 e spiegato come gestire il database sottostante utilizzando phpMyAdmin.

Nei prossimi due articoli esamineremo la configurazione dei due programmi che si occuperanno della distribuzione delle email per il nostro dominio (Parte 2) e vi mostreremo come aggiungere protezione contro spam e virus (Parte 3) per il tuo server.

Fino ad allora, non esitate a contattarci utilizzando il modulo sottostante se avete domande o commenti.