Der Perfekte Server - Mandriva 2008 Free (Mandriva 2008.0)

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht wie man einen Mandriva 2008 Free (Mandriva 2008.0) Server einrichtet, der alle Dienste bietet, die von ISPs und Hosters 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 Mandriva 2008 verfasst, sollte aber mit kleinen Abweichungen auch auf die 64-bit Version passen.

Folgende Software werde ich verwenden:
  • Web Server: Apache 2
  • Mail Server: Postfix
  • DNS Server: BIND9
  • FTP Server: proftpd
  • POP3/IMAP server
  • Webalizer für Web Site Statistiken
Im Endeffekt erhältst Du ein System, das zuvelässig arbeitet und für das kostenlose Webhosting Control Panel ISPConfig einsatzbereit ist.

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 Vorbemerkung

In diesem Beispiel verwende ich folgende Einstellungen für mein System:
  • IP Adresse: 192.168.0.100, Gateway: 192.168.0.1
  • Hostname: server1.example.com
Deine Einstellungen werden höchstwahrscheinlich von meinen abweichen, Du wirst also die Instruktionen dieser Anleitung anpasen.

2 Voraussetzungen

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

3 Das Basissystem

Starte von Deiner Mandriva 2008 Free DVD. Wähle "Install Mandriva Linux 2008 on your system" und drücke Enter:


Wähle als Nächstes eine Sprache:


Stimme der Lizenzbestimmung zu und klicke auf "Next":


Nun müssen wir unsere Festplatte partitionieren. Du kannst die Partitionierung entweder selbst vornehmen oder sie vom Mandriva Installer vornehmen lassen. Ich möchte eine kleine /boot Partition (ungefähr 150 MB) mit dem Dateisystem ext3, eine Swap Partition und eine große / Partition (wieder mit ext3) erstellen:









Danach werden die neuen Partitionen formatiert:


Klicke auf dem folgenden Bildschirm auf "Next":


Wir möchten keinen Desktop auf dem Server System haben, daher wählen wir auf diesem Bildschirm "Custom install":


Nun wählen wir die Paketgruppen aus, die wir installieren möchten. Wähle "Internet station", "Network Computer (client)", "Configuration", "Console Tools", "Development", "Web/FTP", "Mail", "Database", "Firewall/Router" und "Network Computer server", entferne die Markierungen der anderen Paketgruppen und klicke auf "Next":



Der Paket-Installation beginnt:


Richte danach ein Root Passwort ein und lege ein weiteres Benutzerkonto an (z.B. Administrator) und klicke auf "Next":


Nun zeigt uns der Installer eine Zusammenfassung der Installation an und bietet uns die Möglichkeit, Einstellungen zu ändern indem wir auf das entsprechende "Configure"-Feld klicken. Zuerst passen wir unser Tastaturlayout an (falls Du keine US Tastatur hast...):



Klicke auf "More" um eine Liste aller verfügbarer Tastaturlayouts zu erhalten. Wähle dann das entsprechende Layout aus und klicke auf "Next":


Als Nächstes konfigurieren wir die Zeitzone, in der wir uns befinden:


Wähle auf dem nächsten Bildschirm "hardware clock set to UTC", "Automatic time synchronization (using NTP)" und für den NTP Server "All servers":


Nun ändern wir das Security Level:


Wähle "Standard" als Security Level (alle anderen Security Levels sind zu restriktiv) und lass das Feld "Security Administrator" frei:


Als Nächstes bearbeiten wir die Firewall Einstellungen:


ISPConfig hat seine eigene Firewall. Wenn Du also ISPConfig installieren möchtest, wähle "Everything (no firewall)" um die Firewall zu deaktivieren. Anderenfalls konfiguriere die Firewalls wie Du möchtest:


Klicke auf "Next":


Letztendlich ändern wir unsere Netzwerkeinstellungen. Klicke auf das "Configure"-Feld neben "Network - ethernet":


Wähle "Ethernet" insofern Du nicht etwas anderes verwendest:



Wähle das Netzwerk Interface, das Du konfigurieren möchtest:


Wir möchten unserem Netzwerk Interface eine statische IP Adresse zuweisen (denke daran, dass wir einen Server installieren...), also möchten wir keine IP Adresse beziehen indem wir BOOTP oder DHCP verwenden. Daher wählen wir "Manual configuration":


Gib nun die IP Adresse, die Netzmaske und das Gateway ein, sowie den Hostnamen (z.B. server1.example.com) und bis zu zwei DNS Server (z.B. 213.191.92.86 und 145.253.2.75):


Erlaube den Benutzern nicht die Verbindung zu starten sondern markiere "Start the connection at boot". Es ist ein Server und Server sind immer online (zumindest sollten sie das sein...):


Wähle "Yes" um die Netzwerkverbindung jetzt zu starten:



Nun haben wir alle notwendigen Konfigurationen vorgenommen, also können wir die Zusammenfassung verlassen indem wir auf "Next" klicken:


Nun kannst Du die neusten Updates runter laden. Bitte beachte: dies ist optional. Wir werden einen Cron Job anlegen, der unser System automatisch aktualisiert, also kannst Du hier "No" wählen:


Die Basisinstallation ist nun abgeschlossen. Du kannst die CD nun entfernen und das System neu starten:


Nun weiter mit der Systemkonfiguration...

4 Anpassen von /etc/hosts

Als Nächstes bearbeiten wir /etc/hosts damit es wie folgt aussieht:

vi /etc/hosts


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

5 Den Hostnamen einrichten

(Dieser Schritt ist optional.)

Dies ist nicht notwendig, wenn Du den richtigen Hostnamen während der Installation eingerichtet hast. Den derzeitigen Hostnamen kannst Du mit folgenden Befehlen überprüfen

hostname
hostname -f

Beide Befehle sollten "server1.example.com" anzeigen.

Falls die Ausgabe einen falschen Hostnamen anzeigt, kannst Du den richtigen wie folgt einrichten:

echo server1.example.com > /etc/hostname
/bin/hostname -F /etc/hostname

6 Konfiguration von urpmi

Du kannst den wizard auf http://easyurpmi.zarb.org/ verwenden, um herauszufinden, wie man urpmi konfiguriert, sodass urpmi online Paketdatenbanken verwendet:




Bei mir hat der wizard diese Befehle angezeigt, die ich in der Kommandozeile ausführe:

urpmi.addmedia contrib ftp://fr2.rpmfind.net/linux/Mandrakelinux/official/2008.0/i586/media/contrib/release with media_info/hdlist.cz

urpmi.addmedia --update contrib_updates ftp://carroll.cac.psu.edu/pub/linux/distributions/mandrivalinux/official/2008.0/i586/media/contrib/updates with media_info/hdlist.cz

urpmi.addmedia main ftp://fr2.rpmfind.net/linux/Mandrakelinux/official/2008.0/i586/media/main/release with media_info/hdlist.cz

urpmi.addmedia --update main_updates ftp://carroll.cac.psu.edu/pub/linux/distributions/mandrivalinux/official/2008.0/i586/media/main/updates with media_info/hdlist.cz

Um die Mandriva 2008 DVD als eine Paketdatenbank zu deaktivieren, führen wir Folgendes aus

urpmi.removemedia "Mandriva Linux - 2008.0 (Free) - Installer"
urpmi.removemedia "Mandriva Linux - 2008.0 (Free) - Installer (contrib)"

(Das ist besonders nützlich, wenn Dein Server an einem entfernten Ort sein wird und Du die DVD nicht einlegen kannst.)

Nun erstellen wir ein Skript /etc/cron.daily/software_update, das von Cron automatisch jeden Tag ausgeführt wird und nach den neusten Software Updates sucht und diese auf Deinem Mandriva 2008 System installiert. Das Skript sieht wie folgt aus:

vi /etc/cron.daily/software_update


#!/bin/bash
urpmi.update updates urpmi --auto --update --auto-select
So wird das Skript ausführbar:

chmod 755 /etc/cron.daily/software_update


7 Installation einiger Software-Pakete:

Nun installieren wir ein paar Pakete, die wir später noch brauchen werden:

urpmi fetchmail wget bzip2 unzip zip nmap openssl lynx fileutils ncftp flex libxorg-x11-devel gcc gcc-c++


8 Quota

Um das Quota-Paket zu installieren, führe Folgendes aus

urpmi quota

Bearbeite /etc/fstab sodass es wie folgt aussieht (ich habe ,usrquota,grpquota der Partition mit dem mount point / hinzugefügt):

vi /etc/fstab


/dev/hda6 / ext3 relatime,usrquota,grpquota 1 1
/dev/hda1 /boot ext3 relatime 1 2 /dev/cdrom /media/cdrom auto umask=0022,users,iocharset=utf8,noauto,ro,exec 0 0 /dev/fd0 /media/floppy auto umask=0022,users,iocharset=utf8,noauto,exec,flush 0 0 none /proc proc defaults 0 0 /dev/hda5 swap swap defaults 0 0
Führe dann dies aus:

touch /aquota.user /aquota.group
chmod 600 /aquota.*
mount -o remount /
quotacheck -avugm
quotaon -avug

9 DNS Server

Um den BIND DNS Server zu installieren, führe dies aus:

urpmi bind

Mandriva 2008's BIND läuft standardmäßig chrooted, daher müssen wir ein paar Symlinks erstellen, sodass ISPConfig (falls Du es installieren möchtest) damit umgehen kann:

cd /var/lib/named/var
mkdir -p lib/named/var
cd lib/named/var
ln -s ../../../named/ named
ln -s ../../../run/ run
cp /var/lib/named/var/named/reverse/named.local /var/lib/named/var/named/

Starte dann BIND:

/etc/init.d/named start


10 MySQL (5.0)

Um MySQL 5.0 zu installieren, führen wir einfach Folgendes aus:

urpmi MySQL MySQL-client libmysql15-devel

Im MySQL Paket von Mandriva 2008 ist der Netzwerkbetrieb standardmüßig nicht aktiviert, jedoch braucht ISPConfig den Netzwerkbetrieb. Wir können dies ändern, indem wir die Zeile skip-networking in /etc/my.cnf auskommentieren:

vi /etc/my.cnf


[...]
# Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking [...]
Danach starten wir MySQL:

/etc/init.d/mysqld start

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

netstat -tap | grep mysql

Die Ausgabe sollte wie folgt aussehen:

[root@server1 var]# netstat -tap | grep mysql
tcp 0 0 *:mysql-im *:* LISTEN 5697/mysqlmanager
tcp 0 0 *:mysql *:* LISTEN 5705/mysqld

Führe als Nächstes dies aus

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

um ein Passwort für den Benutzer Root anzulegen (sonst kann jeder auf Deine MySQL Datenbank zugreifen!).

11 Postfix mit SMTP-AUTH und TLS

Installiere die benötigten Pakete (Postfix, cyrus-sasl, imap, etc.) wie folgt:

urpmi cyrus-sasl libsasl2 libsasl2-devel libsasl2-plug-plain libsasl2-plug-anonymous libsasl2-plug-crammd5 libsasl2-plug-digestmd5 libsasl2-plug-gssapi libsasl2-plug-login postfix imap

Führe dann Folgendes aus (vergewissere Dich, dass Du die richtigen Werte für mydomain, myhostname und mydestination verwendest):

postconf -e 'mydomain = example.com'
postconf -e 'myhostname = server1.$mydomain'
postconf -e 'mydestination = /etc/postfix/local-host-names, localhost.example.com'
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_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8'
touch /etc/postfix/local-host-names
touch /var/lib/mailman/data/aliases

Bearbeite /etc/sasl2/smtpd.conf. So sollte es aussehen:

vi /etc/sasl2/smtpd.conf


# SASL library configuration file for postfix
# all parameters are documented into: # /usr/share/doc/cyrus-sasl/options.html # The mech_list parameters list the sasl mechanisms to use, # default being all mechs found. mech_list: plain login # To authenticate using the separate saslauthd daemon, (e.g. for # system or ldap users). Also see /etc/sysconfig/saslauthd. pwcheck_method: saslauthd saslauthd_path: /var/lib/sasl2/mux # To authenticate against users stored in sasldb. #pwcheck_method: auxprop #auxprop_plugin: sasldb #sasldb_path: /var/lib/sasl2/sasl.db
Erstelle das SSL Zertifikat, das TLS benötigt:

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

und konfiguriere Postfix für TLS:

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'

Starte nun Postfix, saslauthd, imap und pop3:

chkconfig imap on
chkconfig imaps on
chkconfig ipop3 on
chkconfig pop3s on
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
/etc/init.d/xinetd restart

Um zu überprüfen, ob SMTP-AUTH und TLS richtig funktionieren, führen folgenden Befehl aus:

telnet localhost 25

Nachdem Du die Verbindung zu Deinem Postfix Mail Server eingerichtet hast, gib dies ein

ehlo localhost

Wenn Du die Zeile

250-STARTTLS

und

250-AUTH PLAIN LOGIN

siehst, ist alles in Ordnung:

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

Gib Folgendes ein

quit

um zur Kommandozeile des Systems zurückzukehren.

12 Apache2 mit PHP5

Um Apache2 und PHP5 zu installieren, führe folgenden Befehl aus (in einer Zeile):

urpmi apache-mod_suexec apache-mod_ssl apache-mod_php libphp5_common5 php-bz2 php-calendar php-ctype php-curl php-devel php-dio php-dom php-eaccelerator php-enchant php-esmtp php-event php-exif php-fam php-ffmpeg php-fileinfo php-filepro php-ftp php-gd php-gettext php-gmp php-iconv php-id3 php-idn php-imap php-imlib2 php-mailparse php-mbstring php-mcache php-mcrypt php-mhash php-ming php-mysql php-mysqli php-ncurses php-newt php-odbc php-oggvorbis php-pam_auth php-pcntl php-pcre php-pear-Net_IDNA php-posix php-pspell php-readline php-recode php-session php-shmop php-simplexml php-snmp php-soap php-sockets php-sqlite php-ssh2 php-suhosin php-sysvmsg php-sysvsem php-sysvshm php-tclink php-tcpwrap php-tidy php-xml php-xmlrpc php-zip php-ini curl libcurl4-devel perl-libwww-perl ImageMagick

Starte Apache:

/etc/init.d/httpd restart


12.1 PHP global deaktivieren

(Falls Du nicht vorhast, ISPConfig auf diesem Server zu installieren, überspringe bitte diesen Abschnitt!)

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.

Bearbeite /etc/httpd/modules.d/70_mod_php.conf und kommentiere die Zeile AddType aus:

vi /etc/httpd/modules.d/70_mod_php.conf


<IfDefine HAVE_PHP5>
<IfModule !mod_php5.c> LoadModule php5_module extramodules/mod_php5.so </IfModule> </IfDefine> <IfModule mod_mime.c> # AddType application/x-httpd-php .php # AddType application/x-httpd-php .phtml # AddType application/x-httpd-php-source .phps </IfModule> <IfModule mod_php5.c> <IfModule mod_dir.c> DirectoryIndex index.php index.phtml </IfModule> </IfModule>
Bearbeite /etc/httpd/conf/httpd.conf und füge folgende Zeile dem LoadModule Abschnitt hinzu:

vi /etc/httpd/conf/httpd.conf


[...]
LoadModule php5_module extramodules/mod_php5.so [...]
(Obwohl diese Zeile bereits in /etc/httpd/modules.d/70_mod_php.conf vorhanden ist, ist dies sehr wichtig, da sonst der Befehl

httpd -t

Fehler anstelle von Syntax OK anzeigen wird, wenn die virtuellen Hosts, die von ISPConfig erstellt werden, Zeile wie php_admin_flag safe_mode On oder ähnliche enthalten!)

Starte Apache neu:

/etc/init.d/httpd restart


13 Proftpd

Installiere Proftpd wie folgt:

urpmi proftpd

Aus Sicherheitsgründen kannst Du folgende Zeilen /etc/proftpd.conf hinzufügen (dank Reinaldo Carvalho; mehr Informationen findest Du hier: http://www.proftpd.org/localsite/Userguide/linked/userguide.html):

vi /etc/proftpd.conf


[...]
DefaultRoot ~ IdentLookups off ServerIdent on "FTP Server ready." [...]
Pass auf, dass Du die folgenden Zeilen am Ende von /etc/proftpd.conf auskommentierst, um ftp Benutzern CHMOD zu erlauben:
[...]
# Bar use of SITE CHMOD by default #<Limit SITE_CHMOD> # DenyAll #</Limit>
Starte dann Proftpd neu:

/etc/init.d/proftpd restart


14 Webalizer

Mandriva 2008 hat kein Webalizer Paket mehr. Daher installieren wir das statische Webalizer Binär-Paket von der Webalizer Web Site wie folgt:

urpmi libgeoip1 geoip libgeoipupdate0 awffull

cd /tmp
wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.01-10-static.gz
gunzip webalizer-2.01-10-static.gz
mv webalizer-2.01-10-static /usr/bin/webalizer
chmod 755 /usr/bin/webalizer

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

Um alle benötigten Perl Module zu installieren, können wir die entsprechenden Mandriva Pakete verwenden und sie mit Hilfe von urpmi installieren:

urpmi perl-HTML-Parser perl-Digest-SHA1 perl-DB_File perl-Net-DNS


16 Das End

Die Konfiguration des Servers ist nun ageschlossen. Wenn Du magst, kannst Du nun ISPConfig auf dem Server installieren.

17 Eine Notiz über SuExec

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

/usr/sbin/suexec -V

und die Ausgabe sollte wie folgt aussehen:

[root@server1 ~]# /usr/sbin/suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec_log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_SUEXEC_UMASK=077
-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).

18 Links