Vyhledávání na webu

Jak bezpečně nastavit poštovní server Postfix a Dovecot s databází (MariaDB) - část 1


V této sérii 3 článků probereme, jak nastavit poštovní server Postfix s antivirovou ochranou a ochranou proti spamu v krabici CentOS 7. Upozorňujeme, že tyto pokyny fungují také na jiných distribucích, jako je RHEL/Fedora a Debian/Ubuntu.

Náš plán spočívá v ukládání e-mailových účtů a aliasů v databázi MariaDB, která bude pro naše pohodlí spravována pomocí phpMyAdmin.

Pokud se rozhodnete neinstalovat phpMyAdmin nebo jednáte se serverem pouze s rozhraním CLI, poskytneme také ekvivalentní kód pro vytvoření databázových tabulek, které budou použity v celé této sérii.

Vzhledem k tomu, že udržování a provozu poštovního serveru je jedním ze základních úkolů, které jsou obvykle přiděleny správcům systému a inženýrům, poskytneme také několik tipů, jak efektivně provozovat tuto kritickou službu v produkčním prostředí.

Vytvořte záznamy A a MX pro doménu v DNS

Než budete pokračovat, je třeba splnit několik předpokladů:

1. Budete potřebovat platnou doménu registrovanou prostřednictvím registrátora domén. V této sérii budeme používat www.linuxnewz.com, který byl zaregistrován prostřednictvím GoDaddy.

2. Taková doména musí odkazovat na externí IP vašeho poskytovatele VPS nebo cloud hostingu. Pokud vlastníte svůj poštovní server, můžete využít službu nabízenou FreeDNS (vyžaduje registraci).

V každém případě musíte pro svou doménu nastavit také záznamy A a MX (více o záznamech MX se můžete dozvědět v tomto FAQ od společnosti Google).

Po přidání je můžete vyhledat pomocí online nástroje, jako je MxToolbox nebo ViewDNS, abyste se ujistili, že jsou správně nastaveny.

Důležité: Upozorňujeme, že může chvíli trvat (1–2 dny), než se záznamy DNS rozšíří a vaše doména bude dostupná. Mezitím můžete přistupovat ke svému VPS prostřednictvím jeho IP adresy a provádět níže uvedené úkoly.

3. Nakonfigurujte FQDN (Plně kvalifikovaný název domény) vašeho VPS:

hostnamectl set-hostname yourhostname

nastavte název hostitele systému a poté upravte /etc/hosts následovně (nahraďte AAA.BBB.CCC.DDD, název vašeho hostitele a vaše doména s veřejnou IP adresou vašeho serveru, vaším hostitelským názvem a registrovanou doménou):

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

kde název_vašeho_hostitele je název hostitele systému, který byl dříve nastaven pomocí příkazu hostnamectl.

Instalace požadovaných softwarových balíčků

4. Chcete-li nainstalovat požadované softwarové balíčky, jako je Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV atd., musíte povolit úložiště EPEL:

yum install epel-release

5. Po provedení výše uvedených kroků nainstalujte potřebné balíčky:

V systémech založených na 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

V Debianu a odvozeninách:

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. Spusťte a povolte webový a databázový server:

V systémech založených na CentOS:

systemctl enable httpd mariadb
systemctl start httpd mariadb

V Debianu a odvozeninách:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Když je instalace dokončena a výše uvedená služba je povolena a spuštěna, začneme nastavením databáze a tabulek pro ukládání informací o poštovních účtech Postfixu.

Vytváření databáze poštovních účtů Postfix

Pro jednoduchost použijeme k vytváření a správě phpMyAdmin, nástroj určený pro správu databází MySQL/MariaDB prostřednictvím webového rozhraní. e-mailovou databázi.

Abychom se však mohli přihlásit a používat tento nástroj, musíme provést následující kroky:

7. Povolte účet MariaDB (můžete to provést spuštěním nástroje mysql_secure_installation z příkazového řádku, přiřazením hesla pro uživatele root a nastavení výchozího nastavení navrženého nástrojem KROMĚ „Zakázat vzdálené přihlášení root?“:

nebo jinak vytvořte nového uživatele databáze:

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

Zabezpečte Apache pomocí certifikátu

8. Protože ke správě databáze e-mailového serveru budeme používat webovou aplikaci, musíme přijmout nezbytná opatření k ochraně připojení k serveru. V opačném případě budou naše přihlašovací údaje phpMyAdmin cestovat v prostém textu po drátě.

Chcete-li na svém serveru nastavit Transport Layer Security (TLS), postupujte podle kroků uvedených v Části 8 série RHCE: Implementace HTTPS prostřednictvím TLS pomocí Network Security Service (NSS) pro Apache, než budete pokračovat dále.

Poznámka: Pokud nemáte přístup ke konzole serveru, budete muset najít jiný způsob, jak během vytváření klíče generovat potřebnou entropii. V takovém případě můžete zvážit instalaci rng-tools a spuštění rngd -r /dev/urandom.

Nakonfigurujte a zabezpečte PhpMyAdmin

9. V /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) nebo /etc/phpmyadmin/apache. conf (Debian a odvozeniny), vyhledejte všechny výskyty následujících řádků a ujistěte se, že ukazují na veřejnou IP vašeho serveru:

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

Navíc deaktivujte výchozí aliasy a vytvořte nový, abyste získali přístup k přihlašovací stránce phpMyAdmin. Pomůže to zabezpečit web před roboty a externími útočníky, kteří cílí na www.yourdomain.com/phpmyadmin nebo www.yourdomain.com/phpMyAdmin.

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

Přidejte také následující řádek do :

Require all granted

Vytvořte Apache VirtualHost pro doménu

10. Ujistěte se, že je vaše doména přidána k povoleným webům. Vytvořte /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) nebo /etc/apache2/sites-available/linuxnewz.com (Debian) s následujícím obsahem (ujistěte se, že DocumentRoot, sites-available a sites-enabled > adresáře existují):

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

a symbolický odkaz:

Na CentOS:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
V Debianu:
a2ensite linuxnewz.com

a máte hotovo.

Nastavení e-mailové databáze Postfix

11. Nyní můžete otevřít své rozhraní phpMyAdmin na adrese https://www.yourdomain.com/managedb (všimněte si, že managedb< je alias, který jsme dříve nastavili pro datový adresář phpMyAdmin).

Pokud to prozatím nefunguje (což může být způsobeno zpožděním šíření nebo nedostatečnou konfigurací DNS záznamů), můžete zkusit použít veřejnou IP adresu vašeho serveru namísto www.yourdomain.com :

V každém případě po přihlášení do phpMyAdmin uvidíte následující rozhraní. Klikněte na Nový v levé části:

Zadejte název databáze (v tomto případě EmailServer_db, není třeba vybírat řazení) a klikněte na Vytvořit:

12. Na další obrazovce vyberte název pro první tabulku (kde budeme ukládat domény, které bude tento poštovní server spravovat.

Vezměte prosím na vědomí, že i když v této sérii budeme spravovat pouze jednu doménu, můžete později přidat další) a požadovaný počet polí a poté klikněte na Přejít. Budete vyzváni k pojmenování a konfiguraci těchto dvou polí, kde můžete bezpečně pokračovat, jak je znázorněno na následujících obrázcích:

Když v části Index pro DomainId vyberete možnost PRIMARY, přijměte výchozí hodnoty a klikněte na tlačítko Přejít:

Případně můžete kliknout na Náhled SQL a zobrazit kód pod kapotou:

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

Až budete připraveni, kliknutím na Uložit potvrďte změny. Poté budete moci kliknout na Nový pod EmailServer_db a pokračovat ve vytváření tabulek:

13. Nyní podle následujících kroků vytvořte zbytek tabulek. Klikněte na záložku SQL a zadejte uvedený kód pro každý databázový objekt.

Všimněte si, že v tomto případě jsme se rozhodli vytvořit tabulku pomocí SQL dotazu kvůli vztahům, které musí být vytvořeny mezi různými tabulkami:

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; 

Měli byste obdržet potvrzovací zprávu (pokud ne, phpMyAdmin vás vyzve k chybám syntaxe):

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;

(Chcete-li pokračovat ve vytváření tabulky, klikněte na Přejít dole).

Do této chvíle byste měli mít následující strukturu databáze:

To znamená, že jste připraveni začít přidávat záznamy v další části.

Vytvoření Postfixové domény, uživatelů a aliasů

14. Nyní vložíme do tří tabulek následující záznamy. Hesla pro [email  a [email  budou zašifrována a příkaz INSERT INTO Users_tbl.

Upozorňujeme také, že e-maily odeslané na adresu [email  budou přesměrovány na adresu [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 ');

Po přidání naší domény, dvou uživatelských účtů a e-mailového aliasu jsme připraveni pokračovat v nastavení našeho e-mailového serveru v dalším článku této série, kde nakonfigurujeme Dovecot a Postfix.

souhrn

V tomto článku jsme uvedli seznam balíčků potřebných k instalaci e-mailového serveru Postfix do CentOS 7 VPS a vysvětlili jsme, jak spravovat základní databázi pomocí phpMyAdmin.

V dalších dvou článcích si projdeme konfiguraci dvou programů, které se postarají o rozesílání e-mailů pro naši doménu (2. část) a ukážeme si, jak přidat ochranu proti spamu a virům (Část 3) pro váš server.

Do té doby nás neváhejte kontaktovat pomocí níže uvedeného formuláře, pokud máte nějaké dotazy nebo připomínky.