Hvordan sette opp Postfix Mail Server og Dovecot med database (MariaDB) sikkert - del 1


I denne 3-artikkel-serien vil vi diskutere hvordan du setter opp en Postfix-e-postserver med antivirus- og spambeskyttelse i en CentOS 7-boks. Vær oppmerksom på at disse instruksjonene også fungerer på andre distribusjoner som RHEL/Fedora og Debian/Ubuntu.

Planen vår består i å lagre e-postkontoer og aliaser i en MariaDB-database som for enkelhets skyld vil bli administrert gjennom phpMyAdmin.

Hvis du velger å ikke installere phpMyAdmin, eller har å gjøre med en CLI-server, vil vi også gi den tilsvarende koden for å lage databasetabellene som vil bli brukt gjennom denne serien.

Siden det å holde en e-postserver i gang er en av de viktigste oppgavene som vanligvis tildeles systemadministratorer og ingeniører, vil vi også gi noen tips for å effektivt kjøre denne kritiske tjenesten i et produksjonsmiljø.

Opprett A- og MX-poster for domene i DNS

Før du går videre, er det noen forutsetninger som må oppfylles:

1. Du trenger et gyldig domene registrert gjennom en domeneregistrator. I denne serien vil vi bruke www.linuxnewz.com, som ble registrert gjennom GoDaddy.

2. Slikt domene må pekes til den eksterne IP-en til din VPS- eller skyvertsleverandør. Hvis du selv hoster e-postserveren din, kan du bruke tjenesten som tilbys av FreeDNS (krever registrering).

Uansett må du sette opp A- og MX-poster for domenet ditt også (du kan lære mer om MX-poster i disse vanlige spørsmålene fra Google).

Når de er lagt til, kan du slå dem opp ved hjelp av et nettbasert verktøy som MxToolbox eller ViewDNS for å sikre at de er riktig konfigurert.

Viktig: Vær oppmerksom på at det kan ta en stund (1–2 dager) før DNS-postene er spredt og domenet ditt er tilgjengelig. I mellomtiden kan du få tilgang til VPS-en din via IP-adressen for å utføre oppgavene som er angitt nedenfor.

3. Konfigurer FQDN (Fully Qualified Domain Name) til VPS-en:

hostnamectl set-hostname yourhostname

for å angi systemvertsnavnet, rediger deretter /etc/hosts som følger (erstatt AAA.BBB.CCC.DDD, ditt vertsnavn og >dittdomene med den offentlige IP-en til serveren din, vertsnavnet ditt og ditt registrerte domene):

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

der ditt vertsnavn er systemvertsnavnet som ble angitt tidligere med kommandoen hostnamectl.

Installere nødvendige programvarepakker

4. For å installere nødvendige programvarepakker som Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV osv., må du aktivere EPEL-depotet:

yum install epel-release

5. Når du har fulgt trinnene ovenfor, installer de nødvendige pakkene:

I CentOS-baserte systemer:

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

I Debian og derivater:

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:

I CentOS-baserte systemer:

systemctl enable httpd mariadb
systemctl start httpd mariadb

I Debian og derivater:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Når installasjonen er fullført og tjenesten ovenfor er aktivert og kjører, starter vi med å sette opp databasen og tabellene for å lagre informasjon om Postfix-postkontoer.

Opprette Postfix Mail Accounts Database

For enkelhets skyld bruker vi phpMyAdmin, et verktøy beregnet på å håndtere administrasjonen av MySQL/MariaDB-databaser gjennom et nettgrensesnitt, for å opprette og administrere e-postdatabasen.

Men for å logge på og bruke dette verktøyet, må vi følge disse trinnene:

7. Aktiver MariaDB-kontoen (du kan gjøre dette ved å kjøre mysql_secure_installation-verktøyet fra kommandolinjen, tilordne et passord for brukerrot, og angi standardinnstillingene foreslått av verktøyet UNNTATT «Tillat rotpålogging eksternt?“:

eller på annen måte opprette en ny databasebruker:

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 sertifikat

8. Siden vi skal bruke en nettapplikasjon til å administrere e-postserverdatabasen, må vi ta de nødvendige forholdsregler for å beskytte tilkoblinger til serveren. Ellers vil vår phpMyAdmin-legitimasjon gå i ren tekst over ledningen.

For å konfigurere Transport Layer Security (TLS) på serveren din, følg trinnene som er skissert i Del 8 av RHCE-serien: Implementering av HTTPS gjennom TLS bruker Network Security Service (NSS) for Apache før du fortsetter.

Merk: Hvis du ikke har tilgang til serverens konsoll, må du finne en annen måte å generere den nødvendige entropien under nøkkelopprettingen. I så fall kan det være lurt å vurdere å installere rng-tools og kjøre rngd -r /dev/urandom.

Konfigurer og sikre PhpMyAdmin

9. I /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) eller /etc/phpmyadmin/apache. conf (Debian og derivater), finn alle forekomstene av følgende linjer og sørg for at de peker til den offentlige IP-en til serveren din:

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

I tillegg kan du deaktivere standardaliasene og opprette en ny for å få tilgang til phpMyAdmin-påloggingssiden. Dette vil bidra til å sikre nettstedet mot roboter og eksterne angripere som retter seg mot www.yourdomain.com/phpmyadmin eller www.yourdomain.com/phpMyAdmin.

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

Legg også til følgende linje i :

Require all granted

Opprett Apache VirtualHost for domene

10. Sørg for at domenet ditt er lagt til de aktiverte nettstedene. Opprett /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) eller /etc/apache2/sites-available/linuxnewz.com (Debian) med følgende innhold (sørg for at DocumentRoot, sites-available og sites-enabled > kataloger finnes):

<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 den symbolske lenken:

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

og du er ferdig.

Sett opp Postfix e-postdatabase

11. Nå kan du åpne phpMyAdmin-grensesnittet på https://www.yourdomain.com/managedb (merk at managedb< er aliaset som vi satte opp tidligere for phpMyAdmin-datakatalogen).

Hvis det ikke fungerer (som kan være forårsaket av en forsinkelse i utbredelsen eller mangel på konfigurasjon av DNS-poster) foreløpig kan du prøve å bruke serverens offentlige IP-adresse i stedet for www.dittdomene.com :

Uansett, etter at du har logget på phpMyAdmin vil du se følgende grensesnitt. Klikk Ny i den venstre delen:

Skriv inn et navn for databasen (EmailServer_db i dette tilfellet, du trenger ikke velge en sortering) og klikk på Opprett:

12. På neste skjermbilde velger du et navn for den første tabellen (der vi vil lagre domenene denne e-postserveren vil administrere.

Vær oppmerksom på at selv når vi i denne serien bare vil administrere ett domene, kan du legge til flere senere) og antall felt du vil ha i det, og klikk deretter Go. Du vil bli bedt om å navngi og konfigurere disse to feltene, hvor du trygt kan fortsette som angitt i følgende bilder:

Når du velger PRIMÆR under Indeks for DomainId, godtar du standardverdiene og klikker Go:

Alternativt kan du klikke på Forhåndsvis SQL for å se koden under panseret:

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, klikker du på Lagre for å bekrefte endringene. Du vil da kunne klikke Ny under EmailServer_db for å fortsette å lage tabeller:

13. Følg nå disse trinnene for å lage resten av tabellene. Klikk på SQL-fanen og skriv inn den angitte koden for hvert databaseobjekt.

Merk at i dette tilfellet valgte vi å lage tabellen ved hjelp av en SQL-spørring på grunn av relasjonene som må etableres mellom forskjellige tabeller:

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

Du bør få en bekreftelsesmelding (hvis ikke, vil phpMyAdmin be om syntaksfeil):

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;

(Klikk Go nederst for å fortsette med opprettelsen av tabellen).

Frem til dette punktet bør du ha følgende databasestruktur:

Noe som betyr at du er klar til å begynne å legge til noen poster i neste seksjon.

Opprette et Postfix-domene, brukere og aliaser

14. Vi vil nå sette inn følgende poster i de tre tabellene. Passordene for [email  og [email  blir kryptert og INSERT INTO Users_tbl-setningen.

Vær også oppmerksom på at e-postene som sendes til [email  vil bli omdirigert 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 ');

Etter å ha lagt til domenet vårt, to brukerkontoer og et e-postalias, er vi klare til å fortsette å sette opp e-postserveren vår i neste artikkel i denne serien, der vi konfigurerer Dovecot og Postfix sterk>.

Sammendrag

I denne artikkelen har vi listet opp pakkene som kreves for å installere en Postfix e-postserver i en CentOS 7 VPS, og forklart hvordan du administrerer den underliggende databasen ved hjelp av phpMyAdmin.

I de neste to artiklene vil vi gå gjennom konfigurasjonen av de to programmene som vil ta seg av e-postdistribusjonen for domenet vårt (Del 2) og vise deg hvordan du legger til beskyttelse mot spam og virus ( >Del 3) for serveren din.

Inntil da, kontakt oss gjerne ved å bruke skjemaet nedenfor hvis du har spørsmål eller kommentarer.