Kako varno nastaviti poštni strežnik Postfix in Dovecot z bazo podatkov (MariaDB) - 1. del


V tej seriji s tremi članki bomo razpravljali o tem, kako nastaviti poštni strežnik Postfix s protivirusno zaščito in zaščito pred neželeno pošto v oknu CentOS 7. Upoštevajte, da ta navodila delujejo tudi v drugih distribucijah, kot sta RHEL/Fedora in Debian/Ubuntu.

Naš načrt vključuje shranjevanje e-poštnih računov in vzdevkov v zbirki podatkov MariaDB, ki bo zaradi naše udobnosti upravljana prek phpMyAdmin.

Če se odločite, da ne namestite phpMyAdmin ali imate opravka s strežnikom samo CLI, bomo zagotovili tudi enakovredno kodo za ustvarjanje tabel zbirke podatkov, ki bodo uporabljene v tej seriji.

Ker je vzdrževanje in delovanje poštnega strežnika ena bistvenih nalog, ki so običajno dodeljene sistemskim skrbnikom in inženirjem, bomo podali tudi nekaj nasvetov za učinkovito izvajanje te ključne storitve v proizvodnem okolju.

Ustvarite zapise A in MX za domeno v DNS

Pred nadaljevanjem je treba izpolniti nekaj pogojev:

1. Potrebovali boste veljavno domeno, registrirano prek registra domene. V tej seriji bomo uporabili www.linuxnewz.com , ki je bil registriran prek GoDaddy.

2. Takšna domena mora biti usmerjena na zunanji IP vašega ponudnika VPS ali gostovanja v oblaku. Če sami gostite svoj poštni strežnik, lahko uporabite storitev, ki jo ponuja FreeDNS (zahteva registracijo).

V vsakem primeru morate za svojo domeno nastaviti tudi zapisa A in MX (več informacij o zapisih MX lahko izveste v teh pogostih vprašanjih pri Googlu).

Ko jih dodate, jih lahko poiščete s spletnim orodjem, kot sta MxToolbox ali ViewDNS, da zagotovite pravilno nastavitev.

Pomembno: Upoštevajte, da lahko traja nekaj časa (1-2 dni), dokler se zapisi DNS ne razširijo in vaša domena ne bo na voljo. Medtem lahko do svojega VPS dostopate prek njegovega naslova IP za izvajanje spodnjih nalog.

3. Konfigurirajte FQDN (popolnoma kvalificirano ime domene) vašega VPS:

# hostnamectl set-hostname yourhostname

da nastavite sistemsko ime gostitelja, nato uredite/etc/hosts na naslednji način (zamenjajte AAA.BBB.CCC.DDD, vašeime gostitelja in vašo domeno z javnim IP-jem vašega strežnika, vašim imenom gostitelja in vašo registrirano domeno):

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

kjer je yourhostname sistemsko ime gostitelja, ki je bilo prej nastavljeno z ukazom hostnamectl.

Namestitev potrebnih programskih paketov

4. Če želite namestiti zahtevane programske pakete, kot so Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV itd., Morate omogočiti repozitorij EPEL:

# yum install epel-release

5. Ko sledite zgornjim korakom, namestite potrebne pakete:

# 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. Zaženite in omogočite spletni in strežnik baz podatkov:

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

Ko je namestitev končana in je zgornja storitev omogočena in se izvaja, bomo začeli z nastavitvijo baze podatkov in tabel za shranjevanje informacij o poštnih računih Postfix.

Ustvarjanje baze podatkov poštnih računov Postfix

Za poenostavitev bomo uporabili phpMyAdmin, orodje za upravljanje podatkovnih baz MySQL/MariaDB prek spletnega vmesnika, za ustvarjanje in upravljanje e-poštne baze podatkov.

Za prijavo in uporabo tega orodja pa moramo slediti tem korakom:

7. Omogočite račun MariaDB (to lahko storite tako, da v ukazni vrstici zaženete pripomoček mysql_secure_installation , dodelite geslo za uporabniški koren in nastavite privzete nastavitve, ki jih predlaga orodje RAZEN »Onemogoči prijavo root na daljavo ? “:

ali kako drugače ustvarite novega uporabnika baze podatkov:

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

Zavarujte Apache s certifikatom

8. Ker bomo za upravljanje baze podatkov e-poštnega strežnika uporabljali spletno aplikacijo, moramo sprejeti potrebne varnostne ukrepe za zaščito povezav s strežnikom. V nasprotnem primeru bodo naše poverilnice phpMyAdmin v navadnem besedilu potovale po žici.

Če želite v svojem strežniku nastaviti zaščito prometne plasti (TLS), sledite korakom, opisanim v 8. delu serije RHCE: Implementacija HTTPS prek TLS z uporabo Network Security Service (NSS) za Apache, preden nadaljujete.

Opomba: če nimate dostopa do strežniške konzole, boste morali med ustvarjanjem ključa poiskati drug način za ustvarjanje potrebne entropije. V tem primeru boste morda želeli namestiti rng-tools in zagnati rngd -r/dev/urandom.

Konfigurirajte in zaščitite PhpMyAdmin

9. V /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) ali /etc/phpmyadmin/apache.conf (Debian in derivati) poiščite vse pojavitve naslednjih vrstic in se prepričajte, da kažejo na javni IP vašega strežnika:

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

Poleg tega onemogočite privzete vzdevke in ustvarite novega za dostop do vaše prijavne strani phpMyAdmin. To bo pomagalo zaščititi spletno mesto pred boti in zunanjimi napadalci, ki ciljajo na www.yourdomain.com/phpmyadmin ali www.yourdomain.com/phpMyAdmin.

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

V dodajte tudi naslednjo vrstico:

Require all granted

Ustvarite Apache VirtualHost za domeno

10. Prepričajte se, da je vaša domena dodana na omogočena spletna mesta. Ustvarite /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) ali /etc/apache2/sites-available/linuxnewz.com (Debian) z naslednjo vsebino (poskrbite, da bodo DocumentRoot, spletna mesta na voljo in spletna mesta). obstajajo omogočeni imeniki):

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

in simbolična povezava:

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

in končali ste.

Nastavitev e-poštne baze podatkov Postfix

11. Zdaj lahko vmesnik phpMyAdmin odprete na https://www.yourdomain.com/managedb (upoštevajte, da je managedb vzdevek, ki smo ga prej nastavili za podatkovni imenik phpMyAdmin).

Če to ne deluje (kar lahko povzroči zamuda pri širjenju ali pomanjkanje konfiguracije zapisov DNS), lahko poskusite namesto www.yourdomain.com uporabiti javni naslov IP vašega strežnika:

V vsakem primeru boste po prijavi v phpMyAdmin videli naslednji vmesnik. V levem razdelku kliknite Novo:

Vnesite ime baze podatkov (v tem primeru EmailServer_db, ni treba izbrati primerjave) in kliknite Ustvari:

12. Na naslednjem zaslonu izberite ime za prvo tabelo (kamor bomo shranili domene, ki jih bo upravljal ta poštni strežnik.

Upoštevajte, da tudi če bomo v tej seriji upravljali samo eno domeno, lahko pozneje dodate več) in število polj, ki jih želite v njem, nato kliknite Pojdi Pozvani boste, da poimenujete in konfigurirate ti dve polji, kjer lahko varno nadaljujete, kot je navedeno na naslednjih slikah:

Ko izberete PRIMARNO pod Indeks za DomainId, sprejmite privzete vrednosti in kliknite Pojdi:

Lahko pa tudi kliknete Predogled SQL, da si ogledate kodo pod pokrovom:

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

Ko ste pripravljeni, kliknite Shrani, da potrdite spremembe. Nato boste lahko kliknili Novo pod EmailServer_db, da nadaljujete z ustvarjanjem tabel:

13. Zdaj sledite tem korakom, da ustvarite preostale tabele. Kliknite jeziček SQL in vnesite navedeno kodo za vsak objekt baze podatkov.

Upoštevajte, da smo se v tem primeru odločili za ustvarjanje tabele z uporabo poizvedbe SQL zaradi razmerij, ki jih je treba vzpostaviti med različnimi tabelami:

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; 

Morali bi dobiti potrditveno sporočilo (v nasprotnem primeru bo phpMyAdmin pozval k sintaksnim napakam):

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;

(Na dnu kliknite Pojdi, da nadaljujete z ustvarjanjem tabele).

Do te točke bi morali imeti naslednjo strukturo baze podatkov:

Kar pomeni, da ste pripravljeni začeti dodajati nekaj zapisov v naslednjem razdelku.

Ustvarjanje domene Postfix, uporabnikov in vzdevkov

14. V tri tabele bomo zdaj vstavili naslednje zapise. Gesla za [email bodo šifrirana in stavek INSERT INTO Users_tbl.

Upoštevajte tudi, da so bila e-poštna sporočila, poslana na naslov [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 ');

Potem ko smo dodali svojo domeno, dva uporabniška računa in vzdevek e-pošte, smo pripravljeni nadaljevati nastavitev našega e-poštnega strežnika v naslednjem članku te serije, kjer bomo konfigurirali Dovecot in Postfix.

Povzetek

V tem članku smo našteli pakete, potrebne za namestitev e-poštnega strežnika Postfix v CentOS 7 VPS, in razložili, kako upravljati osnovno bazo podatkov s pomočjo phpMyAdmin.

V naslednjih dveh člankih bomo pregledali konfiguracijo obeh programov, ki bosta skrbela za distribucijo e-pošte za našo domeno (2. del), in vam pokazali, kako dodati zaščito pred neželeno pošto in virusi (3. del) za svoj strežnik.

Do takrat vas prosimo, da nas kontaktirate s pomočjo spodnjega obrazca, če imate kakršna koli vprašanja ali komentarje.