Zoeken op website

Hoe u Postfix Mail Server en Dovecot met database (MariaDB) veilig kunt instellen - Deel 1


In deze serie 3 artikelen bespreken we hoe u een Postfix mailserver met antivirus- en spambescherming in een CentOS 7-box kunt opzetten. Let op: deze instructies werken ook op andere distributies zoals RHEL/Fedora en Debian/Ubuntu.

Ons plan bestaat uit het opslaan van e-mailaccounts en aliassen in een MariaDB database die voor ons gemak wordt beheerd via phpMyAdmin.

Als u ervoor kiest om phpMyAdmin niet te installeren, of als u te maken heeft met een CLI-only server, zullen we ook de equivalente code leveren om de databasetabellen te maken die in deze serie zullen worden gebruikt.

Omdat het draaiende houden van een mailserver een van de essentiële taken is die gewoonlijk worden toegewezen aan systeembeheerders en technici, geven we ook een paar tips om deze kritieke service efficiënt uit te voeren in een productieomgeving.

Maak A- en MX-records voor domein in DNS

Voordat u verder gaat, moet aan een aantal voorwaarden worden voldaan:

1. U heeft een geldig domein nodig dat is geregistreerd bij een domeinregistreerder. In deze serie gebruiken we www.linuxnewz.com, dat is geregistreerd via GoDaddy.

2. Een dergelijk domein moet verwijzen naar het externe IP-adres van uw VPS of cloudhostingprovider. Als u uw mailserver zelf host, kunt u de service van FreeDNS gebruiken (registratie vereist).

In ieder geval moet u ook A- en MX-records instellen voor uw domein (u kunt meer lezen over MX-records in deze FAQ van Google).

Eenmaal toegevoegd, kunt u ze opzoeken met een online tool zoals MxToolbox of ViewDNS om er zeker van te zijn dat ze correct zijn ingesteld.

Belangrijk: houd er rekening mee dat het enige tijd kan duren (1-2 dagen) voordat de DNS-records zijn doorgegeven en uw domein beschikbaar is. In de tussentijd kunt u via het IP-adres toegang krijgen tot uw VPS om de hieronder aangegeven taken uit te voeren.

3. Configureer de FQDN (Fully Qualified Domain Name) van uw VPS:

hostnamectl set-hostname yourhostname

om de systeemhostnaam in te stellen en vervolgens /etc/hosts als volgt te bewerken (vervang AAA.BBB.CCC.DDD, uwhostnaam en >uwdomein met het openbare IP-adres van uw server, uw hostnaam en uw geregistreerde domein):

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

waarbij uwhostnaam de systeemhostnaam is die eerder is ingesteld met de opdracht hostnamectl.

Vereiste softwarepakketten installeren

4. Om vereiste softwarepakketten zoals Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, enz. te installeren, moet u de EPEL repository inschakelen:

yum install epel-release

5. Nadat u de bovenstaande stappen heeft gevolgd, installeert u de benodigde pakketten:

In CentOS-gebaseerde systemen:

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 en derivaten:

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. Start en schakel de web- en databaseservers in:

In CentOS-gebaseerde systemen:

systemctl enable httpd mariadb
systemctl start httpd mariadb

In Debian en derivaten:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Wanneer de installatie is voltooid en de bovenstaande service is ingeschakeld en actief is, beginnen we met het instellen van de database en tabellen om informatie over Postfix-mailaccounts op te slaan.

Database met Postfix-e-mailaccounts maken

Voor de eenvoud zullen we phpMyAdmin gebruiken, een tool die bedoeld is om het beheer van MySQL/MariaDB databases af te handelen via een webinterface, om de e-maildatabase.

Om in te loggen en deze tool te gebruiken, moeten we echter deze stappen volgen:

7. Schakel het MariaDB-account in (u kunt dit doen door het hulpprogramma mysql_secure_installation uit te voeren vanaf de opdrachtregel, een wachtwoord toe te wijzen voor gebruiker root, en de standaardinstellingen instellen die door de tool worden voorgesteld BEHALVE “Rootaanmelding op afstand niet toestaan?“:

of maak op een andere manier een nieuwe databasegebruiker aan:

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

Beveilig Apache met een certificaat

8. Omdat we een webapplicatie gaan gebruiken om de database van de e-mailserver te beheren, moeten we de nodige voorzorgsmaatregelen nemen om de verbindingen met de server te beschermen. Anders zullen onze phpMyAdmin-inloggegevens in platte tekst over de draad worden verzonden.

Om Transport Layer Security (TLS) op uw server in te stellen, volgt u de stappen beschreven in Deel 8 van de RHCE-serie: HTTPS implementeren via TLS gebruik Network Security Service (NSS) voor Apache voordat u verder gaat.

Opmerking: als u geen toegang heeft tot de console van de server, zult u een andere manier moeten vinden om de noodzakelijke entropie te genereren tijdens het maken van de sleutel. In dat geval kunt u overwegen om rng-tools te installeren en rngd -r /dev/urandom uit te voeren.

Configureer en beveilig PhpMyAdmin

9. In /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) of /etc/phpmyadmin/apache. conf (Debian en derivaten), lokaliseer alle exemplaren van de volgende regels en zorg ervoor dat ze verwijzen naar het openbare IP-adres van uw server:

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

Schakel bovendien de standaardaliassen uit en maak een nieuwe aan om toegang te krijgen tot uw phpMyAdmin-inlogpagina. Dit zal helpen om de site te beveiligen tegen bots en externe aanvallers die zich richten op www.uwdomein.com/phpmyadmin of www.uwdomein.com/phpMyAdmin.

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

Voeg ook de volgende regel toe binnen :

Require all granted

Maak Apache VirtualHost voor domein

10. Zorg ervoor dat uw domein is toegevoegd aan de ingeschakelde sites. Maak /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) of /etc/apache2/sites-available/linuxnewz.com (Debian) met de volgende inhoud (zorg ervoor dat de DocumentRoot, sites-available en sites-enabled > mappen bestaan):

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

en de symbolische link:

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

en je bent klaar.

Postfix e-maildatabase instellen

11. Nu kunt u uw phpMyAdmin-interface openen op https://www.uwdomein.com/managedb (merk op dat managedb< is de alias die we eerder hebben ingesteld voor de phpMyAdmin-gegevensmap).

Als dat niet werkt (wat kan worden veroorzaakt door een vertraging in de verspreiding of een gebrek aan configuratie van DNS-records), kunt u voorlopig proberen het openbare IP-adres van uw server te gebruiken in plaats van www.uwdomein.com :

In ieder geval krijgt u na het inloggen op phpMyAdmin de volgende interface te zien. Klik op Nieuw in het linkergedeelte:

Voer een naam in voor de database (EmailServer_db in dit geval, u hoeft geen sortering te selecteren) en klik op Maken:

12. Kies in het volgende scherm een naam voor de eerste tabel (waar we de domeinen opslaan die deze mailserver zal beheren).

Houd er rekening mee dat zelfs als we in deze serie slechts één domein beheren, u er later meer kunt toevoegen) en het gewenste aantal velden erin, en klik vervolgens op Ga. U wordt gevraagd deze twee velden een naam te geven en te configureren, waarna u veilig verder kunt gaan zoals aangegeven in de volgende afbeeldingen:

Wanneer u PRIMARY kiest onder Index voor DomainId, accepteert u de standaardwaarden en klikt u op Go:

U kunt ook op SQL bekijken klikken om de code onder de motorkap te zien:

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

Wanneer u klaar bent, klikt u op Opslaan om de wijzigingen te bevestigen. Vervolgens kunt u onder EmailServer_db op Nieuw klikken om door te gaan met het maken van tabellen:

13. Volg nu deze stappen om de rest van de tabellen te maken. Klik op het tabblad SQL en voer de aangegeven code in voor elk databaseobject.

Merk op dat we er in dit geval voor hebben gekozen om de tabel te maken met behulp van een SQL-query vanwege de relaties die tussen verschillende tabellen tot stand moeten worden gebracht:

Gebruikers_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; 

U zou een bevestigingsbericht moeten krijgen (zo niet, dan zal phpMyAdmin vragen om syntaxisfouten):

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;

(Klik onderaan op Ga om door te gaan met het maken van de tabel).

Tot nu toe zou u de volgende databasestructuur moeten hebben:

Dat betekent dat u klaar bent om in de volgende sectie enkele records toe te voegen.

Een Postfix-domein, gebruikers en aliassen aanmaken

14. We zullen nu de volgende records in de drie tabellen invoegen. De wachtwoorden voor [email  en [email  worden gecodeerd en de INSERT INTO Users_tbl-instructie.

Houd er ook rekening mee dat de e-mails die naar [email  worden verzonden, worden doorgestuurd naar [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 ');

Nadat we ons domein, twee gebruikersaccounts en een e-mailalias hebben toegevoegd, zijn we klaar om door te gaan met het instellen van onze e-mailserver in het volgende artikel van deze serie, waar we Dovecot en Postfix zullen configureren. sterk>.

Samenvatting

In dit artikel hebben we de pakketten op een rij gezet die nodig zijn om een Postfix e-mailserver in een CentOS 7 VPS te installeren, en uitgelegd hoe je de onderliggende database beheert met behulp van phpMyAdmin.

In de volgende twee artikelen bespreken we de configuratie van de twee programma's die de e-maildistributie voor ons domein verzorgen (Deel 2) en laten we u zien hoe u bescherming tegen spam en virussen kunt toevoegen ( >Deel 3) voor uw server.

Neem tot die tijd gerust contact met ons op via onderstaand formulier als u vragen of opmerkingen heeft.