Server Setup · 12 min read · Oct 02, 2025

Der perfekte Server - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Der perfekte Server - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Version 1.0
Autoren: Till Brehm, Srijan Kishore und Falko Timme
Folgen Sie howtoforge auf Twitter

Dieses Tutorial zeigt, wie man einen CentOS 7 x86_64 Server für die Installation von ISPConfig 3 vorbereitet und wie man ISPConfig 3 darauf installiert. ISPConfig 3 ist ein Webhosting-Control-Panel, das es Ihnen ermöglicht, die folgenden Dienste über einen Webbrowser zu konfigurieren: nginx-Webserver, Postfix-Mailserver, MySQL, BIND-Nameserver, PureFTPd, SpamAssassin, ClamAV, Mailman und viele mehr. Seit Version 3.0.4 bietet ISPConfig vollständige Unterstützung für den nginx-Webserver zusätzlich zu Apache; dieses Tutorial behandelt die Einrichtung eines Servers, der nginx verwendet, nicht Apache. Das ISPConfig 3 Apache Perfect Server Tutorial ist hier verfügbar.

ISPConfig 3 Handbuch

Um zu lernen, wie man ISPConfig 3 verwendet, empfehle ich dringend, das ISPConfig 3 Handbuch herunterzuladen.

Auf etwa 300 Seiten behandelt es das Konzept hinter ISPConfig (Admin, Reseller, Kunden), erklärt, wie man ISPConfig 3 installiert und aktualisiert, enthält ein Referenzdokument für alle Formulare und Formularfelder in ISPConfig zusammen mit Beispielen für gültige Eingaben und bietet Tutorials für die häufigsten Aufgaben in ISPConfig 3. Es beschreibt auch, wie man seinen Server sicherer macht und enthält am Ende einen Abschnitt zur Fehlersuche.

1. Anforderungen

Um ein solches System zu installieren, benötigen Sie Folgendes:

2. Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100 und dem Gateway 192.168.0.1. Diese Einstellungen können bei Ihnen abweichen, daher müssen Sie sie gegebenenfalls ersetzen. Bitte installieren Sie die minimale CentOS 7-Installation von diesem Tutorial-Link, bevor Sie fortfahren.

3 Installieren Sie den nano-Editor und passen Sie /etc/hosts an

yum -y install nano wget

Als nächstes bearbeiten wir /etc/hosts. Lassen Sie es so aussehen:

nano /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100   server1.example.com     server1

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

und setzen Sie den Hostnamen auf server1.example.com:

echo ‘server1.example.com’ > /etc/hostname

4 Konfigurieren Sie die Firewall und installieren Sie einige grundlegende Netzwerksoftware

(Sie können dieses Kapitel überspringen, wenn Sie die Firewall bereits am Ende der grundlegenden Systeminstallation deaktiviert haben.)

Ich möchte ISPConfig am Ende dieses Tutorials installieren, das mit seiner eigenen Firewall kommt. Deshalb deaktiviere ich jetzt die Standard-CentOS-Firewall. Natürlich können Sie sie aktiviert lassen und nach Ihren Bedürfnissen konfigurieren (aber dann sollten Sie später keine andere Firewall verwenden, da sie wahrscheinlich mit der CentOS-Firewall in Konflikt steht).

Führen Sie aus:

systemctl stop firewalld.service
systemctl disable firewalld.service

[root@server1 ~]# systemctl disable firewalld.service

rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’

rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’

[root@server1 ~]#

und deaktivieren Sie die Firewall.

Um zu überprüfen, ob die Firewall wirklich deaktiviert wurde, können Sie ausführen:

firewall-cmd –state

Danach sollte die Ausgabe so aussehen:

[root@server1 ~]# firewall-cmd –state
nicht aktiv
[root@server1 ~]#

yum -y install net-tools NetworkManager-tui

5 Deaktivieren Sie SELinux

SELinux ist eine Sicherheitserweiterung von CentOS, die erweiterte Sicherheit bieten soll. Meiner Meinung nach benötigen Sie es nicht, um ein sicheres System zu konfigurieren, und es verursacht normalerweise mehr Probleme als Vorteile (denken Sie daran, nachdem Sie eine Woche lang Fehlersuche betrieben haben, weil ein Dienst nicht wie erwartet funktionierte, und dann stellen Sie fest, dass alles in Ordnung war, nur SELinux das Problem verursachte). Daher deaktiviere ich es (dies ist ein Muss, wenn Sie später ISPConfig installieren möchten).

Bearbeiten Sie /etc/selinux/config und setzen Sie SELINUX=disabled:

nano /etc/selinux/config

# Diese Datei steuert den Status von SELinux im System.
# SELINUX= kann einen dieser drei Werte annehmen:
#     enforcing - SELinux-Sicherheitsrichtlinie wird durchgesetzt.
#     permissive - SELinux gibt Warnungen aus, anstatt durchzusetzen.
#     disabled - Keine SELinux-Richtlinie ist geladen.
SELINUX=disabled
# SELINUXTYPE= kann einen dieser beiden Werte annehmen:
#     targeted - Zielprozesse sind geschützt,
#     mls - Multi Level Security-Schutz.
SELINUXTYPE=targeted

Danach müssen wir das System neu starten:

reboot

6 Aktivieren Sie zusätzliche Repositories und installieren Sie einige Software

Wir werden EPEL-Repositories auf unserem CentOS-System aktivieren, da viele der Pakete, die wir im Verlauf dieses Tutorials installieren werden, nicht in den offiziellen CentOS 7.0-Repositories verfügbar sind:

yum -y install epel-release

yum -y install yum-priorities

Bearbeiten Sie /etc/yum.repos.d/epel.repo…

nano /etc/yum.repos.d/epel.repo

… und fügen Sie die Zeile priority=10 zum [epel]-Abschnitt hinzu:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[...]  

Dann aktualisieren wir unsere vorhandenen Pakete im System:

yum update

Jetzt installieren wir einige Softwarepakete, die später benötigt werden:

yum -y groupinstall ‘Development Tools’

7 Quota

(Wenn Sie ein anderes Partitionierungsschema gewählt haben als ich, müssen Sie dieses Kapitel anpassen, damit Quota auf den Partitionen angewendet wird, auf denen Sie es benötigen.)

Um Quota zu installieren, führen wir diesen Befehl aus:

yum -y install quota

Jetzt überprüfen wir, ob Quota bereits für das Dateisystem aktiviert ist, in dem die Website (/var/www) und die Maildir-Daten (var/vmail) gespeichert sind. In diesem Beispiel-Setup habe ich eine große Root-Partition, also suche ich nach ‘ / ‘:

mount | grep ‘ / ‘

[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#

Wenn Sie eine separate /var-Partition haben, verwenden Sie:

mount | grep ‘ /var ‘

stattdessen. Wenn die Zeile das Wort “ noquota “ enthält, fahren Sie mit den folgenden Schritten fort, um Quota zu aktivieren.

Aktivierung von Quota auf der / (Root)-Partition

Normalerweise würden Sie Quota in der /etc/fstab-Datei aktivieren, aber wenn das Dateisystem das Root-Dateisystem “ / “ ist, muss Quota durch einen Bootparameter des Linux-Kernels aktiviert werden.

Bearbeiten Sie die Grub-Konfigurationsdatei:

nano /etc/default/grub

suchen Sie nach der Zeile, die mit GRUB_CMDLINE_LINUX beginnt, und fügen Sie rootflags=uquota,gquota zu den Befehlszeilenparametern hinzu, sodass die resultierende Zeile so aussieht:

[...]  

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"  
[...]  

und wenden Sie die Änderungen an, indem Sie den folgenden Befehl ausführen.

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg

und starten Sie den Server neu.

reboot

Überprüfen Sie jetzt, ob Quota aktiviert ist:

mount | grep ‘ / ‘

[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#

Wenn Quota aktiv ist, sehen wir “ usrquota,grpquota “ in der Liste der Mount-Optionen.

Aktivierung von Quota auf einer separaten /var-Partition

Wenn Sie eine separate /var-Partition haben, bearbeiten Sie /etc/fstab und fügen Sie ,uquota,gquota zur /-Partition (/dev/mapper/centos-var) hinzu:

nano /etc/fstab

#
# /etc/fstab
# Erstellt von anaconda am So Sep 21 16:33:45 2014
#
# Zugängliche Dateisysteme, die durch Referenz verwaltet werden, befinden sich unter '/dev/disk'
# Siehe man-Seiten fstab(5), findfs(8), mount(8) und/oder blkid(8) für weitere Informationen
#
/dev/mapper/centos-root /                       xfs     defaults        1 1
/dev/mapper/centos-var /var                     xfs     defaults,uquota,gquota        1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot                   xfs     defaults        1 3
/dev/mapper/centos-swap swap                    swap    defaults        0 0

Führen Sie dann aus:

mount -o remount /var

quotacheck -avugm
quotaon -avug

um Quota zu aktivieren.

8 Synchronisieren Sie die Systemuhr

Es ist eine gute Idee, die Systemuhr mit einem NTP ( n etwork t ime p rotokoll) Server über das Internet zu synchronisieren. Führen Sie einfach aus:

yum -y install ntp

und Ihre Systemzeit wird immer synchronisiert sein.

9 Installieren Sie MariaDB

Wir werden MariaDB-Server und -Client wie folgt installieren:

yum -y install mariadb mariadb-server

Wir möchten, dass der MariaDB-Dienst beim Booten läuft und starten den Dienst wie folgt:

systemctl enable mariadb.service
systemctl start mariadb.service

Setzen Sie Passwörter für das MySQL-Root-Konto:

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: Zeile 379: find_mysql_client: Befehl nicht gefunden

HINWEIS: ES WIRD EMPFOHLEN, ALLE TEILE DIESER SCRIPT FÜR ALLE MariaDB
SERVER IM PRODUKTIONSEINSATZ AUSZUFÜHREN!  BITTE JEDEN SCHRITT SORGFÄLTIG LESEN!

Um sich bei MariaDB anzumelden, um es zu sichern, benötigen wir das aktuelle
Passwort für den Root-Benutzer.  Wenn Sie MariaDB gerade installiert haben und
Sie das Root-Passwort noch nicht festgelegt haben, ist das Passwort leer,
also sollten Sie hier einfach die Eingabetaste drücken. <–EINGABETASTE

Geben Sie das aktuelle Passwort für root ein (Eingabetaste für keines): <–EINGABETASTE
OK, Passwort erfolgreich verwendet, weiter…

Das Festlegen des Root-Passworts stellt sicher, dass niemand sich ohne die richtige Autorisierung
bei dem MariaDB-Root-Benutzer anmelden kann.

Root-Passwort festlegen? [Y/n] <–EINGABETASTE
Neues Passwort: <–IhrMariaDBPasswort
Neues Passwort erneut eingeben: <–IhrMariaDBPasswort
Passwort erfolgreich aktualisiert!
Aktualisieren der Berechtigungstabellen..
… Erfolg!

Standardmäßig hat eine MariaDB-Installation einen anonymen Benutzer, der es jedem
ermöglicht, sich bei MariaDB anzumelden, ohne dass ein Benutzerkonto für
ihn erstellt werden muss.  Dies ist nur für Tests gedacht und um die Installation
etwas reibungsloser zu gestalten.  Sie sollten sie entfernen, bevor Sie in eine
Produktionsumgebung wechseln.

Anonyme Benutzer entfernen? [Y/n] <–EINGABETASTE
… Erfolg!

Normalerweise sollte root nur von ‘localhost’ aus verbinden dürfen.  Dies
stellt sicher, dass niemand das Root-Passwort über das Netzwerk erraten kann.

Root-Login aus der Ferne verbieten? [Y/n] <–EINGABETASTE
… Erfolg!

Standardmäßig kommt MariaDB mit einer Datenbank namens ‘test’, auf die jeder
Zugriff hat.  Dies ist ebenfalls nur für Tests gedacht und sollte entfernt
werden, bevor Sie in eine Produktionsumgebung wechseln.

Testdatenbank und Zugriff darauf entfernen? [Y/n] <–EINGABETASTE

  • Testdatenbank löschen…
    … Erfolg!
  • Berechtigungen auf Testdatenbank entfernen…
    … Erfolg!

Das Aktualisieren der Berechtigungstabellen stellt sicher, dass alle Änderungen, die bisher
getätigt wurden, sofort wirksam werden.

Berechtigungstabellen jetzt aktualisieren? [Y/n] <–EINGABETASTE
… Erfolg!

Aufräumen…

Alles erledigt!  Wenn Sie alle oben genannten Schritte abgeschlossen haben, sollte Ihre
MariaDB-Installation jetzt sicher sein.

Danke, dass Sie MariaDB verwenden!
[root@server1 ~]#

10 Installieren Sie Dovecot

Dovecot kann wie folgt installiert werden:

yum -y install dovecot dovecot-pigeonhole dovecot-mysql

Erstellen Sie eine leere dovecot-sql.conf-Datei und einen Symlink:

touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf

Jetzt erstellen Sie die Systemstartlinks und starten Dovecot:

systemctl enable dovecot.service
systemctl start dovecot.service

11 Installieren Sie Postfix

Postfix kann wie folgt installiert werden:

yum -y install postfix

Dann schalten Sie Sendmail aus und starten Postfix:

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service

12 Installieren Sie Getmail

Getmail kann wie folgt installiert werden:

yum -y install getmail

13 Installieren Sie Amavisd-new, SpamAssassin und ClamAV

Um amavisd-new, spamassassin und clamav zu installieren, führen Sie den folgenden Befehl aus:

yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql

Bearbeiten Sie die freshclam-Konfigurationsdatei /etc/freshclam.conf

nano /etc/freshclam.conf

und kommentieren Sie die Zeile “Beispiel” aus.

[….]

[….]

Dann starten wir freshclam, amavisd und clamd.amavisd:

sa-update
freshclam
systemctl enable amavisd.service

14 Installieren Sie Nginx, PHP5 (PHP-FPM) und Fcgiwrap

Nginx ist als Paket für CentOS 7.0 (aus EPEL) verfügbar, das wir wie folgt installieren können:

yum -y install nginx

Wenn Apache2 bereits auf dem System installiert ist, stoppen Sie es jetzt…

systemctl stop httpd.service

… und entfernen Sie die Systemstartlinks von Apache:

systemctl disable httpd.service

Dann erstellen wir die Systemstartlinks für nginx und starten es:

systemctl enable nginx.service
systemctl start nginx.service

(Wenn sowohl Apache2 als auch nginx installiert sind, wird der ISPConfig 3-Installer Sie fragen, welchen Sie verwenden möchten - antworten Sie in diesem Fall mit nginx. Wenn nur einer dieser beiden installiert ist, wird ISPConfig die erforderliche Konfiguration automatisch vornehmen.)

Wir können PHP5 in nginx über PHP-FPM zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP-FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für beschäftigte Websites). Wir können php-fpm zusammen mit php-cli und einigen PHP5-Modulen wie php-mysql installieren, die Sie benötigen, wenn Sie MySQL aus Ihren PHP-Skripten verwenden möchten:

yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy

Als nächstes öffnen wir /etc/php.ini…

nano /etc/php.ini

… und ändern die Fehlerberichterstattung (damit keine Hinweise mehr angezeigt werden):

[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]

Setzen Sie auch cgi.fix_pathinfo=0:

nano /etc/php.ini

[...]
; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI.  PHP's
; vorheriges Verhalten war es, PATH_TRANSLATED auf SCRIPT_FILENAME zu setzen und nicht zu verstehen,
; was PATH_INFO ist.  Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikationen.  Eine Einstellung
; von 1 bewirkt, dass PHP CGI seine Pfade an die Spezifikation anpasst.  Eine Einstellung
; von null bewirkt, dass PHP sich wie zuvor verhält.  Standard ist 1.  Sie sollten Ihre Skripte
; so anpassen, dass sie SCRIPT_FILENAME anstelle von PATH_TRANSLATED verwenden.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

(Bitte lesen Sie http://wiki.nginx.org/Pitfalls, um herauszufinden, warum Sie dies tun sollten.)

Zusätzlich dazu, um Fehler wie

[08-Aug-2011 18:07:08] PHP-Warnung: phpinfo(): Es ist nicht sicher, sich auf die Zeitzoneneinstellungen des Systems zu verlassen. Sie sind verpflichtet, die date.timezone-Einstellung oder die date_default_timezone_set()-Funktion zu verwenden. Falls Sie eine dieser Methoden verwendet haben und Sie immer noch diese Warnung erhalten, haben Sie wahrscheinlich den Zeitzonenbezeichner falsch geschrieben. Wir haben ‘Europa/Berlin’ für ‘CEST/2.0/DST’ anstelle von /usr/share/nginx/html/info.php in Zeile 2 ausgewählt

… in /var/log/php-fpm/www-error.log, wenn Sie ein PHP-Skript in Ihrem Browser aufrufen, sollten Sie date.timezone in /etc/php.ini setzen:

[...]
[Datum]
; Definiert die Standardzeitzone, die von den Datumsfunktionen verwendet wird
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]

Als nächstes erstellen Sie die Systemstartlinks für php-fpm und starten es:

systemctl enable php-fpm
systemctl restart php-fpm

PHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript /etc/init.d/php-fpm), der einen FastCGI-Server auf Port 9000 ausführt.

Um CGI-Unterstützung in nginx zu erhalten, installieren wir Fcgiwrap.

Fcgiwrap ist ein CGI-Wrapper, der auch für komplexe CGI-Skripte funktionieren sollte und in Shared-Hosting-Umgebungen verwendet werden kann, da er es jedem vhost ermöglicht, sein eigenes cgi-bin-Verzeichnis zu verwenden.

Da es kein fcgiwrap-Paket für CentOS 7.0 gibt, müssen wir es selbst erstellen. Zuerst installieren wir einige Voraussetzungen:

yum -y install fcgi-devel

Jetzt können wir fcgiwrap wie folgt erstellen:

cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install

Dies installiert fcgiwrap in /usr/local/sbin/fcgiwrap.

Als nächstes installieren wir das spawn-fcgi-Paket, das es uns ermöglicht, fcgiwrap als Daemon auszuführen:

yum -y install spawn-fcgi

Öffnen Sie /etc/sysconfig/spawn-fcgi…

nano /etc/sysconfig/spawn-fcgi

… und ändern Sie die Datei wie folgt:

# Sie müssen einige Arbeitsoptionen festlegen, bevor der "spawn-fcgi"-Dienst funktioniert.
# Wenn SOCKET auf eine Datei verweist, wird diese Datei vom Init-Skript bereinigt.
#
# Siehe spawn-fcgi(1) für alle möglichen Optionen.
#
# Beispiel:
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

Fügen Sie jetzt den Benutzer nginx zur Gruppe apache hinzu:

usermod -a -G apache nginx

Erstellen Sie die Systemstartlinks für spawn-fcgi…

chkconfig spawn-fcgi on

… und starten Sie es wie folgt:

systemctl start spawn-fcgi

Sie sollten jetzt den fcgiwrap-Socket in /var/run/fcgiwrap.socket finden, der dem Benutzer und der Gruppe apache gehört (einige Skripte, z.B. Mailman, erwarten, dass sie vom Benutzer/Gruppe apache ausgeführt werden, weshalb wir spawn-fcgi nicht als Benutzer/Gruppe nginx ausführen, sondern stattdessen nginx zur apache-Gruppe hinzufügen).

14.1 Zusätzliche PHP-Versionen

Beginnend mit ISPConfig 3.0.5 ist es möglich, mehrere PHP-Versionen auf einem Server zu haben (wählbar über ISPConfig), die über FastCGI und PHP-FPM ausgeführt werden können. Das Verfahren zum Erstellen zusätzlicher PHP-Versionen auf CentOS wird in diesem Tutorial beschrieben: So verwenden Sie mehrere PHP-Versionen (PHP-FPM & FastCGI) mit ISPConfig 3 (CentOS 6.3)

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.