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:
- Laden Sie die beiden CentOS 7.0 DVDs von einem nahegelegenen Mirror herunter (die Liste der Mirrors finden Sie hier: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso.
- Eine schnelle Internetverbindung
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.localdomain6und 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=targetedDanach 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 0Fü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)
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.