ISPConfig3 unter Debian 6 (Squeeze) installieren

Dieses Tutorial zeigt, wie man ISPConfig3 auf einem Debian 6 (Squeeze) Server aufsetzt.

ISPConfig 3 ist ein Webhosting-Bedienungspanel, das Dir erlaubt, folgende Services über einen Webbrowser zu steuern:

  • Apache Webserver
  • Postfix Mailserver
  • MySQL
  • MyDNS Nameserver
  • PureFTPd
  • SpamAssassin
  • ClamAV
  • und viele mehr…

Grundsystem

Die Installation des Grundsystems lassen wir hier mal außen vor, das sollte allgemein bekannt sein.

Als erstes installieren wir eine Minimalversion von Debian 6 ohne weitere Pakete.

Dann folgende Pakete installieren:

apt-get install ssh openssh-server nano

Netzwerk

Netzwerk Einstellungen bearbeiten: nano /etc/network/interfaces

auto eth0
iface eth0 inet static
        address 192.168.178.84
        netmask 255.255.255.0
        network 192.168.178.0
        broadcast 192.168.178.255
        gateway 192.168.178.1

Im Anschluß das Netzwerk neu starten: /etc/init.d/networking restart

Hostname

Das Hostfile bedarf ebenfalls einer Änderung: nano /etc/hosts

127.0.0.1       localhost.localdomain   localhost
192.168.178.84  server1.example.com     server1

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Nun den Hostnamen setzen:

/etc/init.d/hostname.sh start
hostname
hostname -f

Die letzten beiden Befehle sollten jetzt jeweils “server1.example.com” anzeigen.

Updates

So, jetzt aktuallisieren wir noch einmal schnell unser System:

apt-get update && apt-get upgrade

Ändern der Default-Shell

/bin/sh ist ein symbolischer link zu /bin/dash, wir benötigen /bin/bash, nicht /bin/dash.

Um dies zu bewerkstelligen geben wir folgendes ein: dpkg-reconfigure dash

Die Frage Use dash as the default system shell (/bin/sh)? beantworten wir mit Nein!

Synchronisieren der Systemzeit

Eine immer aktuelle Uhrzeit zu haben, ist nie eine schlechte Idee, deshalb synchronisieren wir diese über NTP (network time protocol) Server über das Internet.

apt-get install ntp ntpdate

Installation der Dienste

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl courier-maildrop getmail4 rkhunter binutils sudo

Folgende Fragen werden uns nun gestellt:

General type of mail configuration: Internet Site
System mail name: server1.example.com
New password for the MySQL "root" user: yourrootsqlpassword
Repeat password for the MySQL "root" user: yourrootsqlpassword
Create directories for web-based administration? No
SSL certificate required Ok

Es soll den “Kunden” frei gestellt werden von wo aus Sie auf Ihre Datenbanken zugreifen können also müssen wir die Beschränkung auf localhost deaktivieren: nano /etc/mysql/my.cnf

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Anschließend starten wir den MySQL neu: /etc/init.d/mysql restart

Kontrollieren ob das Netzwerk aktiv ist: netstat -tap | grep mysql

Die Ausgabe sollte ungefähr so ausschauen:

server1:~# netstat -tap | grep mysql
tcp 0 0 *:mysql *:* LISTEN 6612/mysqld

Während der Installation wurden automatisch SSL Zertifikate für IMAP-SSL und POP-SSL generiert, jedoch mit dem Hostnamen “localhost”. Diese müssen wir nun ändern:

cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem
nano /etc/courier/imapd.cnf
[...]
CN=server1.example.com
[...]
nano /etc/courier/pop3d.cnf
[...]
CN=server1.example.com
[...]
mkimapdcert
mkpop3dcert
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Amavisd-new, Spamassassin und Clamav

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

ISPConfig 3 setup benutzt amavisd welches die SpamAssassin filter library intern nutzt, so können wir ruhig SpamAssassin stopen um ein bisschen mehr RAM übrig zu haben:

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

Apache2, PHP5, phpmyadmin, better fastCGI, suexec, Pear und mcrypt

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common 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

Folgende Fragen werden uns wieder gestellt:

Web server to reconfigure automatically: apache2
Configure database for phpmyadmin with dbconfig-common? No

Nun müssen ein paar Apache2 Module aktiviert werden:

a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest
/etc/init.d/apache2 restart

PureFTPd und Quota

apt-get install pure-ftpd-common pure-ftpd-mysql quota quotatool
echo 1 > /etc/pure-ftpd/conf/TLS
mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -newkey rsa:1024 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Und wieder kommen ein paar Fragen:

Country Name (2 letter code) [AU]: Geben Sie hier Ihr Land ein (z.B., "DE").
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:
Email Address []:

Setzen der passenden Berechtigungen: chmod 600 /etc/ssl/private/pure-ftpd.pem

In der Datei /etc/default/pure-ftpd-common ändern wir noch den Startmodus nano /etc/default/pure-ftpd-common

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

Nun kann der FTP Service gestartet werden: /etc/init.d/pure-ftpd-mysql start

Jetzt bearbeiten wir noch die /etc/fstab. Meine sieht in etwa so aus:

(Ich habe folgendes hinzugefügt ,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 zu der Partition mit dem mount point / )

nano /etc/fstab
proc    /proc    proc    defaults    0    0
UUID=d9ec3dbc-a720-40e3-81eb-d92f63ff16c8    /    ext3    errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0   0   1
UUID=ee3b0313-b655-4418-84c6-09bde419255c    none    swap    sw    0    0
/dev/scd0    /media/cdrom0    udf,iso9660    user, noauto    0    0

Jetzt aktivieren wir quota: mount -o remount / danach quotacheck -avugm

Nicht wundern, das dauert jetzt erstmal eine Weile.

Anschließend führen wir noch folgendes aus: quotaon -avug

BIND DNS Server

apt-get install bind9 dnsutils

Vlogger, Webalizer und AWstats

apt-get install vlogger webalizer awstats

In der Datei /etc/cron.d/awstats müssen die beiden Cronjobs mit einer # auskommentiert werden.

nano /etc/cron.d/awstats

Jailkit

Jailkit muß nur installiert werden wenn die SSH-Benutzer in einer chroot einsperren können willst. Wichtig! Jailkit muß vor ISPConfig installiert werden, danach geht dies nicht mehr!

apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper
cd /tmp
wget http://fossies.org/linux/privat/jailkit-2.16.tar.gz
tar xvfz jailkit-2.16.tar.gz
cd jailkit-2.16
./debian/rules binary
cd ..
dpkg -i jailkit_2.16-1_*.deb
rm -rf jailkit-2.16*

fail2ban

apt-get install fail2ban

Zum Überwachen der FTP und SASL Dienste erstellen wir folgende Datei: nano /etc/fail2ban/jail.local

[pureftpd]
enabled = true
port = ftp
filter = pureftpd
logpath = /var/log/syslog
maxretry = 3

[sasl]
enabled = true
port = smtp
filter = sasl
logpath = /var/log/mail.log
maxretry = 5

[courierpop3]
enabled = true
port = pop3
filter = courierpop3
logpath = /var/log/mail.log
maxretry = 5

[courierpop3s]
enabled = true
port = pop3s
filter = courierpop3s
logpath = /var/log/mail.log
maxretry = 5

[courierimap]
enabled = true
port = imap2
filter = courierimap
logpath = /var/log/mail.log
maxretry = 5

[courierimaps]
enabled = true
port = imaps
filter = courierimaps
logpath = /var/log/mail.log
maxretry = 5

[ssh]
enabled = true
port    = 22
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6

Und legen noch die fünf Filter-Dateien an:

echo "[Definition]
failregex = .*pure-ftpd: (.*@) [WARNING] Authentication failed for user.*
ignoreregex =" > /etc/fail2ban/filter.d/pureftpd.conf

echo "[Definition]
failregex = pop3d: LOGIN FAILED.*ip=[.*:]
ignoreregex =" > /etc/fail2ban/filter.d/courierpop3.conf

echo "[Definition]
failregex = pop3d-ssl: LOGIN FAILED.*ip=[.*:]
ignoreregex =" > /etc/fail2ban/filter.d/courierpop3s.conf

echo "[Definition]
failregex = imapd: LOGIN FAILED.*ip=[.*:]
ignoreregex =" > /etc/fail2ban/filter.d/courierimap.conf

echo "[Definition]
failregex = imapd-ssl: LOGIN FAILED.*ip=[.*:]
ignoreregex =" > /etc/fail2ban/filter.d/courierimaps.conf

Jetzt restarten wir fail2ban um die neuen Konfigurationen zu übernehmen.

/etc/init.d/fail2ban restart

ISPConfig3 installieren

Jetzt kann es endlich losgehen. Das Grundsystem und die Dienste sind soweit installiert, jetzt besorgen wir uns den ISPConfig3 Installer und legen los…

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

Starten des Installers: php -q install.php

Folgende Fragen werden dir bei der Installation gestellt:

Initial configuration
Operating System: Debian 6.0 (Squeeze/Sid) or compatible
Following will be a few questions for primary configuration so be careful.
Default values are in [brackets] and can be accepted with .
Tap in "quit" (without the quotes) to stop the installer.
Select language (en,de) [en]: de
Installation mode (standard,expert) [standard]:
Full qualified hostname (FQDN) of the server, eg server1.domain.tld  [testispconfig.cneurope.de]:
MySQL server hostname [localhost]:
MySQL root username [root]:
MySQL root password []: supergeheimespasswort
MySQL database to create [dbispconfig]:
MySQL charset [utf8]:
Generating a 2048 bit RSA private key<
……………………………………+++
……………..+++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:testispconfig.cneurope.de
Email Address []:[email protected]
Configuring Jailkit
Configuring SASL
Configuring PAM
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Pureftpd
Configuring BIND
Configuring Apache
Configuring vlogger
Configuring Apps vhost
Configuring Firewall
Installing ISPConfig
ISPConfig Port [8080]:
Configuring DBServer
Installing Crontab
no crontab for root
no crontab for getmail
Restarting services …
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
Stopping SASL Authentication Daemon: saslauthd.
Starting SASL Authentication Daemon: saslauthd.
Stopping amavisd: amavisd-new.
head: cannot open `/etc/mailname' for reading: No such file or directory
Starting amavisd: amavisd-new.
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd.
Restarting IMAP/POP3 mail server: dovecot.
Restarting web server: apache2 … waiting ..
Restarting ftp server: Running:   /usr/sbin/pure-ftpd-mysql-virtualchroot -l   mysql:/etc/pure-ftpd/db/mysql.conf -l pam -b -E -p 4000:4020 -u 1000 -A   -O clf:/var/log/pure-ftpd/transfer.log -Y 1 -H -B
Installation completed.
server1:/tmp/ispconfig3_install/install#

Nachdem das alles durch gelaufen ist, kannst du dich bereits mit deinem Webbrowser im System anmelden unter http://server1.example.com:8080 oder http://192.168.178.84:8080

Der Benutzername und das Passwort sind jeweils admin.