Der Perfekte Server - Ubuntu Hardy Heron (Ubuntu 8.04 LTS Server)

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man einen Ubuntu Hardy Heron (Ubuntu 8.04 LTS) basierten Server aufsetzt, der alle Dienste bereitstellt, die von ISPs und Hostern benötigt werden: Apache Web Server (SSL-fähig), Postfix Mail Server mit SMTP-AUTH und TLS, BIND DNS Server, Proftpd FTP Server, MySQL Server, Courier POP3/IMAP, Quota, Firewall, etc. Diese Anleitung wurde für die 32-bit Version von Ubuntu 8.04 LTS verfasst, sollte aber auch mit geringfügigen Änderungen auch auf die 64-bit Version zutreffen.

Folgende Software werde ich verwenden:
  • Web Server: Apache 2.2 mit PHP 5.2.4 und Ruby
  • Database Server: MySQL 5.0
  • Mail Server: Postfix
  • DNS Server: BIND9
  • FTP Server: proftpd
  • POP3/IMAP: ich werde das Maildir Format verwenden und daher Courier-POP3/Courier-IMAP installieren.
  • Webalizer für Webseiten Statistiken
Am Ende solltest Du ein verlässliches System haben. Wenn Du magst, kannst Du zum Schluss das kostenlose Webhosting Control Panel ISPConfig installieren.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Voraussetzungen

Um ein solches System installieren zu können, benötigst Du Folgendes:

2 Vorbemerkung

In dieser Anleitung verwende ich den Hostnamen server1.example.com mit der IP Adresse 192.168.0.100 und dem Gateway 192.168.0.1. Diese Einstellungen werden bei Dir etwas anders aussehen, Du musst sie also an entsprechender Stelle ersetzen.

3 Das Basissystem

Lege Deine Ubuntu Installations-CD ein und starte mit der CD. Wähle Deine Sprache aus:


Wähle dann Install Ubuntu Server:


Wähle erneut Deine Sprache aus (?):


Wähle dann Deinen Standort:



Wähle ein Tastaturlayout (Du wirst gebeten ein paar Tasten zu drücken und der Installer versucht Dein Tastaturlayout zu erkennen):




Der Installer überprüft die Installations-CD, Deine Hardware und konfiguriert das Netzwerk mit DHCP, falls es einen DHCP Server im Netzwerk gibt:





Gib den Hostnamen ein. In diesem Beispiel heißt mein System server1.example.com, also gebe ich dies ein server1:


Nun musst Du die Festplatte partitionieren. Der Einfachheit halber erstelle ich eine große Partition (mit dem Mount Point /) und eine kleine Swap Partition, also wähle ich Guided - use entire disk (natürlich ist die Partitionierung ganz Dir überlassen - wenn Du magst, kannst Du mehr als nur eine große Partition erstellen, außerdem kannst Du auch LVM verwenden):


Wähle die Festplatte aus, die Du partitionieren möchtest:


Wenn Du damit fertig bist, drücke Yes wenn Du gefragt wirst Write the changes to disks?:


Danach werden Deine neuen Partitionen erstellt und formatiert.

Nun wird das Basissystem installiert:



Erstelle einen Benutzer, zum Beispiel den Benutzer Administrator mit dem Benutzernamen administrator (verwende nicht den Benutzernamen admin, da dieser bereits auf Ubuntu 8.04 reserviert ist):






Als Nächstes wird Package Manager apt konfiguriert. Lass die HTTP Proxy Zeile frei, es sei denn Du verwendest einen Proxy Server um Dich mit dem Internet zu verbinden:



Wir benötigen einen DNS, Mail und LAMP Server, jedoch wähle ich hier nicht einen dieser Server aus, da ich volle Kontrolle darüber haben möchte, was auf meinem System installiert wird. Wir werden die benötigten Pakete später manuell installieren. Das einzige, was ich hier auswähle, ist der OpenSSH server, damit ich mich sofort mit dem System via SSH Client wie zum Beispiel PuTTY verbinden kann, wenn die Installation abgeschlossen ist:


Die Installation geht weiter:


Der GRUB Boot Loader wird installiert:


Die Installation des Basissystems ist nun abgeschlossen. Entferne die Installations-CD aus dem CD-Laufwerk und drücke Continue um das System neu zu starten:


Weiter mit dem nächsten Schritt...

4 Das Root-Konto aktivieren

Nach dem Neustart kannst Du Dich mit Deinem zuvor angelegten Benutzernamen anmelden (z.B. administrator). Da wir alle Schritte dieser Anleitung als Root-Benutzer durchführen müssen, müssen wir das Root-Konto nun aktivieren.

Führe dies aus

sudo passwd root

und weise Root ein Passwort zu. Danach werden wir Root indem wir dies ausführen

su


5 Installation des SSH Servers (optional)

Wenn Du den OpenSSH Server nicht während der Installation des Basissystems installiert hast, kannst Du dies jetzt tun:

apt-get install ssh openssh-server

Von nun an kannst Du einen SSH Client wie PuTTY verwenden, Dich von Deinem Arbeitsplatz aus mit Deinem Ubuntu 8.04 LTS Server verbinden und den verbleibenden Schritten dieser Anleitung folgen.

6 Installation von vim-full (optional)

Ich werde vi als meinen Text Editor in dieser Anleitung verwenden. Das Standard vi Programm hat auf Ubuntu und Debian ein seltsames Verhalten; um dies zu beheben, installieren wir vim-full:

apt-get install vim-full

(Wenn Du einen anderen Text Editor wie zum Beispiel nano verwendest, musst Du dies nicht tun.)

7 Konfiguration des Netzwerkes

Da der Ubuntu Installer unser System so konfiguriert hat, dass es seine Netzwerkeinstellungen via DHCP bezieht, müssen wir dies nun ändern, da ein Server eine statische IP Adresse haben sollte. Bearbeite /etc/network/interfaces und passe es an Deine Vorstellungen an (in diesem Setup verwende ich die IP Adresse 192.168.0.100):

vi /etc/network/interfaces


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
Starte Dein Netzwerk dann neu:

/etc/init.d/networking restart

Bearbeite dann /etc/hosts. So soll es aussehen:

vi /etc/hosts


127.0.0.1       localhost.localdomain   localhost
192.168.0.100 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 ff02::3 ip6-allhosts
Führe nun dies aus

echo server1.example.com > /etc/hostname
/etc/init.d/hostname.sh start

Führe danach Folgendes aus

hostname
hostname -f

Beides sollte jetzt server1.example.com anzeigen.

8 Bearbeite /etc/apt/sources.list und aktualisiere Deine Linux Installation

Bearbeite /etc/apt/sources.list. Kommentiere die Installations-CD aus oder entferne sie aus der Datei und vergewissere Dich, dass die universe und multiverse Paketdatenbank aktiviert ist. So sollte es aussehen:

vi /etc/apt/sources.list


#
# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted #deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted ## Major bug fix updates produced after the final release of the ## distribution. deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## universe WILL NOT receive any review or updates from the Ubuntu security ## team. deb http://de.archive.ubuntu.com/ubuntu/ hardy universe deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## multiverse WILL NOT receive any review or updates from the Ubuntu ## security team. deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse ## Uncomment the following two lines to add software from the 'backports' ## repository. ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. # deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse # deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse ## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. This software is not part of Ubuntu, but is ## offered by Canonical and the respective vendors as a service to Ubuntu ## users. # deb http://archive.canonical.com/ubuntu hardy partner # deb-src http://archive.canonical.com/ubuntu hardy partner deb http://security.ubuntu.com/ubuntu hardy-security main restricted deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted deb http://security.ubuntu.com/ubuntu hardy-security universe deb-src http://security.ubuntu.com/ubuntu hardy-security universe deb http://security.ubuntu.com/ubuntu hardy-security multiverse deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse
Führe dann dies aus

apt-get update

um die apt Paketdatenbank zu aktualisieren und

apt-get upgrade

die neusten Updates zu installieren (falls welche verfügbar sind).

9 Die Standard-Kommandozeile ändern

/bin/sh ist ein Symlink zu /bin/dash, wir brauchen jedoch /bin/bash und nicht /bin/dash. Daher führen wir dies aus:

ln -sf /bin/bash /bin/sh

Wenn Du dies nicht tust, wird die ISPConfig Installation fehlschlagen.

10 AppArmor deaktivieren

AppArmor ist eine Sicherheitserweiterung (ähnlich wie SELinux), die eine erweiterte Sicherheit bieten soll. Meiner Meinung nach braucht man ein bereits sicheres System nicht mehr konfigurieren. Für gewöhnlich verursacht dies mehr Probleme als dass es Vorteile verschafft. Daher deaktiviere ich es (das ist ein MUSS wenn Du ISPConfig später installieren möchtest).

So können wir es deaktivieren:

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

11 Installation einiger Software-Pakete

Nun installieren wir einige Pakete, die wir später noch brauchen werden. Führe Folgendes aus

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential

(Dieser Befehl muss in einer Zeile stehen!)

12 Quota

(Wenn Du ein anderes Partitionsmuster als ich gewählt hast, musst Du dieses Kapitel anpassen, damit Quota auf die Partitionen passt, wo Du es benötigst.)

Um Quota zu installieren, führe dies aus

apt-get install quota

Bearbeite /etc/fstab. Meine sieht wie folgt aus (ich habe ,usrquota,grpquota der Partition mit dem Mount Point / hinzugefügt):

vi /etc/fstab


# /etc/fstab: static file system information.
# # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # /dev/sda1 UUID=6af53069-0d51-49be-b275-aeaea8d780c5 / ext3 relatime,errors=remount-ro,usrquota,grpquota 0 1 # /dev/sda5 UUID=d8e1f66c-1442-423e-b442-8ae66eded9d7 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
Um Quota zu aktivieren, führe diese Befehle aus:

touch /quota.user /quota.group
chmod 600 /quota.*
mount -o remount /

quotacheck -avugm
quotaon -avug

13 DNS Server

Führe Folgendes aus

apt-get install bind9

Aus Sicherheitsgründen möchten wir, dass BIND gechrooted ausgeführt wird, also müssen wir folgende Schritte unternehmen:

/etc/init.d/bind9 stop

Bearbeite die Datei /etc/default/bind9 so dass der Daemon als unprivilegierter Benutzer bind ausgeführt wird, gechrooted in /var/lib/named. Modifziere die Zeile: OPTIONS="-u bind" so dass es heißt OPTIONS="-u bind -t /var/lib/named":

vi /etc/default/bind9


OPTIONS="-u bind -t /var/lib/named"
# Set RESOLVCONF=no to not run resolvconf RESOLVCONF=yes
Erstelle die notwendigen Verzeichnisse unter /var/lib:

mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run

Verschiebe dann das config Verzeichnis von /etc nach /var/lib/named/etc:

mv /etc/bind /var/lib/named/etc

Erstelle einen Symlink zum neuen config Verzeichnis vom alten Ort aus (um Probleme zu verhindern, wenn Bind in Zukunft aktualisiert wird):

ln -s /var/lib/named/etc/bind /etc/bind

Erstelle Null und Random Geräte und ändere die Berechtigungen der Verzeichnisse:

mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind

Wir müssen /etc/default/syslogd modifizieren, damit wichtige Mitteilungen immer noch in den System Logs geloggt werden. Modifiziere die Zeile: SYSLOGD="" so dass es heißt: SYSLOGD="-a /var/lib/named/dev/log":

vi /etc/default/syslogd


#
# Top configuration file for syslogd # # # Full documentation of possible arguments are found in the manpage # syslogd(8). # # # For remote UDP logging use SYSLOGD="-r" # SYSLOGD="-a /var/lib/named/dev/log"
Starte den Logging Daemon neu:

/etc/init.d/sysklogd restart

Starte BIND und überprüfe /var/log/syslog nach Fehlern:

/etc/init.d/bind9 start


14 MySQL

Um MySQL zu installieren, führen wir dies aus

apt-get install mysql-server mysql-client libmysqlclient15-dev

Du wirst gebeten ein Passwort für den MySQL Root-Benutzer anzugeben - dieses Passwort gilt sowie für den Benutzer root@localhost als auch für root@server1.example.com, also müssen wir später kein MySQL Root Passwort manuell definieren (wie es bei früheren Ubuntu Versionen der Fall war):

New password for the MySQL "root" user: <-- deinrootsqlpasswort
Repeat password for the MySQL "root" user: <-- deinrootsqlpasswort

Wir möchten, dass MySQL auf allen Oberflächen hört, nicht nur Localhost. Daher bearbeiten wir /etc/mysql/my.cnf und kommentieren die Zeile bind-address = 127.0.0.1 aus:

vi /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 [...]
Dann starten wir MySQL neu:

/etc/init.d/mysql restart

Überprüfe nun, ob der Netzwerkbetrieb aktiviert ist. Führe dies aus

netstat -tap | grep mysql

Die Asugabe sollte wie folgt aussehen:

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

15 Postfix mit SMTP-AUTH und TLS

Um Postfix mit SMTP-AUTH und TLS zu installieren, führe folgende Schritte aus:

apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules procmail

Zwei Fragen werden Dir gestellt. Antworte wie folgt:

General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com

Führe dann dies aus

dpkg-reconfigure postfix

Wieder werden Dir einige Fragen gestellt:

General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com
Root and postmaster mail recipient: <-- [blank]
Other destinations to accept mail for (blank for none): <-- server1.example.com, localhost.example.com, localhost.localdomain, localhost
Force synchronous updates on mail queue? <-- No
Local networks: <-- 127.0.0.0/8
Use procmail for local delivery? <-- Yes
Mailbox size limit (bytes): <-- 0
Local address extension character: <-- +
Internet protocols to use: <-- all

Führe als Nächste dies aus:

postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf

Danach erstellen wir die Zertifikate für TLS:

mkdir /etc/postfix/ssl
cd /etc/postfix/ssl/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr

openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt

openssl rsa -in smtpd.key -out smtpd.key.unencrypted


mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Als Nächstes konfigurieren wir Postfix für TLS (pass auf, dass Du den richtigen Hostnamen für myhostname  verwendest):

postconf -e 'myhostname = server1.example.com'


postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'

Die Datei /etc/postfix/main.cf sollte nun wie folgt aussehen:

cat /etc/postfix/main.cf


# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key smtpd_use_tls = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = server1.example.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = server1.example.com, localhost.example.com, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_authenticated_header = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtpd_tls_auth_only = no smtp_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom
Die Authentifizierung übernimmt saslauthd. Wir müssen ein paar Dinge ändern, damit es richtig funktioniert. Da Postfix in  /var/spool/postfix  gechrooted ausgeführt wird, müssen wir Folgendes ausführen:

mkdir -p /var/spool/postfix/var/run/saslauthd

Nun müssen wir /etc/default/saslauthd bearbeiten um saslauthd zu aktivieren. Setze START to yes und ändere die Zeile OPTIONS="-c -m /var/run/saslauthd" zu OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r":

vi /etc/default/saslauthd


#
# Settings for saslauthd daemon # Please read /usr/share/doc/sasl2-bin/README.Debian for details. # # Should saslauthd run automatically on startup? (default: no) START=yes # Description of this saslauthd instance. Recommended. # (suggestion: SASL Authentication Daemon) DESC="SASL Authentication Daemon" # Short name of this saslauthd instance. Strongly recommended. # (suggestion: saslauthd) NAME="saslauthd" # Which authentication mechanisms should saslauthd use? (default: pam) # # Available options in this Debian package: # getpwent -- use the getpwent() library function # kerberos5 -- use Kerberos 5 # pam -- use PAM # rimap -- use a remote IMAP server # shadow -- use the local shadow password file # sasldb -- use the local sasldb database file # ldap -- use LDAP (configuration is in /etc/saslauthd.conf) # # Only one option may be used at a time. See the saslauthd man page # for more information. # # Example: MECHANISMS="pam" MECHANISMS="pam" # Additional options for this mechanism. (default: none) # See the saslauthd man page for information about mech-specific options. MECH_OPTIONS="" # How many saslauthd processes should we run? (default: 5) # A value of 0 will fork a new process for each connection. THREADS=5 # Other options (default: -c -m /var/run/saslauthd) # Note: You MUST specify the -m option or saslauthd won't run! # # See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information. # See the saslauthd man page for general information about these options. # # Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Füge als Nächstes den postfix Benutzer der sasl Gruppe hinzu (damit wird sicher gestellt, dass Postfix die Berechtigung hat, auf saslauthd zuzugreifen):

adduser postfix sasl

Starte Postfix jetzt neu und starte saslauthd:

/etc/init.d/postfix restart
/etc/init.d/saslauthd start

Um herauszufinden, ob SMTP-AUTH und TLS richtig funktionieren, führe nun folgenden Befehl aus:

telnet localhost 25

Nachdem Du die Verbindung zu Deinem Postfix Mail Server aufgebaut hast, tippe

ehlo localhost

Wenn Du die Zeile

250-STARTTLS

und

250-AUTH LOGIN PLAIN

siehst, ist alles in Ordnung.

Die Ausgabe auf meinem System sieht wie folgt aus:

root@server1:/etc/postfix/ssl# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
root@server1:/etc/postfix/ssl#

Tippe

quit

um zur Kommandozeile des Systems zurückzukehren.

16 Courier-IMAP/Courier-POP3

Führe dies aus um Courier-IMAP/Courier-IMAP-SSL (für IMAPs auf Port 993) und Courier-POP3/Courier-POP3-SSL (für POP3s auf Port 995) zu installieren:

apt-get install courier-authdaemon courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl courier-ssl gamin libgamin0 libglib2.0-0

Zwei Fragen werden Dir gestellt:

Create directories for web-based administration? <-- No
SSL certificate required <-- Ok

Wenn Du ISPConfig nicht verwenden möchtest, konfiguriere Postfix so, dass E-Mails an eine Maildir* des Benutzers geschickt werden:

postconf -e 'home_mailbox = Maildir/'
postconf -e 'mailbox_command ='
/etc/init.d/postfix restart

* Bitte beachte: Wenn Du vorhast ISPConfig auf Deinem System zu installieren, musst Du dies nicht tun, da ISPConfig die notwendige Konfiguration vornimmt indem es Procmail Recipes verwendet. Aber bitte vergewissere Dich, dass Du Maildir unter Management -> Server -> Settings -> EMail im ISPConfig Web Interface aktivierst.

17 Apache/PHP5/Ruby

Nun installieren wir Apache:

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

Als Nächstes installieren wir PHP5 und Ruby (beide als Apache Modul):

apt-get install libapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Als Nächstes bearbeiten wir /etc/apache2/mods-available/dir.conf:

vi /etc/apache2/mods-available/dir.conf

und ändern die DirectoryIndex Zeile:
<IfModule mod_dir.c>
#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl index.xhtml </IfModule>
Nun müssen wir einige Apache Module aktivieren (SSL, rewrite, suexec und include):

a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include

Lade die Apache Konfiguration neu:

/etc/init.d/apache2 force-reload

Im nächsten Kapitel (17.1) werden wir PHP (das ist notwendig, wenn Du ISPConfig auf diesem Server installieren möchtest) deaktivieren. Anders als PHP, ist Ruby standardmäßig deaktiviert, daher müssen wir es nicht tun.

17.1 PHP global deaktivieren

(Wenn Du nicht vorhast ISPConfig auf diesem Server zu installieren, dann überspringe bitte dieses Kapitel!)

In ISPConfig wirst Du PHP pro Web Site konfigurieren, d.h. Du kannst festlegen, welche Web Site PHP Skripte ausführen kann und welche nicht. Das funktioniert nur, wenn PHP global deaktiviert ist, da sonst alle Web Sites in der Lage wären, PHP Skripte auszuführen, egal was Du in ISPConfig festlegst.

Um PHP global zu deaktivieren, bearbeiten wir/etc/mime.types und kommentieren die application/x-httpd-php Zeilen aus:

vi /etc/mime.types


[...]
#application/x-httpd-php phtml pht php #application/x-httpd-php-source phps #application/x-httpd-php3 php3 #application/x-httpd-php3-preprocessed php3p #application/x-httpd-php4 php4 [...]
Bearbeite /etc/apache2/mods-enabled/php5.conf und kommentiere folgende Zeilen aus:

vi /etc/apache2/mods-enabled/php5.conf


<IfModule mod_php5.c>
#AddType application/x-httpd-php .php .phtml .php3 #AddType application/x-httpd-php-source .phps </IfModule>
Starte Apache dann neu:

/etc/init.d/apache2 restart


18 Proftpd

Um Proftpd zu installieren, führe dies aus

apt-get install proftpd ucf

Dir wird eine Frage gestellt:

Run proftpd: <-- standalone

Füge aus Sicherheitsgründen folgende Zeilen /etc/proftpd/proftpd.conf hinzu (Dank an Reinaldo Carvalho; nähere Informationen findest Du hier: http://proftpd.org/localsite/Userguide/linked/userguide.html):

vi /etc/proftpd/proftpd.conf


[...]
DefaultRoot ~ IdentLookups off ServerIdent on "FTP Server ready." [...]
ISPConfig erwartet, dass sich die Konfiguration in /etc/proftpd.conf anstelle von /etc/proftpd/proftpd.conf befindet, daher erstellen wir einen Symlink (Du kannst diesen Befehl auslassen,wenn Du ISPConfig nicht installieren möchtest):

ln -s /etc/proftpd/proftpd.conf /etc/proftpd.conf

Starte Proftpd dann neu:

/etc/init.d/proftpd restart


19 Webalizer

Um  webalizer zu installieren, führe dies aus

apt-get install webalizer


20 Synchronisation der System-Uhr

Es ist keine schlechte Idee die System-Uhr mit einem NTP (network time protocol) Server via Internet zu synchronisieren. Führe einfach dies aus

apt-get install ntp ntpdate

und Deine Systemzeit wird immer synchron sein.

21 Installation einiger Perl Module, die von SpamAssassin (in ISPConfig) benötigt werden

Führe dies aus

apt-get install libhtml-parser-perl libdb-file-lock-perl libnet-dns-perl


22 ISPConfig

Die Konfiguration des Servers ist nun abgeschlossen. Wenn Du magst, kannst Du nun ISPConfig auf dem Server installieren. Bitte sieh Dir dazu das ISPConfig Installationsmanual an: http://www.ispconfig.org/manual_installation.htm

22.1 Eine Notiz über SuExec

Wenn Du CGI Skripte unter suExec ausführen möchtest, solltest Du /var/www als den Web Root für Webseiten festlegen, die von ISPConfig erstellt werden, da Ubuntus suExec mit /var/www  als Doc_Root erstellt wird. Führe dies aus

/usr/lib/apache2/suexec -V

und die Ausgabe sollte wie folgt aussehen:

root@server1:~# /usr/lib/apache2/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="www-data"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=100
-D AP_USERDIR_SUFFIX="public_html"
root@server1:~#

Wenn Du also suExec mit ISPconfig verwenden möchtest, ändere nicht den Standard Web Root (/var/www) wenn Du den Expertenmodus während der ISPConfig Installation verwendest (im Standardmodus kannst Du den Web Root sowieso nicht ändern, also kannst Du suExec in jedem Fall verwenden).

23 Links