Das Perfekte Setup - Fedora Core 5 (64-bit)

Version 1.1
Author: Falko Timme


Diese Anleitung veranschaulicht Schritt für Schritt wie man einen Fedora Core 5 basierten Server einrichtet, der alle Dienste bietet, die von ISPs und Hostern benötigt werden (Web Server (SSL-fähig), Mail Server (mit SMTP-AUTH und TLS!), DNS Server, FTP Server, MySQL Server, POP3/IMAP, Quota, Firewall, etc.). Die Anleitung ist zwar für die 64-Bit Version von Fedora Core 5 geschrieben - sie sollte aber mit sehr kleinen Modifikationen genauso gut für die 32-Bit Version funktionieren.

Folgende Software werde ich verwenden:
  • Web Server: Apache 2.0.x
  • Database Server: MySQL 5.0
  • Mail Server: Postfix (einfacher zu konfigurieren als sendmail; hat eine kürzere Geschichte an Sicherheitslöchern als sendmail)
  • DNS Server: BIND9 (chrooted!)
  • FTP Server: proftpd
  • POP3/IMAP server: dovecot
  • Webalizer für Webseiten Statistiken
Am Ende erhältst Du ein System, das zuverlässig arbeitet. Wenn Du magst, kannst Du das kostenlose Webhosting Control Panel ISPConfig installieren.

Allerdings möchte ich 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 kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

Voraussetzungen

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

1 Installation des Basissystems

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


Es kann ziemlich lange dauern, das Installations-Medium zu testen, also überspringen wir diesen Test hier:


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


Wähle als Nächstes Deine Sprache:


Wähle Dein Tastaturlayout:


Ich installiere Fedora Core 5 auf einem frisch aufgesetzen 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. Somit erhältst Du eine kleine /boot Partition und eine große / Partition, was für unsere Zwecke bestens geeignet ist:


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


Weiter mit den Netzwerkeinstellungen. Mit der Standardeinstellung wird das Netzwerk Interface mit DHCP konfiguriert, wir installieren aber einen Server, also sind statische IP Adressen hier 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 zu (in dieser Anleitung verwende ich die IP Adresse 192.168.0.100 aus Demonstrationsgründen):



Richte den Hostnamen manuell ein, z.B. server1.example.com und gib ein Gateway (z.B. 192.168.0.1) und bis zu drei DNS Server (z.B. 145.253.2.75, 193.174.32.18, and 194.25.0.60) ein:



Wähle Deine Zeitzone:


Weise root ein Passwort ein:


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. Markiere außerdem Customize now, 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:


Die Installation beginnt. Das kann ein paar Minuten dauern:



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


Weiter mit der Konfiguration...

2 Konfiguriere zusätzliche IP Adressen

(Dieser Abschnitt ist optional. Er zeigt lediglich, wie Du Deinem Netzwerk Interface eth0 weitere IP Adressen hinzufügen kannst, falls Du mehr als eine benötigst. Wenn eine IP Adresse für Dich in Ordnung ist, kannst Du diesen Abschnitt überspringen.)

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


DEVICE=eth0
BOOTPROTO=static BROADCAST=192.168.0.255 HWADDR=00:0C:29:46:19:D3 IPADDR=192.168.0.100 NETMASK=255.255.255.0 NETWORK=192.168.0.0 ONBOOT=yes
Nun möchten 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 erstellen, 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 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


3 Konfiguriere die Firewall

Ich möchte am Ende dieser Anleitung ISPConfig installieren, das seine eigene Firewall hat. Daher deaktiviere ich jetzt die Standard-Firewall von Fedora. Natürlich kannst Du sie auch aktiviert lassen und sie nach eigenem Ermessen konfigurieren (dann solltest Du später aber keine andere Firewall verwenden, da diese höchstwahrscheinlich die Fedoras Firewall beeinflussen wird).

Führe Folgendes aus

system-config-securitylevel


Wähle Disabled und drücke OK.

Um zu überprüfen, ob die Firewall wirklich deaktiviert wurde, kannst Du danach Folgendes ausführen

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

4 SELinux deaktivieren

SELinux ist eine Sicherheitserweiterung von Fedora. Meiner Meinung nach ist die Konfiguration eines sicheren Systems überflüssig und verursacht für gewöhnlich mehr Probleme als dass es Vorteile verschafft. Daher deaktiviere ich es (das ist ein Muss, wenn Du später ISPConfig 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

5 Installation einiger Software-Pakete

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

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


6 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.

7 Installation eines Chrooted DNS Servers (BIND9)

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

yum install bind-chroot

Falls Du diesen Fehler sehen solltest: Transaction Check Error: file /etc/named.conf from install of bind-9.3.2-12.FC5 conflicts with file from package caching-nameserver-7.3-5.FC5, ignoriere ihn.

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.

8 MySQL (5.0)

Um MySQL zu installieren, führen wir Folgendes 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 wie die folgende 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 (sonst kann jeder auf Deine MySQL Datenbank zugreifen!) anzulegen.

9 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'

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

vi /usr/lib64/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 nun 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.2.8/samples readme_directory = /usr/share/doc/postfix-2.2.8/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 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 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

siehst, dann ist alles in Ordnung.


Tippe

quit

um zur Kommandozeile des Systems zurückzukehren.

9.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 E-Mails an eine Maildir des Benutzers gesendet werden:

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

10 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 Dein System so, dass Apache beim Hochfahren gestartet wird:

chkconfig --levels 235 httpd on

Starte Apache:

/etc/init.d/httpd start


10.1 PHP global deaktivieren

(Wenn 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.

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


11 ProFTPd

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

yum remove vsftpd
yum install proftpd
chkconfig --levels 235 proftpd on
/etc/init.d/proftpd start

12 Webalizer

Um Webalizer zu installieren, führe einfach dies aus

yum install webalizer


13 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

14 Installation einiger Perl Module

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

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


15 Das Ende

Die Konfiguration des Servers ist nun abgeschlossen. Wenn Du magst, kannst Du nun ISPConfig installieren.

15.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 als Doc_Root erstellt wird. Führe Folgendes aus

/usr/sbin/suexec -V

und die Ausgabe sollte wie folgt aussehen:


Um /var/www als das Home Verzeichnis für Webseiten während der Installation von ISPConfig auszuwählen, führe Folgendes aus: Wenn Du nach dem Installationsmodus gefragt wirst, wähle den expert mode.


Während der Installation wirst Du gefragt, ob das Standardverzeichnis /home/www das Verzeichnis sein soll, in dem ISPConfig Webseiten erstellt. Antworte n und gib /var/www als das Home Verzeichnis für Webseiten an.

16 Links