Server Setup · 10 min read · Sep 30, 2025

Installation eines Web-, E-Mail- und MySQL-Datenbankclusters auf Debian 6.0 mit ISPConfig 3 - Seite 2

Die nächsten Schritte müssen auf Server 1 und Server 2 ausgeführt werden.

Um amavisd-new, SpamAssassin und ClamAV zu installieren, führen wir aus:

 apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

Die ISPConfig 3-Installation verwendet amavisd, das die SpamAssassin-Filterbibliothek intern lädt, sodass wir SpamAssassin stoppen können, um etwas RAM freizugeben:

/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

Dann können Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear und mcrypt wie folgt installiert werden:

 apt-get -y install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-curl php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby php5-xcache libapache2-mod-perl2 sudo zip wget

Sie werden die folgende Frage sehen:

Webserver automatisch neu konfigurieren: <– apache2
Datenbank für phpmyadmin mit dbconfig-common konfigurieren? <– Nein

Führen Sie dann den folgenden Befehl aus, um die Apache-Module suexec, rewrite, ssl, actions und include zu aktivieren:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd und Quota können mit dem folgenden Befehl installiert werden:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

Bearbeiten Sie die Datei /etc/default/pure-ftpd-common…

vi /etc/default/pure-ftpd-common

… und stellen Sie sicher, dass der Startmodus auf standalone gesetzt ist und VIRTUALCHROOT=true gesetzt ist:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Bearbeiten Sie die Datei /etc/inetd.conf, um zu verhindern, dass inetd versucht, ftp zu starten:

vi /etc/inetd.conf

Wenn es eine Zeile gibt, die mit ftp stream tcp beginnt, kommentieren Sie sie aus (wenn es diese Datei nicht gibt, ist das in Ordnung, und Sie müssen /etc/inetd.conf nicht ändern):

[...]
#:STANDARD: Dies sind Standarddienste.
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
[...]

Wenn Sie /etc/inetd.conf ändern mussten, starten Sie inetd jetzt neu:

/etc/init.d/openbsd-inetd restart

Jetzt konfigurieren wir PureFTPd, um FTP- und TLS-Sitzungen zuzulassen. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und alle Daten im Klartext übertragen werden. Durch die Verwendung von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP viel sicherer wird.

Wenn Sie FTP- und TLS-Sitzungen zulassen möchten, führen Sie aus:

echo 1 > /etc/pure-ftpd/conf/TLS

Um TLS zu verwenden, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, daher erstelle ich zuerst dieses Verzeichnis:

mkdir -p /etc/ssl/private/

Anschließend können wir das SSL-Zertifikat wie folgt generieren:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Ländercode (2 Buchstaben) [AU]: <– Geben Sie Ihren Ländercode ein (z.B. “DE”).
Bundesland oder Provinzname (vollständiger Name) [Some-State]: <– Geben Sie den Namen Ihres Bundeslandes oder Ihrer Provinz ein.
Ortsname (z.B. Stadt) []: <– Geben Sie Ihre Stadt ein.
Organisationsname (z.B. Firma) [Internet Widgits Pty Ltd]: <– Geben Sie den Namen Ihrer Organisation ein (z.B. den Namen Ihres Unternehmens).
Name der organisatorischen Einheit (z.B. Abteilung) []: <– Geben Sie den Namen Ihrer organisatorischen Einheit ein (z.B. “IT-Abteilung”).
Allgemeiner Name (z.B. IHR Name) []: <– Geben Sie den vollqualifizierten Domainnamen des Systems ein (z.B. “server1.example.com”).
E-Mail-Adresse []: <– Geben Sie Ihre E-Mail-Adresse ein.

Ändern Sie die Berechtigungen des SSL-Zertifikats:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Starten Sie dann PureFTPd neu:

/etc/init.d/pure-ftpd-mysql restart

Bearbeiten Sie /etc/fstab. Meine sieht so aus (ich habe usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 zur Partition mit dem Einhängepunkt / hinzugefügt):

vi /etc/fstab
# /etc/fstab: statische Dateisysteminformationen.
#
# Verwenden Sie 'blkid', um die universell eindeutige Kennung für ein
# Gerät zu drucken; dies kann mit UUID= als eine robustere Methode verwendet werden, um Geräte zu benennen,
# die auch funktioniert, wenn Festplatten hinzugefügt und entfernt werden. Siehe fstab(5).
#
#                
proc            /proc           proc    defaults        0       0
# / war auf /dev/sda1 während der Installation
UUID=92bceda2-5ae4-4e3a-8748-b14da48fb297 /               ext3    errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0       1
# Swap war auf /dev/sda5 während der Installation
UUID=e24b3e9e-095c-4b49-af27-6363a4b7d094 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

Um Quota zu aktivieren, führen Sie diese Befehle aus:

 mount -o remount /

quotacheck -avugm
quotaon -avug

Installieren Sie den BIND DNS-Server:

apt-get -y install bind9 dnsutils

Installieren Sie vlogger, webalizer und awstats:

 apt-get -y install vlogger webalizer awstats geoip-database

Öffnen Sie anschließend /etc/cron.d/awstats…

vi /etc/cron.d/awstats

… und kommentieren Sie beide Cron-Jobs in dieser Datei aus:

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generieren Sie statische Berichte:
 #10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh 

Installieren Sie Jailkit: Jailkit wird nur benötigt, wenn Sie SSH-Benutzer chrooten möchten. Es kann wie folgt installiert werden (wichtig: Jailkit muss vor ISPConfig installiert werden - es kann danach nicht installiert werden!):

apt-get -y install build-essential autoconf automake1.9 libtool flex bison

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz
tar xvfz jailkit-2.14.tar.gz
cd jailkit-2.14
./configure
make
make install
cd ..
rm -rf jailkit-2.14*

Installieren Sie fail2ban: Dies ist optional, aber empfohlen, da der ISPConfig-Monitor versucht, das Protokoll anzuzeigen:

apt-get install fail2ban

Um fail2ban zu veranlassen, PureFTPd und Dovecot zu überwachen, erstellen Sie die Datei /etc/fail2ban/jail.local:

vi /etc/fail2ban/jail.local
[pureftpd]
enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

Erstellen Sie dann die folgenden beiden Filterdateien:

vi /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
vi /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.*
ignoreregex =

Starten Sie fail2ban anschließend neu:

/etc/init.d/fail2ban restart

Um den SquirrelMail-Webmail-Client zu installieren, führen Sie aus:

apt-get install squirrelmail

Erstellen Sie dann den folgenden Symlink…

ln -s /usr/share/squirrelmail/ /var/www/webmail

… und konfigurieren Sie SquirrelMail:

squirrelmail-configure

Wir müssen SquirrelMail mitteilen, dass wir Dovecot-IMAP/-POP3 verwenden:

SquirrelMail Konfiguration : Lesen: config.php (1.4.0)

Hauptmenü –
1.  Organisationspräferenzen
2.  Servereinstellungen
3.  Ordnerstandards
4.  Allgemeine Optionen
5.  Themen
6.  Adressbücher
7.  Nachricht des Tages (MOTD)
8.  Plugins
9.  Datenbank
10.  Sprachen

D.  Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen

C   Farbe einschalten
S   Daten speichern
Q   Beenden

Befehl >> <– D

SquirrelMail Konfiguration : Lesen: config.php

Während wir SquirrelMail gebaut haben, haben wir einige
Präferenzen entdeckt, die besser mit einigen
Servern funktionieren, die nicht so
gut mit anderen funktionieren.  Wenn Sie Ihren
IMAP-Server auswählen, wird diese Option einige
vordefinierte Einstellungen für diesen Server festlegen.

Bitte beachten Sie, dass Sie trotzdem alles überprüfen müssen
und sicherstellen, dass alles korrekt ist.  Dies ändert
nicht alles.  Es gibt nur einige wenige Einstellungen, die dies ändern wird.

Bitte wählen Sie Ihren IMAP-Server:
bincimap    = Binc IMAP-Server
courier     = Courier IMAP-Server
cyrus       = Cyrus IMAP-Server
dovecot     = Dovecot Sicherer IMAP-Server
exchange    = Microsoft Exchange IMAP-Server
hmailserver = hMailServer
macosx      = Mac OS X Mailserver
mercury32   = Mercury/32
uw          = IMAP-Server der Universität von Washington
gmail       = IMAP-Zugriff auf Google-Mail (Gmail)-Konten

quit        = Nichts ändern
Befehl >> <– dovecot

SquirrelMail Konfiguration : Lesen: config.php

Während wir SquirrelMail gebaut haben, haben wir einige
Präferenzen entdeckt, die besser mit einigen
Servern funktionieren, die nicht so
gut mit anderen funktionieren.  Wenn Sie Ihren
IMAP-Server auswählen, wird diese Option einige
vordefinierte Einstellungen für diesen Server festlegen.

Bitte beachten Sie, dass Sie trotzdem alles überprüfen müssen
und sicherstellen, dass alles korrekt ist.  Dies ändert
nicht alles.  Es gibt nur einige wenige Einstellungen, die dies ändern wird.

Bitte wählen Sie Ihren IMAP-Server:
bincimap    = Binc IMAP-Server
courier     = Courier IMAP-Server
cyrus       = Cyrus IMAP-Server
dovecot     = Dovecot Sicherer IMAP-Server
exchange    = Microsoft Exchange IMAP-Server
hmailserver = hMailServer
macosx      = Mac OS X Mailserver
mercury32   = Mercury/32
uw          = IMAP-Server der Universität von Washington
gmail       = IMAP-Zugriff auf Google-Mail (Gmail)-Konten

quit        = Nichts ändern
Befehl >> dovecot

imap_server_type = dovecot
default_folder_prefix = 
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = detect
delete_folder = false

Drücken Sie Enter, um fortzufahren… <– drücken Sie ENTER

SquirrelMail Konfiguration : Lesen: config.php (1.4.0)

Hauptmenü –
1.  Organisationspräferenzen
2.  Servereinstellungen
3.  Ordnerstandards
4.  Allgemeine Optionen
5.  Themen
6.  Adressbücher
7.  Nachricht des Tages (MOTD)
8.  Plugins
9.  Datenbank
10.  Sprachen

D.  Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen

C   Farbe einschalten
S   Daten speichern
Q   Beenden

Befehl >> <– S

SquirrelMail Konfiguration : Lesen: config.php (1.4.0)

Hauptmenü –
1.  Organisationspräferenzen
2.  Servereinstellungen
3.  Ordnerstandards
4.  Allgemeine Optionen
5.  Themen
6.  Adressbücher
7.  Nachricht des Tages (MOTD)
8.  Plugins
9.  Datenbank
10.  Sprachen

D.  Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen

C   Farbe einschalten
S   Daten speichern
Q   Beenden

Befehl >> <– Q

Als Nächstes aktivieren wir einen globalen Alias /webmail für Squirrelmail:

cd /etc/apache2/conf.d/
ln -s ../../squirrelmail/apache.conf squirrelmail.conf
/etc/init.d/apache2 reload

Jetzt öffnen Sie /etc/apache2/conf.d/squirrelmail.conf…

vi /etc/apache2/conf.d/squirrelmail.conf

… und fügen Sie die folgenden Zeilen zum -Container hinzu, um sicherzustellen, dass mod_php für den Zugriff auf SquirrelMail verwendet wird, unabhängig davon, welchen PHP-Modus Sie für Ihre Website in ISPConfig auswählen:

[...]
Alias /webmail /usr/share/squirrelmail

   Options FollowSymLinks

   AddType application/x-httpd-php .php
   php_flag magic_quotes_gpc Off
   php_flag track_vars On
   php_admin_flag allow_url_fopen Off
   php_value include_path .
   php_admin_value upload_tmp_dir /var/lib/squirrelmail/tmp
   php_admin_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail:/var/lib/squirrelmail:/etc/hostname:/etc/mailname
   php_flag register_globals off


   DirectoryIndex index.php

 
# Der Zugriff auf configtest ist standardmäßig eingeschränkt, um Informationslecks zu verhindern

   order deny,allow
   deny from all
   allow from 127.0.0.1


[...]

Erstellen Sie das Verzeichnis /var/lib/squirrelmail/tmp…

mkdir /var/lib/squirrelmail/tmp

… und machen Sie es dem Benutzer www-data zugeordnet:

chown www-data /var/lib/squirrelmail/tmp

Laden Sie Apache erneut:

/etc/init.d/apache2 reload

Das war’s schon - /etc/apache2/conf.d/squirrelmail.conf definiert einen Alias namens /squirrelmail, der auf das Installationsverzeichnis von SquirrelMail /usr/share/squirrelmail verweist.

Sie können jetzt SquirrelMail von Ihrer Website aus wie folgt aufrufen:

http://www.example.com/squirrelmail

Sie können auch von der ISPConfig-Steuerungspanel vhost wie folgt darauf zugreifen (dies erfordert keine Konfiguration in ISPConfig):

http://server1.example.com:8080/squirrelmail

Als Nächstes installieren wir Unison. Unison wird verwendet, um die Verzeichnisse /var/www und /var/vmail zwischen Master und Slave zu synchronisieren.

apt-get install unison

Jetzt installieren wir eine Unison-Konfigurationsdatei auf dem ersten Server.

Auf Server 1:

Erstellen Sie eine neue Datei /root/.unison/default.prf auf server1…

mkdir /root/.unison
vi /root/.unison/default.prf

… und fügen Sie den folgenden Inhalt hinzu:

# Wurzeln der Synchronisation
root = /var
root = ssh://192.168.0.106//var/
 
# Pfade zur Synchronisation
path = www
path = vmail
 
# Einige Regex, die Namen und Pfade ignorieren
#ignore = Path stats    ## ignoriert /var/www/stats
#ignore = Path stats/*  ## ignoriert /var/www/stats/*
#ignore = Path */stats  ## ignoriert /var/www/somedir/stats, aber nicht /var/www/a/b/c/stats
#ignore = Name *stats   ## ignoriert alle Dateien/Verzeichnisse, die mit "stats" enden
#ignore = Name stats*   ## ignoriert alle Dateien/Verzeichnisse, die mit "stats" beginnen
#ignore = Name *.tmp    ## ignoriert alle Dateien mit der Endung .tmp
   
#          Wenn auf true gesetzt, überspringt dieses Flag die Benutzeroberfläche
#          die Bestätigungen bei nicht konfliktären Änderungen zu fragen. (Genauer
#          gesagt, wenn die Benutzeroberfläche mit der Festlegung der
#          Ausbreitungsrichtung für einen Eintrag fertig ist und zum nächsten übergeht,
#          überspringt sie alle nicht konfliktären Einträge und geht direkt zum nächsten Konflikt.)
auto=true
   
#          Wenn dies auf true gesetzt ist, wird die Benutzeroberfläche keine Fragen stellen.
#          Nicht konfliktäre Änderungen werden propagiert;
#          Konflikte werden übersprungen.
batch=true
   
#          !Wenn dies auf true gesetzt ist, fordert Unison eine zusätzliche
#          Bestätigung an, wenn es scheint, dass die gesamte Kopie gelöscht wurde,
#          bevor die Änderung propagiert wird. Wenn das Batch-Flag
#          ebenfalls gesetzt ist, wird die Synchronisation abgebrochen. Wenn die Pfad
#          Präferenz verwendet wird, wird die gleiche Bestätigung für
#          oberste Pfade angefordert. (Momentan betrifft dieses Flag nur die
#          textuelle Benutzeroberfläche.) Siehe auch die Mountpoint-Präferenz.
confirmbigdel=true
   
#          Wenn diese Präferenz auf true gesetzt ist, verwendet Unison die
#          Änderungszeit und Länge einer Datei als `Pseudo-Inode
#          Nummer', wenn es Replikate auf Updates scannt, anstatt den
#          vollständigen Inhalt jeder Datei zu lesen. Unter Windows kann dies dazu führen,
#          dass Unison ein Update übersieht, wenn die Änderungszeit
#          und Länge der Datei durch das Update unverändert bleiben.
#          Unison wird jedoch niemals ein solches Update mit einer
#          Änderung aus dem anderen Replikat überschreiben, da es immer eine
#          sichere Überprüfung auf Updates direkt vor der Propagierung einer
#          Änderung durchführt. Daher ist es sinnvoll, diesen Schalter unter Windows
#          die meiste Zeit zu verwenden und gelegentlich Unison einmal mit fastcheck
#          auf false auszuführen, wenn Sie besorgt sind, dass Unison ein Update
#          übersehen haben könnte.
#          Der Standardwert der Präferenz ist auto, was dazu führt,
#          dass Unison schnelles Prüfen auf Unix-Replikaten verwendet (wo es sicher ist)
#          und langsames Prüfen auf Windows-Replikaten. Zur Rückwärtskompatibilität
#          können ja, nein und standard anstelle von true, false und auto verwendet werden.
#          Siehe den Abschnitt "Schnelles Prüfen" für weitere Informationen.
fastcheck=true

#          Wenn dieses Flag auf true gesetzt ist, werden die Gruppenattribute der
#          Dateien synchronisiert. Ob die Gruppennamen oder die Gruppen
#          Identifikatoren synchronisiert werden, hängt von der Präferenz numerids ab.
group=true
   
#          Wenn dieses Flag auf true gesetzt ist, werden die Eigentümerattribute der
#          Dateien synchronisiert. Ob die Eigentümernamen oder die Eigentümer
#          Identifikatoren synchronisiert werden, hängt von der Präferenz
#          extttnumerids ab.
owner=true
   
#          Die Einbeziehung der Präferenz -prefer root bewirkt, dass Unison immer
#          Konflikte zugunsten von root löst, anstatt den Benutzer um
#          Anleitung zu bitten. (Die Syntax von root ist die gleiche wie für
#          die root-Präferenz, plus die speziellen Werte neuer und älter.)
#          Diese Präferenz wird von der preferpartial-Präferenz überschrieben.
#          Diese Präferenz sollte nur verwendet werden, wenn Sie sicher sind, dass Sie
#          wissen, was Sie tun!
prefer=newer
   
#          Wenn diese Präferenz auf true gesetzt ist, wird die textuelle Benutzeroberfläche
#          nichts drucken, außer im Falle von Fehlern.
#          Das Setzen von silent auf true setzt automatisch die Batch-Präferenz
#          auf true.
silent=true
   
#          Wenn dieses Flag auf true gesetzt ist, werden die Änderungszeiten von Dateien
#          (aber nicht die Änderungszeiten von Verzeichnissen) propagiert.
times=true

Wir möchten die Synchronisation automatisieren, deshalb erstellen wir einen Cron-Job dafür auf server1.example.tld:

crontab -e
*/5 * * * * /usr/bin/unison &> /dev/null
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.