Website-Suche

So richten Sie Postfix Mail Server und Dovecot mit Datenbank (MariaDB) sicher ein – Teil 1


In dieser 3-Artikel-Serie besprechen wir, wie man einen Postfix-Mailserver mit Antiviren- und Spam-Schutz in einer CentOS 7-Box einrichtet. Bitte beachten Sie, dass diese Anleitung auch auf anderen Distributionen wie RHEL/Fedora und Debian/Ubuntu funktioniert.

Unser Plan besteht darin, E-Mail-Konten und Aliase in einer MariaDB-Datenbank zu speichern, die zu unserer Bequemlichkeit über phpMyAdmin verwaltet wird.

Wenn Sie phpMyAdmin nicht installieren möchten oder es mit einem reinen CLI-Server zu tun haben, stellen wir auch den entsprechenden Code zum Erstellen der Datenbanktabellen zur Verfügung, die in dieser Serie verwendet werden.

Da die Aufrechterhaltung und Funktionsfähigkeit eines Mailservers eine der wesentlichen Aufgaben ist, die normalerweise Systemadministratoren und Technikern übertragen werden, geben wir auch ein paar Tipps für die effiziente Ausführung dieses wichtigen Dienstes in einer Produktionsumgebung.

Erstellen Sie A- und MX-Einträge für die Domäne im DNS

Bevor Sie fortfahren, müssen einige Voraussetzungen erfüllt sein:

1. Sie benötigen eine gültige Domain, die bei einem Domain-Registrar registriert wurde. In dieser Serie verwenden wir www.linuxnewz.com, das über GoDaddy registriert wurde.

2. Eine solche Domain muss auf die externe IP Ihres VPS oder Cloud-Hosting-Anbieters verweisen. Wenn Sie Ihren Mailserver selbst hosten, können Sie den von FreeDNS angebotenen Dienst nutzen (Registrierung erforderlich).

In jedem Fall müssen Sie auch A- und MX-Einträge für Ihre Domain einrichten (weitere Informationen zu MX-Einträgen finden Sie in dieser FAQ von Google).

Nach dem Hinzufügen können Sie sie mit einem Online-Tool wie MxToolbox oder ViewDNS nachschlagen, um sicherzustellen, dass sie ordnungsgemäß eingerichtet sind.

Wichtig: Bitte beachten Sie, dass es eine Weile dauern kann (1-2 Tage), bis die DNS-Einträge verbreitet werden und Ihre Domain verfügbar ist. In der Zwischenzeit können Sie über seine IP-Adresse auf Ihren VPS zugreifen, um die unten aufgeführten Aufgaben auszuführen.

3. Konfigurieren Sie den FQDN (Fully Qualified Domain Name) Ihres VPS:

hostnamectl set-hostname yourhostname

Um den System-Hostnamen festzulegen, bearbeiten Sie dann /etc/hosts wie folgt (ersetzen Sie AAA.BBB.CCC.DDD, IhrHostname und yourdomain mit der öffentlichen IP Ihres Servers, Ihrem Hostnamen und Ihrer registrierten Domain):

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

Dabei ist IhrHostname der System-Hostname, der zuvor mit dem Befehl hostnamectl festgelegt wurde.

Erforderliche Softwarepakete installieren

4. Um erforderliche Softwarepakete wie Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV usw. zu installieren, müssen Sie das EPEL-Repository aktivieren:

yum install epel-release

5. Nachdem Sie die oben genannten Schritte ausgeführt haben, installieren Sie die erforderlichen Pakete:

In CentOS-basierten 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 und 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. Starten und aktivieren Sie die Web- und Datenbankserver:

In CentOS-basierten Systemen:

systemctl enable httpd mariadb
systemctl start httpd mariadb

In Debian und Derivaten:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Wenn die Installation abgeschlossen ist und die oben genannten Dienste aktiviert sind und ausgeführt werden, beginnen wir mit der Einrichtung der Datenbank und Tabellen zum Speichern von Informationen über Postfix-Mail-Konten.

Erstellen einer Postfix-Mail-Kontendatenbank

Der Einfachheit halber verwenden wir phpMyAdmin, ein Tool, das die Verwaltung von MySQL-/ MariaDB-Datenbanken über eine Weboberfläche übernehmen, erstellen und verwalten soll die E-Mail-Datenbank.

Um sich jedoch bei diesem Tool anzumelden und es zu verwenden, müssen wir die folgenden Schritte ausführen:

7. Aktivieren Sie das MariaDB-Konto (Sie können dies tun, indem Sie das Dienstprogramm mysql_secure_installation über die Befehlszeile ausführen, dem Benutzer root ein Kennwort zuweisen und Festlegen der vom Tool vorgeschlagenen Standardeinstellungen AUSSER „Root-Anmeldung aus der Ferne verbieten?“:

oder erstellen Sie andernfalls einen neuen Datenbankbenutzer:

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

Sichern Sie Apache mit einem Zertifikat

8. Da wir eine Webanwendung zur Verwaltung der E-Mail-Serverdatenbank verwenden, müssen wir die notwendigen Vorkehrungen treffen, um die Verbindungen zum Server zu schützen. Andernfalls werden unsere phpMyAdmin-Anmeldeinformationen im Klartext über die Leitung übertragen.

Um Transport Layer Security (TLS) auf Ihrem Server einzurichten, befolgen Sie die Schritte in Teil 8 der RHCE-Serie: Implementierung von HTTPS über TLS Verwenden Sie den Network Security Service (NSS) für Apache, bevor Sie fortfahren.

Hinweis: Wenn Sie keinen Zugriff auf die Konsole des Servers haben, müssen Sie einen anderen Weg finden, um die erforderliche Entropie während der Schlüsselerstellung zu erzeugen. In diesem Fall sollten Sie erwägen, rng-tools zu installieren und rngd -r /dev/urandom auszuführen.

Konfigurieren und sichern Sie PHPMyAdmin

9. In /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) oder /etc/phpmyadmin/apache. conf (Debian und Derivate), suchen Sie alle Vorkommen der folgenden Zeilen und stellen Sie sicher, dass sie auf die öffentliche IP Ihres Servers verweisen:

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

Deaktivieren Sie außerdem die Standardaliasnamen und erstellen Sie einen neuen, um auf Ihre phpMyAdmin-Anmeldeseite zuzugreifen. Dies trägt dazu bei, die Website vor Bots und externen Angreifern zu schützen, die auf www.yourdomain.com/phpmyadmin oder www.yourdomain.com/phpMyAdmin abzielen.

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

Fügen Sie außerdem die folgende Zeile in hinzu:

Require all granted

Erstellen Sie Apache VirtualHost für die Domäne

10. Stellen Sie sicher, dass Ihre Domain zu den aktivierten Websites hinzugefügt wird. Erstellen Sie /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) oder /etc/apache2/sites-available/linuxnewz.com (Debian) mit den folgenden Inhalten (stellen Sie sicher, dass DocumentRoot, sites-available und sites-enabled sind > Verzeichnisse vorhanden):

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

und der symbolische Link:

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

und du bist fertig.

Richten Sie die Postfix-E-Mail-Datenbank ein

11. Jetzt können Sie Ihre phpMyAdmin-Schnittstelle unter https://www.yourdomain.com/managedb öffnen (beachten Sie, dass managedb< ist der Alias, den wir zuvor für das phpMyAdmin-Datenverzeichnis eingerichtet haben.

Wenn dies nicht funktioniert (was durch eine Verzögerung bei der Weitergabe oder fehlende Konfiguration von DNS-Einträgen verursacht werden kann), können Sie vorerst versuchen, die öffentliche IP-Adresse Ihres Servers anstelle von www.yourdomain.com zu verwenden >:

In jedem Fall sehen Sie nach der Anmeldung bei phpMyAdmin die folgende Oberfläche. Klicken Sie im linken Bereich auf Neu:

Geben Sie einen Namen für die Datenbank ein (in diesem Fall EmailServer_db, Sie müssen keine Sortierung auswählen) und klicken Sie auf Erstellen:

12. Wählen Sie im nächsten Bildschirm einen Namen für die erste Tabelle (wo wir die Domänen speichern, die dieser Mailserver verwaltet).

Bitte beachten Sie, dass wir in dieser Serie nur eine Domain verwalten, Sie aber später weitere hinzufügen können) und die Anzahl der gewünschten Felder festlegen. Klicken Sie dann auf Los. Sie werden aufgefordert, diese beiden Felder zu benennen und zu konfigurieren, wo Sie sicher wie in den folgenden Bildern dargestellt fortfahren können:

Wenn Sie PRIMARY unter Index für DomainId auswählen, akzeptieren Sie die Standardwerte und klicken Sie auf Los:

Alternativ können Sie auf SQL-Vorschau klicken, um den Code unter der Haube anzuzeigen:

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

Wenn Sie fertig sind, klicken Sie auf Speichern, um die Änderungen zu bestätigen. Sie können dann unter EmailServer_db auf Neu klicken, um mit der Tabellenerstellung fortzufahren:

13. Befolgen Sie nun diese Schritte, um die restlichen Tabellen zu erstellen. Klicken Sie auf die Registerkarte SQL und geben Sie für jedes Datenbankobjekt den angegebenen Code ein.

Beachten Sie, dass wir uns in diesem Fall aufgrund der Beziehungen, die zwischen verschiedenen Tabellen hergestellt werden müssen, dafür entschieden haben, die Tabelle mithilfe einer SQL-Abfrage zu erstellen:

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; 

Sie sollten eine Bestätigungsmeldung erhalten (andernfalls wird phpMyAdmin nach Syntaxfehlern fragen):

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;

(Klicken Sie unten auf Los, um mit der Erstellung der Tabelle fortzufahren.)

Bis zu diesem Punkt sollten Sie über die folgende Datenbankstruktur verfügen:

Das bedeutet, dass Sie im nächsten Abschnitt mit dem Hinzufügen einiger Datensätze beginnen können.

Erstellen einer Postfix-Domäne, Benutzer und Aliase

14. Wir werden nun die folgenden Datensätze in die drei Tabellen einfügen. Die Passwörter für [email  und [email  werden verschlüsselt und die INSERT INTO Users_tbl-Anweisung wird verwendet.

Bitte beachten Sie außerdem, dass die an [email  gesendeten E-Mails an [email  weitergeleitet werden:

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 ');

Nachdem wir unsere Domain, zwei Benutzerkonten und einen E-Mail-Alias hinzugefügt haben, können wir mit der Einrichtung unseres E-Mail-Servers im nächsten Artikel dieser Serie fortfahren, in dem wir Dovecot und Postfix konfigurieren..

Zusammenfassung

In diesem Artikel haben wir die Pakete aufgelistet, die für die Installation eines Postfix-E-Mail-Servers in einem CentOS 7 VPS erforderlich sind, und erklärt, wie Sie die zugrunde liegende Datenbank mit phpMyAdmin verwalten.

In den nächsten beiden Artikeln gehen wir auf die Konfiguration der beiden Programme ein, die sich um die E-Mail-Verteilung für unsere Domain kümmern (Teil 2) und zeigen Ihnen, wie Sie Schutz vor Spam und Viren hinzufügen (Teil 3) für Ihren Server.

Bis dahin können Sie uns gerne über das untenstehende Formular kontaktieren, wenn Sie Fragen oder Anmerkungen haben.