The Perfect Server - CentOS 5.2

Version 1.0
Autor: Falko Timme


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

Ich werde folgende Software benutzen:
  • Web Server: Apache 2.2 mit PHP 5.1.6
  • Datenbank Server: MySQL 5.0
  • Mail Server: Postfix
  • DNS Server: BIND9 (chrooted)
  • FTP Server: Proftpd
  • POP3/IMAP server: Dovecot
  • Webalizer für Websseiten Statistiken
Am Ende erhältst Du ein System, das zuverlässig arbeitet. Wenn Du möchtest, kannst Du im Anschluss 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!

1 Voraussetzungen

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

2 Vorbemerkung

In dieser Anleitung benutze 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, daher solltest Du sie an entsprechender Stelle ersetzen.

3 Das Basissystem installieren

Boote von Deiner ersten CentOS 5.2 CD (CD 1) oder der CentOS 5.2 DVD. Drück <ENTER> bei der Aufforderung:


Da es zu lange dauert das Installationsmedium zu testen, lassen wir diesen Test aus:


Der Willkommensbildschirm vom CentOS Installer erscheint. Klicke auf Next:


Wähle zunächst Deine Sprache aus:


Wähle Dein Tastaturlayout:


Ich installiere CentOS 5.2 auf ein neues System, daher antworte ich Yes auf die Frage Would you like to initialize this drive, erasing ALL DATA?

Nun müssen wir eine Partition für unsere Installation auswählen. Der Einfachheit halber wähle ich Remove linux partitions on selected drives and create default layout. Daraus ergibt sich eine kleine /boot und eine grosse / Partition als auch eine Swap Partition. Natürlich kann man sich die Partition frei nach Wunsch einteilen. Danach drücke ich Next:


Beantworte folgende Frage (Are you sure you want to do this?) mit Yes:


Weiter zu den Netzwerkeinstellungen. Die Standardeinstellung ist die Konfiguration mit DHCP, da wir aber einen Server einrichten sind statische IP Adressen die bessere Wahl. Klicke auf Edit rechts oben.


Im nun erscheinenden Fenster deaktiviere bitte Use dynamic IP configuration (DHCP) und Enable IPv6 support und vergebe für die Netzwerkkarte eine statische IP Adresse. In dieser Anleitung benutze ich zu Demonstrationszwecken die IP Adresse 192.168.0.100 sowie die passende Netzmaske, z.B. 255.255.255.0; wenn Du unsicher bist wegen der Werte, schau bitte hier nach: http://www.subnetmask.info:


Gib den Hostnamen manuell ein, z. B. server1.example.com, und gib den Gateway, z. B 192.168.0.1 und bis zu zwei DNS Server an, z.B. 213.191.92.86 und 145.253.2.75:



Wähle Deine Zeitzone aus:


Gib für root ein Passwort an:


Wir wählen nun die Software aus, die wir installieren wollen. Bitte nichts anderes als den Server auswählen, deaktiviere alle anderen Felder . Deaktiviere bitte auch Packages from CentOS Extras. Dann aktiviere Customize now, und klick auf Next:


Anschliessend müssen wir die Pakete auswählen, die installiert werden sollen. 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, und System Tools (deaktiviere alle anderen Pakete) und klick auf Next:


Der Installer überprüft die Abhängigkeiten der ausgewählten Pakete:


Klick auf Next um die Installation zu starten:


Die Festplatte wird formatiert:


Die Installation beginnt. Das kann einige Minuten dauern:


Endlich ist die Installation vollständig. Du kannst nun die CD bzw. DVD entfernen und dann neu starten:


Nach dem Neustart wird folgende Meldung erscheinen. Wähle Firewall configuration und Run Tool:


Am Ende dieser Anleitung möchte ich ISPConfig installieren, der eine eigene Firewall mitbringt. Daher deaktiviere ich die CentOS Firewall. Selbstverständlich kannst Du die Firewall so lassen, dann sollte aber keine andere Firewall verwendet werden, da sie sich gegenseitig behindern.

SELinux ist eine Sicherheitseerweiterung von CentOS, die zusätzliche Sicherheitsoptionen bietet. Meiner Meinung nach ist sie nicht notwendig um ein sicheres System zu konfigurieren, und normalerweise verursacht es mehr Probleme als dass es Vorteile mit sich bringt. Das zeigt sich häufig erst , wenn man wochenlang auf Fehlersuche war, da irgendein Service nicht funktioniert; um festzustellen dass SELInux einzig und allein das Problem verursacht. Daher deinstalliere ich es - das ist ohnehin notwendig, wenn wir später ISPConfig installieren. Gib dann OK ein:


Dann gehen wir aus dem Setup Agent raus indem wir Exit auswählen:


Log dich nun als root ein und starte das System neu, so dass die Änderungen übernommen werden:

reboot


Und jetzt geht es zur Konfiguration…

4 /etc/hosts anpassen

Als Nächstes editieren wir /etc/hosts. Es soll folgendermassen 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 localhost6.localdomain6 localhost6

5 Zusätzliche IP ADressen einrichten

(Dieser Teil ist optional. Es zeigt wie man zusätzliche IP Adressen zu der Netzwerk-Schnittstelle eth0 hinzufügt, wenn mehr als eine IP Adresse benötigt wird. Wenn Dir eine Adresse ausreicht, kannst Du diesen Teil auslassen.)

Gehen wir davon aus dass unsere Netzwerk-Schnittstelle eth0. Es gibt die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 welche die Einstellungen für eth0 enthält. Wir können das als Beispiel für unsere neue virtuelle Netzwerk-Schnittstelle eth0:0 nutzen:

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


Wir werden nun die IP Adresse 192.168.0.101 auf der virtuellen Schnittstelle eth0:0 nutzen. Hierfür öffnen wir die Datei /etc/sysconfig/network-scripts/ifcfg-eth0:0 und ändern sie folgendermassen ab: (Wir können die Zeile HWADDR auslassen, da es sich um die selbe physische Netzwerkkarte handelt):

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

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
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
Wir starten das Netzwerk neu:

/etc/init.d/network restart


Vielleicht möchtest Du noch /etc/hosts abgleichen, nachdem Du neue IP Adressen hinzugefügt hast, obwohl es nicht notwendig ist.

Führe aus:

ifconfig


Nun solltest Du Deine neue IP Adresse in der Ausgabe sehen:

[root@server1 ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:B1:97:E1
inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feb1:97e1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:310 errors:0 dropped:0 overruns:0 frame:0
TX packets:337 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:28475 (27.8 KiB)  TX bytes:72116 (70.4 KiB)
Interrupt:177 Base address:0x1400

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:B1:97:E1
inet addr:192.168.0.101  Bcast:192.168.0.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Interrupt:177 Base address:0x1400

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)

[root@server1 ~]#

6 Die Firewall und SELinux abschalten

(Diesen Kapitel kannst Du auslassen, wenn Du die Firewall und SELinux bereits am Ende der Basis-System-Installation im Setup Agent ausgeschaltet hast.)


Ich möchte ISPConfig am Ende dieser Anleitung installieren, das eine eigene Firewall mitbringt. Daher werde ich nun die Standard-Firewall von CentOS deinstallieren. Natürlich kannst Du die Firewall auch so belassen und es nach Deinen Wünschen anpassen, Du solltest dann allerdings keine weitere Firewall einsetzen, da sie mit der CentOS Firewall interferieren wird.

SELinux ist eine Sicherheitseerweiterung von CentOS, die zusätzliche Sicherheitsoptionen bietet. Meiner Meinung nach ist es nicht notwendig um ein sicheres System zu konfigurieren, und normalerweise verursacht es mehr Probleme als dass es Vorteile mit sich bringt. Das zeigt sich häufig erst, wenn man wochenlang auf Fehlersuche war, da irgendein Service nicht funktioniert; um festzustellen dass SELInux einzig und allein das Problem verursacht. Daher deinstalliere ich es - das ist ohnehin notwendig, wenn wir später ISPConfig installieren.

Führe aus

system-config-securitylevel


Setze Security Level und SELinux auf Disabled und gib ein OK:


Hiernach müssen wir das System neu starten:

reboot


7 Software installieren

Zuerst importieren wir die GPG-Keys für Software-Pakete :

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*


Dann aktualisieren die bereits vorhandene Pakete auf unserem System:

yum update


Wir installieren einige Pakete die wir später benötigen werden:

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


8 Quota

(Wenn Du ein anderes Partitionsschema als ich ausgewählt hast, musst Du dieses Kapitel entsprechend anpassen, so dass Quota auf die entsprechenden Partitionen angewandt wird.)
Um Quota zu installieren, führen wir folgenden Befehl aus:

yum install quota


Editiere /etc/fstab und füge ,usrquota,grpquota zu 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 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/VolGroup00/LogVol01 swap swap defaults 0 0
Dann führe aus

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

...um Quota zu aktivieren.

9 Einen Chrooted DNS Server (BIND9) installieren

Um einen chrooted BIND9 Server zu installieren, geben wir Folgendes ein:

yum install bind-chroot


Dann:

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
cp /usr/share/doc/bind-9.3.4/sample/var/named/named.local /var/named/chroot/var/named/named.local
cp /usr/share/doc/bind-9.3.4/sample/var/named/named.root /var/named/chroot/var/named/named.root
touch /var/named/chroot/etc/named.conf
chkconfig --levels 235 named on
/etc/init.d/named start

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

10 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 beim Systemboot startet, und starten den MySQL Server:

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

Bitte überprüfe das Netzwerk. Dann führe aus:

netstat -tap | grep mysql


Es sollte folgende Zeile angezeigt werden:

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

Wenn dies nicht geschieht, editiere /etc/my.cnf und kommentiere die Option skip-networking aus:

vi /etc/my.cnf

[...]
#skip-networking [...]
und starte den MySQL Server neu:

/etc/init.d/mysqld restart


Führe aus:

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

um ein Passwort für den Benutzer root festzulegen, da ansonsten jeder auf die MySQL Datenbank zugreifen kann!

11 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


Als Nächstes 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_sasl_authenticated_header = 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 editieren, so dass Postfix PLAIN und LOGIN Logins erlaubt. Es sollte so aussehen:

vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
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:

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'

Dann vergeben wir den Hostnamen in unserer Postfix Installation. Bitte versichere Dich dass Du server1.example.com mit Deinem eigenen Hostnamen ersetzt :

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


Nach diesen Konfigurationsschritten solltest Du ein /etc/postfix/main.cf haben, dass folgendermassen aussieht (Ich habe alle Kommentare bereinigt):

cat /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_sasl_authenticated_header = 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 myhostname = server1.example.com
Als Standard bietet der CentOS Dovecot Dämon nur IMAP and IMAP Dienste. Da wir auch POP3 und POP3s benötigen, werden wir Dovecot entsprechend konfigurieren müssen. Wir editieren /etc/dovecot.conf und aktivieren die Zeile protocols = imap imaps pop3 pop3s:

vi /etc/dovecot.conf

[...]
# Base directory where to store runtime data. #base_dir = /var/run/dovecot/ # Protocols we want to be serving: imap imaps pop3 pop3s # If you only want to use dovecot-auth, you can set this to "none". protocols = imap imaps pop3 pop3s # IP or host address where to listen in for connections. It's not currently # possible to specify multiple addresses. "*" listens in all IPv4 interfaces. # "[::]" listens in all IPv6 interfaces, but may also listen in all IPv4 # interfaces depending on the operating system. [...]
Nun starten wir 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

To see if SMTP-AUTH and TLS work properly now run the following command:

telnet localhost 25


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

ehlo localhost


Wenn Du folgende Zeilen bekommst:

250-STARTTLS


und

250-AUTH PLAIN LOGIN


ist alles wunderbar!

[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
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 ein

quit


um zur Kommandozeile zurückzukehren.

11.1 Maildir

Dovecot benutzt das Maildir Format (nicht mbox), versichere Dich also dass Maildir aktiviert wurde unter Management -> Server -> Settings -> Email. wenn Du ISPConfig installieren möchtest. ISPConfig wird dann die notwendige Konfiguration übernehmen.

Wenn Du ISPConfig nicht installieren möchtest, dann musst Du Postfix so konfigurieren dass es die Mails zum Maildir eines Benutzers sendet (das geht aber auch wenn man ISPConfi einsetzt!):

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

12 Apache2 mit PHP & Ruby

Nun installieren wir Apache mit PHP (es handelt sich dabei um PHP 5.1.6):

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


Dann editiere /etc/httpd/conf/httpd.conf:

vi /etc/httpd/conf/httpd.conf


und ändere DirectoryIndex
[...]
DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl [...]
Nun konfigurieren wir das Sytem so um, dass es Apache beim Hochfahren mit startet:

chkconfig --levels 235 httpd on


Starte Apache:

/etc/init.d/httpd start


12.1 PHP global deaktivieren

(Wenn Du ISPCnfig nicht auf diesem Server installieren wirst, kann dieser Schritt ausgelassen werden!)


In ISPConfig wird PHP für jede einzelne Webseite konfiguriert, d. h. man kann angeben welche Seite PHP Skripte ausführen darf und welche nicht. Das funktioniert nur wenn PHP global deaktiviert wurde, da ansonsten alle Webseiten PHP Skripte ausführen könnten, unabhängig davon was in ISPConfig spezifiziert wird.

Um PHP global zu deaktivieren, editieren wir/etc/httpd/conf.d/php.conf und kommenteiren die Zeilen AddHandler und AddType 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
Hiernach wird Apache neu gestartet:

/etc/init.d/httpd restart


12.2 mod_ruby installieren

Für CentOS 5.2 gibt es kein mod_ruby Paket, daher müssen wir uns selbst eines kompilieren. Zuerst installieren wir einige Voraussetzungen:

yum install httpd-devel ruby ruby-devel


Als Nächstes laden wir mod_ruby herunter und installieren es folgendermassen:

cd /tmp
wget http://www.modruby.net/archive/mod_ruby-1.2.6.tar.gz
tar zxvf mod_ruby-1.2.6.tar.gz
cd mod_ruby-1.2.6/
./configure.rb --with-apr-includes=/usr/include/apr-1
make
make install

Am Ende müssen wir das mod_ruby Modul der Apache Konfiguration zuweisen, daher erstellen wir die Datei /etc/httpd/conf.d/ruby.conf...

vi /etc/httpd/conf.d/ruby.conf

LoadModule ruby_module modules/mod_ruby.so
… und starten Apache neu:

/etc/init.d/httpd restart


13 ProFTPd

ISPConfig unterstützt besser proftpd als vsftpd, daher entfernen wir vsftpd:

yum remove vsftpd


Da CentOS kein proftpd Paket mitbringt, müssen wir Proftpd manuell kompilieren:

cd /tmp/
wget --passive-ftp ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz
tar xvfz proftpd-1.3.1.tar.gz
cd proftpd-1.3.1/
./configure --sysconfdir=/etc
make
make install
cd ..
rm -fr proftpd-1.3.1*

Das proftpd Binary wird in /usr/local/sbin installiert, aber wir brauchen es in /usr/sbin, so dass wir einen Symlink erstellen:

ln -s /usr/local/sbin/proftpd /usr/sbin/proftpd


Nun erstellen wir den Init-Skript /etc/init.d/proftpd:

vi /etc/init.d/proftpd

#!/bin/sh
# $Id: proftpd.init,v 1.1 2004/02/26 17:54:30 thias Exp $ # # proftpd This shell script takes care of starting and stopping # proftpd. # # chkconfig: - 80 30 # description: ProFTPD is an enhanced FTP server with a focus towards # simplicity, security, and ease of configuration. # It features a very Apache-like configuration syntax, # and a highly customizable server infrastructure, # including support for multiple 'virtual' FTP servers, # anonymous FTP, and permission-based directory visibility. # processname: proftpd # config: /etc/proftp.conf # pidfile: /var/run/proftpd.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x /usr/sbin/proftpd ] || exit 0 RETVAL=0 prog="proftpd" start() { echo -n $"Starting $prog: " daemon proftpd RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/proftpd } stop() { echo -n $"Shutting down $prog: " killproc proftpd RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/proftpd } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status proftpd RETVAL=$? ;; restart) stop start ;; condrestart) if [ -f /var/lock/subsys/proftpd ]; then stop start fi ;; reload) echo -n $"Re-reading $prog configuration: " killproc proftpd -HUP RETVAL=$? echo ;; *) echo "Usage: $prog {start|stop|restart|reload|condrestart|status}" exit 1 esac exit $RETVAL
Dann machen wir den Init-Skript ausführbar:

chmod 755 /etc/init.d/proftpd


Als Nächstes öffnen wir /etc/proftpd.conf und ändern Group to nobody:

vi /etc/proftpd.conf

[...]
Group nobody [...]
Aus Sicherheitsgründen kann man noch folgende Zeile zu /etc/proftpd.conf hinzufügen (Danke an Reinaldo Carvalho; mehr Informationen gibt es hier: http://proftpd.org/localsite/Userguide/linked/userguide.html):

vi /etc/proftpd.conf

[...]
DefaultRoot ~ IdentLookups off ServerIdent on "FTP Server ready." [...]
Nun können wir die System Startup-Links für Proftpd erstellen:

chkconfig --levels 235 proftpd on


Und endlich starten wir Proftpd:

/etc/init.d/proftpd start


14 Webalizer

Um webalizer zu installieren, einfach folgenden Befehl ausführen:

yum install webalizer


15 Die Systemuhrzeit synchronisieren

Wenn die Systemuhrzeit mit einem NTP Server synchronisiert werden soll, bitte Folgendes ausführen:

yum install ntp


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

16 Einige Perl Module installieren

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

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


17 Zum Ende

Die Konfiguration des Servers ist nun beendet, wenn Du magst kannst Du nun ISPConfig darauf installieren.

17.1 Hinweis zu SuExec

Wenn Du CGI Skripte unter suExec ausführen möchtest, solltest Du /var/www as als Home Verzeichnis für Webseiten spezifizieren, die mit ISPConfig erstellt wurden, da CentOS suExec mit /var/www als Doc_Root kompiliert ist. Führe aus

/usr/sbin/suexec -V


Das Ergebnis sollte folgendermassen 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_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
[root@server1 ~]#

Wenn Du suExec mit ISPConfig benutzen möchtest, ändere bitte nicht den Standard Web-Root, der /var/www ist, falls Du den Expertenmodus während der ISPConfig Installation benutzt. Im Standardmodus kann man den Web-Root allerdings ohnehin nicht ändern, daher wird suExec auf alle Fälle funktionieren.

18 Links