Sådan opsættes Postfix Mail Server og Dovecot med database (MariaDB) sikkert - Del 1


I denne serie med 3 artikler vil vi diskutere, hvordan man opretter en Postfix-mailserver med antivirus- og spambeskyttelse i en CentOS 7-boks. Bemærk, at disse instruktioner også fungerer på andre distributioner såsom RHEL/Fedora og Debian/Ubuntu.

Vores plan består i at gemme e-mail-konti og aliasser i en MariaDB-database, der er for vores bekvemmelighed, vil blive administreret via phpMyAdmin.

Hvis du vælger ikke at installere phpMyAdmin eller har at gøre med en eneste CLI-server, leverer vi også den tilsvarende kode til at oprette databasetabellerne, der vil blive brugt i hele denne serie.

Da det at holde en mailserver kørende er en af de væsentligste opgaver, der normalt tildeles systemadministratorer og ingeniører, vil vi også give et par tip til effektivt at køre denne kritiske service i et produktionsmiljø.

Opret A- og MX-poster for domæne i DNS

Før der går videre, er der et par forudsætninger, der skal være opfyldt:

1. Du skal bruge et gyldigt domæne, der er registreret via en domæneregistrator. I denne serie bruger vi www.linuxnewz.com , som blev registreret via GoDaddy.

2. Et sådant domæne skal peges på den eksterne IP fra din VPS- eller cloud-hostingudbyder. Hvis du selv er vært for din mailserver, kan du bruge den service, der tilbydes af FreeDNS (kræver registrering).

Under alle omstændigheder skal du også oprette A og MX poster til dit domæne (du kan lære mere om MX records i denne FAQ fra Google).

Når de er tilføjet, kan du slå dem op ved hjælp af et onlineværktøj som MxToolbox eller ViewDNS for at sikre, at de er korrekt konfigureret.

Vigtigt: Vær opmærksom på, at det kan tage et stykke tid (1-2 dage), indtil DNS-posterne formeres, og dit domæne er tilgængeligt. I mellemtiden kan du få adgang til din VPS gennem dens IP-adresse for at udføre de opgaver, der er angivet nedenfor.

3. Konfigurer FQDN (fuldt kvalificeret domænenavn) på din VPS:

# hostnamectl set-hostname yourhostname

for at indstille systemværtsnavnet, rediger/etc/hosts således (udskift AAA.BBB.CCC.DDD, dit værtsnavn og dit domæne med den offentlige IP på din server, dit værtsnavn og dit registrerede domæne):

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

hvor dit værtsnavn er systemværtsnavnet, der tidligere blev indstillet ved hjælp af kommandoen hostnamectl.

Installation af nødvendige softwarepakker

4. For at installere nødvendige softwarepakker som Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV osv. Skal du aktivere EPEL-arkivet:

# yum install epel-release

5. Når du har fulgt ovenstående trin, skal du installere de nødvendige pakker:

# 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
# 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 og aktiver web- og databaseservere:

# systemctl enable httpd mariadb
# systemctl start httpd mariadb
# systemctl enable apache2 mariadb
# systemctl start apache2 mariadb

Når installationen er afsluttet, og ovenstående service er aktiveret og kører, starter vi med at opsætte databasen og tabellerne til at gemme oplysninger om Postfix-mailkonti.

Oprettelse af Postfix Mail Accounts Database

For enkelheds skyld bruger vi phpMyAdmin, et værktøj beregnet til at håndtere administrationen af MySQL/MariaDB-databaser via en webgrænseflade til at oprette og administrere e-mail-databasen.

For at logge på og bruge dette værktøj skal vi dog følge disse trin:

7. Aktiver MariaDB-kontoen (du kan gøre dette ved at køre mysql_secure_installation fra kommandolinjen, tildele en adgangskode til brugerrod og indstille standardindstillingerne, der er foreslået af værktøjet UNDTAGEN "Tillad ikke rodlogin eksternt ? “:

eller på anden måde oprette en ny databasebruger:

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

Sikre Apache med et certifikat

8. Da vi bruger et webapplikation til at administrere e-mail-serverdatabasen, er vi nødt til at tage de nødvendige forholdsregler for at beskytte forbindelser til serveren. Ellers vil vores phpMyAdmin-legitimationsoplysninger rejse i almindelig tekst over ledningen.

For at konfigurere TLS (Transport Layer Security) på din server skal du følge trinnene beskrevet i del 8 i RHCE-serien: Implementering af HTTPS gennem TLS ved hjælp af Network Security Service (NSS) til Apache, inden du fortsætter videre.

Bemærk: Hvis du ikke har adgang til serverens konsol, bliver du nødt til at finde en anden måde at generere den nødvendige entropi under oprettelsen af nøglen. I så fald kan du overveje at installere rng-værktøjer og køre rngd -r/dev/urandom.

Konfigurer og sikr PhpMyAdmin

9. Find i /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) eller /etc/phpmyadmin/apache.conf (Debian og derivater) alle forekomster af følgende linjer og sørg for at de peger på den offentlige IP på din server:

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

Desuden skal du deaktivere standardaliaserne og oprette en ny for at få adgang til din phpMyAdmin login-side. Dette hjælper med at sikre webstedet mod bots og eksterne angribere, der er målrettet mod www.yourdomain.com/phpmyadmin eller www.yourdomain.com/phpMyAdmin.

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

Tilføj også følgende linje inden for :

Require all granted

Opret Apache VirtualHost til domæne

10. Sørg for, at dit domæne føjes til de aktiverede websteder. Opret /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) eller /etc/apache2/sites-available/linuxnewz.com (Debian) med følgende indhold (sørg for at DocumentRoot, websteder er tilgængelige og websteder -aktiverede mapper findes):

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

og det symbolske led:

# ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
# a2ensite linuxnewz.com

og du er færdig.

Opsæt Postfix e-mail-database

11. Nu kan du åbne din phpMyAdmin-grænseflade på https://www.yourdomain.com/managedb (bemærk, at managedb er det alias, vi oprettede tidligere til phpMyAdmin-datakataloget).

Hvis det ikke fungerer (hvilket kan være forårsaget af en forsinkelse i udbredelsen eller manglen på konfiguration af DNS-poster) kan du foreløbig prøve at bruge din servers offentlige IP-adresse i stedet for www.yourdomain.com:

Under alle omstændigheder, efter at du har logget på phpMyAdmin, vil du se følgende grænseflade. Klik på Ny i venstre sektion:

Indtast et navn til databasen (EmailServer_db i dette tilfælde, ingen grund til at vælge en sortering), og klik på Opret:

12. På det næste skærmbillede skal du vælge et navn til den første tabel (hvor vi gemmer de domæner, denne mailserver administrerer.

Bemærk, at selv når vi i denne serie kun administrerer et domæne, kan du tilføje flere senere) og antallet af felter, du vil have i det, skal du klikke på Gå. Du bliver bedt om at navngive og konfigurere disse to felter, hvor du sikkert kan fortsætte som angivet i de følgende billeder:

Når du vælger PRIMÆR under Indeks for DomainId, skal du acceptere standardværdierne og klikke på Gå:

Alternativt kan du klikke på Preview SQL for at se koden under emhætten:

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

Når du er klar, skal du klikke på Gem for at bekræfte ændringer. Du kan derefter klikke på Ny under EmailServer_db for at fortsætte med at oprette tabeller:

13. Følg nu disse trin for at oprette resten af tabellerne. Klik på fanen SQL, og indtast den angivne kode for hvert databaseobjekt.

Bemærk, at i dette tilfælde valgte vi at oprette tabellen ved hjælp af en SQL-forespørgsel på grund af de forhold, der skal etableres mellem forskellige tabeller:

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; 

Du skal få en bekræftelsesmeddelelse (hvis ikke, beder phpMyAdmin om syntaksfejl):

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 på Gå nederst for at fortsætte med oprettelsen af tabellen).

Indtil dette punkt skal du have følgende databasestruktur:

Hvilket betyder, at du er klar til at begynde at tilføje nogle poster i det næste afsnit.

Oprettelse af et Postfix-domæne, brugere og aliaser

14. Vi indsætter nu følgende poster i de tre tabeller. Adgangskoderne til [e-mail-beskyttet] krypteres og INSERT INTO Users_tbl-sætningen.

Bemærk også, at e-mails sendt til [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 ');

Efter at have tilføjet vores domæne, to brugerkonti og et e-mail-alias er vi klar til at fortsætte med at opsætte vores e-mail-server i den næste artikel i denne serie, hvor vi konfigurerer Dovecot og Postfix.

Resumé

I denne artikel har vi listet de pakker, der kræves for at installere en Postfix-e-mail-server i en CentOS 7 VPS, og forklaret, hvordan man styrer den underliggende database ved hjælp af phpMyAdmin.

I de næste to artikler gennemgår vi konfigurationen af de to programmer, der tager sig af e-mail-distributionen for vores domæne (del 2) og viser dig, hvordan du tilføjer beskyttelse mod spam og vira (del 3) til din server.

Indtil da er du velkommen til at kontakte os ved hjælp af nedenstående formular, hvis du har spørgsmål eller kommentarer.