Installation eines LAMP Systems mit Fedora Core 6

Version 1.1
Author: Falko Timme


Diese Anleitung veranschaulicht Schritt für Schritt, wie man einen Fedora Core 6 basierten Server einrichtet, 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, DNS Server, FTP Server, MySQL Server, POP3/IMAP, Quota, Firewall, etc. Diese Anleitung wurde für die 32-bit Version von Fedora Core 6 geschrieben, sollte aber mir nur geringen Änderungen auch auf die 64-bit Version passen.

Folgende Software werde ich verwenden:
  • Web Server: Apache 2.2.3
  • Database Server: MySQL 5.0.22
  • Mail Server: Postfix
  • DNS Server: BIND9 (chrooted)
  • FTP Server: proftpd
  • POP3/IMAP server: dovecot
  • Webalizer für Webseiten Statistiken
Am Ende erhältst Du ein System, das verlässlich arbeitet. Wenn Du magst, kannst Du 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!

Voraussetzungen

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

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. Bei Dir werden die Einstellungen etwas anders aussehen, Du musst sie also an entsprechender Stelle ersetzen.

1 Installation des Basissystems

Starte mit Deiner Fedora Core 6 DVD oder CD (CD 1).


Es kann recht lang dauern, das Installationsmedium zu überprüfen. also überspringen wir diesen Test hier:


Der Willkommens-Screen des Fedora Installers erscheint. Klicke auf Next:


Wähle als Nächstes Deine Sprache aus:


Wähle Dein Tastaturlayout aus:


Ich installiere Fedora Core 6 auf einem frisch aufgesetzten System, also antworte ich mit  Yes auf die Frage Would you like to initialize this drive, erasing ALL DATA?


Als Nächstes nehmen wir die Partitionierung vor. Wähle Remove linux partitions on selected drives and create default layout. Damit wird eine kleine  /boot Partition und eine große / Partition erstellt, was für unsere Zwecke vollkommen in Ordnung ist:


Wir möchten alle Linux Partitionen entfernen (denk daran, es ist ein frisch aufgesetztes System), also antworten wir mit Yes auf die Frage:


Weiter mit den Netzwerkeinstellungen. Mit der Standardeinstellung werden die Netzwerk Interfaces mit DHCP konfiguriert. Wir installieren aber einen Server, also sind statische IP Adressen keine schlechte Idee... Klicke auf das Edit Feld rechts oben. Entferne in dem Fenster, das sich öffnet, die Markierung von Configure using DHCP und weise Deiner Netzwerkkarte eine statische IP Adresse und Netzmaske zu (in dieser Anleitung verwende ich die IP Adresse 192.168.0.100 und Netzmaske 255.255.255.0 aus Demonstarationsgründen). Entferne die Markierung von Enable IPv6 support und aktiviere Activate on boot:




Richte den Hostnamen manuell ein, z.B. server1.example.com und gib ein Gateway (z.B. 192.168.0.1) sowie zwei DNS Server (z.B. 145.253.2.75 und 193.174.32.18) ein:


Wähle Deine Zeitzone:


Weise root ein Passwort zu:


Nun wählen wir die Software aus, die wir installieren möchten. Entferne die Markierung von Office and Productivity und markiere stattdessen Software Development und Web server. Wähle nicht Fedora Extras - bei meiner Installation hat der Installer deswegen angehalten! Das scheint ein Fehler zu sein. Markiere dann Customize now und klicke dann auf Next:


Nun müssen wir die Paketgruppen auswählen, die wir installieren möchten. Wähle Editors, Text-based Internet, Development Libraries, Development Tools, DNS Name Server, FTP Server, Mail Server, MySQL Database, Server Configuration Tools, Web Server, Administration Tools, Base, Java und System Tools und klicke auf Next:


Klicke auf Next um die Installation zu starten:


Der Installer fragt, ob Du das benötigte Installationsmedium zur Hand hast. Klicke auf Continue:


Die Installation beginnt. Das kann ein paar Minuten dauern:



Schließlich ist die Installation abgeschlossen und Du kannst Deine DVD oder CD entfernen und den Computer neu starten:


Nach dem Neustart siehst Du folgenden Screen. Verlasse ihn indem Du drückst Exit:


Nur zur Konfiguration ...

2  /etc/hosts anpassen

Als Nächstes bearbeiten wir /etc/hosts. So soll es aussehen:

vi /etc/hosts


# Do not remove the following line, or various programs
# that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 ::1 server1.example.com server1 localhost.localdomain localhost
Es ist wichtig, dass Du eine Zeile für server1.example.com hinzufügst und server1.example.com und server1 aus der 127.0.0.1 Zeile entfernst.

3 Konfiguration weiterer IP Adressen

(Dieser Abschnitt ist völlig optional. Er zeigt lediglich, wie man zusätzliche IP Adressen dem Netzwerk Interface eth0 hinzufügt, wenn man mehr als eine IP Adresse benötigt. Wenn Dir eine IP Adresse reicht, kannst Du diesen Abschnitt auslassen.)

Gehen wir davon aus, dass unser Netzwerk Interface eth0 ist. Dann gibt es eine Datei /etc/sysconfig/network-scripts/ifcfg-eth0 die wie folgt aussieht:

vi /etc/sysconfig/network-scripts/ifcfg-eth0


# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.0.255 HWADDR=00:0C:29:11:31:55 IPADDR=192.168.0.100 IPV6ADDR= IPV6PREFIX= NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes
Nun wollen wir das virtuelle Interface eth0:0 mit der IP Adresse 192.168.0.101 erstellen. Wir müssen lediglich die Datei /etc/sysconfig/network-scripts/ifcfg-eth0:0 anlegen, die wie folgt aussieht (wir können die HWADDR Zeile weglassen, da es die gleiche Netzwerkkarte ist):

vi /etc/sysconfig/network-scripts/ifcfg-eth0:0


DEVICE=eth0:0
BOOTPROTO=static BROADCAST=192.168.0.255 IPADDR=192.168.0.101 IPV6ADDR= IPV6PREFIX= NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes
Danach müssen wir das Netzwerk neu starten:

/etc/init.d/network restart


4 Konfiguration der Firewall

Ich möchte am Ende dieser Anleitung ISPConfig installieren, das seine eigene Firewall hat. Daher deaktiviere ich jetzt ie Standard Firewall von Fedora. Natürlich ist es Dir überlassen, ob Du sie aktiviert lässt oder nicht und sie nach Belieben konfigurierst (doch dann solltest Du später keine andere Firewall verwenden, da sie die Fedora Firewall höchstwahrscheinlich beeinflusst).

Führe dies aus

system-config-securitylevel


Wähle Disabled und drücke OK.

Um zu überprüfen, dass die Firewall aus tatsächlich deaktiviert wurde, führe dies danach aus

iptables -L

Die Ausgabe sollte wie folgt aussehen:
[root@server1 ~]# iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination

5 SELinux deaktivieren

SELinux ist eine Sicherheitserweiterung von Fedora, die erweiterte Sicherheit gewährleisten sollte. Meiner Meinung nach braucht man ein sicheres System nicht zu konfigurieren. Es verursacht für gewöhnlich mehr Probleme als dass es Vorteile schafft. Daher deaktiviere ich es auch (das ist ein Muss, wenn Du ISPConfig später installieren möchtest).

Bearbeite /etc/selinux/config und setze SELINUX=disabled:

vi /etc/selinux/config


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=disabled # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted
Danach müssen wir das System neu starten:

shutdown -r now


6 Installation einiger Software-Pakete

Nun installieren wir einige Software-Pakete, die wir später noch benötigen:

yum install fetchmail wget bzip2 unzip zip nmap openssl lynx fileutils ncftp gcc gcc-c++


7 Quota

Um Quota zu installieren, führen wir diesen Befehl aus:

yum install quota

Bearbeite /etc/fstab und füge ,usrquota,grpquota der / Partition (/dev/VolGroup00/LogVol00) hinzu:

vi /etc/fstab


/dev/VolGroup00/LogVol00 /                       ext3    defaults,usrquota,grpquota        1 1
LABEL=/boot /boot ext3 defaults 1 2 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 /dev/VolGroup00/LogVol01 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

um Quota zu aktivieren.

8 Installation eines chrooted DNS Servers (BIND9)

Um einen chrooted BIND9 zu installieren, führen wir dies aus:

yum install bind-chroot

Als Nächstes ändern wir ein paar Berechtigungen und starten BIND:

chmod 755 /var/named/
chmod 775 /var/named/chroot/
chmod 775 /var/named/chroot/var/
chmod 775 /var/named/chroot/var/named/
chmod 775 /var/named/chroot/var/run/
chmod 777 /var/named/chroot/var/run/named/
cd /var/named/chroot/var/named/
ln -s ../../ chroot
chkconfig --levels 235 named on
/etc/init.d/named start

BIND wird in einem chroot Gefängnis unter  /var/named/chroot/var/named/ ausgeführt. Ich werde ISPConfig verwenden um BIND (Zonen, etc.) zu konfigurieren.

9 MySQL (5.0)

Um MySQL zu installieren, führen wir dies aus:

yum install mysql mysql-devel mysql-server

Dann erstellen wir die System Startup Links für MySQL (so dass MySQL automatisch gestartet wird wenn das System hochfährt) und starten den MySQL Server:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

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

netstat -tap

Es sollte eine Zeile in der Art angezeigt werden:

tcp        0      0 *:mysql                     *:*                         LISTEN      2008/mysqld
Wenn nicht, bearbeite /etc/my.cnf und kommentiere die Option skip-networking aus:

vi /etc/my.cnf


#skip-networking
und starte Deinen MySQL Server neu:

/etc/init.d/mysqld restart

Führe dies aus

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

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

10 Postfix mit SMTP-AUTH und TLS

Nun installieren wir Postfix und dovecot (dovecot wird unser POP3/IMAP Server sein):

yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot

Nun konfigurieren wir SMTP-AUTH und TLS:

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'

Wir müssen /usr/lib/sasl2/smtpd.conf bearbeiten, so dass Postfix PLAIN und LOGIN Logins zulässt. So sollte es aussehen:

vi /usr/lib/sasl2/smtpd.conf


pwcheck_method: saslauthd
mech_list: plain login

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

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'

Nach diesen Konfigurationsschritten solltest Du eine /etc/postfix/main.cf haben, die wie folgt aussieht (ich habe alle Kommentare entfernt):

vi /etc/postfix/main.cf


queue_directory = /var/spool/postfix
command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix mail_owner = postfix inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.3.3/samples readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination mynetworks = 127.0.0.0/8 smtpd_tls_auth_only = no smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt 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
Starte nun Postfix, saslauthd und dovecot:

chkconfig --levels 235 sendmail off
chkconfig --levels 235 postfix on
chkconfig --levels 235 saslauthd on
chkconfig --levels 235 dovecot on
/etc/init.d/sendmail stop
/etc/init.d/postfix start
/etc/init.d/saslauthd start
/etc/init.d/dovecot start

Um herauszufinden, ob SMTP-AUTH und TLS richtig funktionieren, führe jetzt 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

siehst, ist alles in Ordnung.


Gib Folgendes ein

quit

um zur Kommandozeile des Systems zurückzukehren.

10.1 Maildir

dovecot verwendet ein Maildir Format (nicht mbox), wenn Du also ISPConfig auf dem Server installierst, pass bitte auf, dass Du Maildir unter Management -> Server -> Settings -> Email aktivierst. ISPConfig wird dann die notwendige Konfiguration vornehmen.

Wenn Du ISPConfig nicht installieren möchtest, dann musst Du Postfix so konfigurieren, dass es E-Mails an eine Maildir des Benutzers sendet:

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

11 Apache2 mit PHP5

Nun installieren wir Apache mit PHP5:

yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel

Bearbeite dann /etc/httpd/conf/httpd.conf:

vi /etc/httpd/conf/httpd.conf

und ändere DirectoryIndex zu
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl
Konfiguriere nun Dein System, dass Apache beim Hochfahren gestartet wird:

chkconfig --levels 235 httpd on

Starte Apache:

/etc/init.d/httpd start


11.1 PHP global deaktivieren

(Falls Du nicht vorhast, ISPConfig auf diesem Server zu installieren, überspringe 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/httpd/conf.d/php.conf und kommentieren die AddHandler und AddType Zeilen aus:

vi /etc/httpd/conf.d/php.conf


#
# PHP is an HTML-embedded scripting language which attempts to make it # easy for developers to write dynamically generated webpages. # LoadModule php5_module modules/libphp5.so # # Cause the PHP interpreter to handle files with a .php extension. # #AddHandler php5-script .php #AddType text/html .php # # Add index.php to the list of files that will be served as directory # indexes. # DirectoryIndex index.php # # Uncomment the following line to allow PHP to pretty-print .phps # files as PHP source code: # #AddType application/x-httpd-php-source .phps
Danach starten wir Apache neu:

/etc/init.d/httpd restart


12 ProFTPd

ISPConfig unterstützt proftpd besser als vsftpd, also entfernen wir sftpd und installieren proftpd:

yum remove vsftpd

yum install proftpd


chkconfig --levels 235 proftpd on
/etc/init.d/proftpd start

13 Webalizer

Um Webalizer zu installieren, führe dies aus

yum install webalizer


14 Synchronisation der System-Uhr

Wenn die System-Uhr mit einem NTP Server synchronisiert werden soll, führe Folgendes aus:

yum install ntp

chkconfig --levels 235 ntpd on
ntpdate 0.pool.ntp.org
/etc/init.d/ntpd start

15 Installation einiger Perl Module

In ISPConfig ist SpamAssassin integriert, das einige Perl Module benötigt. Wir installieren die notwendigen Perl Module mit einem einzigen Befehl:

yum install perl-HTML-Parser perl-DBI perl-Net-DNS perl-Digest-SHA1


16 Das Ende

Die Konfiguration des Servers ist nun abgeschlossen. Wenn Du magst, kannst Du nun ISPConfig installieren indem Du diesen Instruktionen folgst: http://www.ispconfig.org/manual_installation.htm

16.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 Web Sites festlegen, die von ISPConfig erstellt werden, da Fedoras suExec mit /var/www as Doc_Root erstellt wird. Führe Folgendes aus

/usr/sbin/suexec -V

und die Ausgabe sollte wie folgt aussehen:


Sofern Du ISPConfig nicht im Expertenmoduls installierst und den Standard Web Root änderst (/var/www), kannst Du mit ISPConfig CGI Skripte unter suExec ausführen. Der folgende Screenshot stammt von einer ISPConfig Installation im Expertenmodus. Wenn Du ISPConfig verwenden möchtest, dann ändere nicht den Standard Web Root:

17 Links