In diesem Tutorial gehen wir die Installation eines Debian Servers (Debian 5) mit Apache 2, MySQL 5, Virtual Hosts mit SSL-Support, Postfix und Vsftpd durch.
Voraussetzung ist ein installierter minimaler Debian Server wie er bei den meisten dedizierten oder virtuellen Servern bereits installiert ist.
Inhalt
1. Installation der Pakete
2. Installation und Konfiguration von SSH
3. Installation von Apache 2 mit PHP5 und MySQL 5 unter Debian
4. Erstellung Apache Virtual Host (namens-basiert)
5. Installation eines Mailservers mit Postfix (MTA)
6. Installation von Vsftpd als FTP-Server
7. Einige Sicherheitstipps für den Debian-Server
1. Installation der Pakete
Erlangung der Rootrechte:
Debian:~# su
Paketlisten aktualisieren und System auf den aktuellen Stand bringen:
Debian:~# apt-get update
Debian:~# apt-get upgrade
Installation weiterer kleinerer Hilfsprogramme:
Debian:~# apt-get install vim mc zip unzip bzip2 ftp lynx screen rsync tracerroute
Installation Zeitserver:
Debian:~# apt-get install ntp ntpdate
2. Installation und Konfiguration von SSH
SSH installieren:
Debian:~# apt-get install ssh
SSH-Zugang absichern:
Debian:~# vim /etc/ssh/sshd_config
Es kann auch der Editor mc benutzt werden. Ich bevorzuge jedoch vim.
sshd_config abändern:
PermitRootLogin von YES auf NO
ACHTUNG: Wenn ihr über root mit dem Server verbunden seid bitte vorher einen zweiten User mit ''Debian:~# adduser tester'' anlegen und über diesen dann mit su wieder Rootrechte erlangen.
SSH-Einwahl auf einen bzw. mehrere User/Gruppen festlegen:
# Benutzer
AllowUsers tester
# Gruppen
AllowGroups testgruppe
Portwechsel:
Port 20345
Verbieten der Nutzung von leeren Passwörtern:
PermitEmptyPasswords no
3. Installation von Apache 2 mit PHP5 und MySQL 5 unter Debian
Installation Apache Webserver:
Debian:~# apt-get install apache2
Installation der PHP5-Unterstützung für Apache:
Debian:~# apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi
Installation MySQL Server 5:
Debian:~# apt-get install mysql-common mysql-server mysql-server-5.0 php5-mysql
Passwort für MySQL-Root setzen:
Debian:~# mysqladmin -u root -p password ‘HierKommtDasPasswortRein’
Apache neu starten:
Debian:~# /etc/init.d/apache2 restart
Test der PHP5-Unterstützung:
Debian:~# vim /var/www/info.php
Inhalt:
<?php
phpinfo();
?>
Wenn man nun auf http://meine-domain.de/info.php geht erfährt man alles was man wissen will und noch
viel mehr.
Da die Verwaltung einer MySQL-Datenbank für den Einsteiger sehr schwierig werden kann installieren wir jetzt noch PHPMyAdmin mit dem sich Datenbanken über den Browser verwalten lassen.
Installation PHPMyAdmin:
Debian:~# apt-get install phpmyadmin
Für zusätzliche Sicherheit versehen wir PHPMyAdmin noch mit einer weiteren Zugriffsbeschränkung.
Erstellung der .htaccess:
Debian:~# vim /var/www/phpmyadmin/.htaccess
Inhalt:
AuthType Basic
AuthName “phpmyadmin”
AuthUserFile /var/www/phpmyadmin/.htpasswd
require user Tester
Erstellung der htpassword:
Debian:~# vim /var/www/phpmyadmin/.htpasswd
Inhalt:
tester:deinPasswort.
Mehr zur Passwortverschlüsselung erfahrt ihr hier: SelfHTML
Anpassung der apache2.conf:
Debian:~# vim /etc/apache2/apache2.conf
Am Ende der apache2.conf einfügen:
<Directory /var/www/phpmyadmin>
AllowOverride AuthConfig
Options ExecCGI FollowSymLinks
</Directory>
Apache neu starten:
Debian:~# /etc/init.d/apache2 restart
4. Erstellung Apache Virtual Host (namensbasiert)
Die Erstellung von Virtual Hosts macht dann Sinn wenn ihr z.B. mehrere Webseitebn auf einem Server habt. Zeigt also der DNS-Server eures Domainanbieters auf eure IP weis Apache wo die Website zu finden ist!
Bsp: Ihr habt zwei Seiten Hompage1 und Hompage2. Beide haben unterschiedliche Domains und liegen in zwei veschiedenen Ordnern auf eurem Server.
Also: Hompage1 (www.hompage1.de) unter /var/www/hompage1 und Hompage2 (www.hompage2.de) unter /var/www/hompage2. Mit den virtual Hosts können wir nun Apache sagen welche Seite er anzeigen soll wenn er eine Anfrage mit www.hompage1.de bekommt.
Falls nicht schon automatisch geschehen tragen wir noch folgende Zeile in die /etc/apache2/apache2.conf ein:
ServerName localhost
4.1 ohne SSL-Zertifikat
Anlegen des Verzeichnisses:
Debian:~# mkdir /var/www/hompage1
Erstellung des Virtual Hosts:
Debian:~# vim /etc/apache2/sites-available/myhosts.conf
Anmerkung: Hier werden nun alle Hosts eingetragen.
Inhalt:
NameVirtualHost IP.des.Servers:80
#
# Vhost für hompage1.de
#
<VirtualHost IP.des.Servers:80>
DocumentRoot /var/www/hompage1
ServerName hompage1.de
ServerAlias www.hompage1.de hompage1.de *.hompage1.de
<Directory /var/www/hompage1>
Order Deny,Allow
Allow from all
Options -Indexes
</Directory>
</VirtualHost>
#
# Vhost für hompage2.de
#
<VirtualHost IP.des.Servers:80>
DocumentRoot /var/www/hompage2
ServerName hompage2.de
ServerAlias www.hompage2.de hompage2.de *.hompage2.de
<Directory /var/www/hompage2>
Order Deny,Allow
Allow from all
Options -Indexes
</Directory>
</VirtualHost>
Aktivieren des Virtual Hosts:
Debian:~# a2ensite myhosts.conf
Debian:~# /etc/init.d/apache2 reload
Beim ersten Kommando ist es wichtig den Namen anzugeben den ihr auch bei der Erstellung de Virtual Hosts verwendet habt!
4.2 mit SSL-Zertifikat
Installation von OpenSSL:
Debian:~# apt-get install openssl ssl-cert
Erstellung des Verzeichnisses für das SSL-Zertifikat:
Debian:~# mkdir /etc/apache2/ssl/
OpenSSL Zertifikat generieren:
Das selbst erstellte Zertifikat wird von eurem Browser beim ersten Aufruf der Seite bemängelt werden jedoch ist ein bemängeltes Zertifikat genauso sicher wie ein beglaubigtes für das man schnell mal ein paar hundert Euro hinlegen kann!
Erstellung:
Debian:~# openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/apache.pem
Anmerkung: Alles in einer Zeile! Das Kommando '-days' gibt die Gültigkeitsdauer des Zertifikats an und kann beliebig verändert werden!
Nach dem ihr mit Enter bestätigt habt kommt folgender Dialog:
Generating a 1024 bit RSA private key
writing new private key to ‘/etc/apache2/ssl/apache.pem’
…
Country Name ( 2 letter code) [AU]: DE
State or Province Name (full name) [Some-StateN]:
Locality Name (eg, city): BERLIN
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section):
Common Name (eg, YOUR name):
Email Address:
Die Felder können entweder ausgefüllt oder einfach mit Enter übersprungen werden.
Rechte für das Zertifikat setzen:
Debian:~# chmod 600 /etc/apache2/ssl/apache.pem
Anlegen des Verzeichnisses der Website:
Debian:~# mkdir /var/www/homepage3mitSSL
Erstellung des Virtual Hosts:
Debian:~# vim /etc/apache2/sites-available/hompage3mitSSL
Inhalt:
<VirtualHost IP.des.Servers:443>
# SSL (START)
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
# SSL (ENDE)
ServerAdmin EMAIL
ServerName hompage3.de
ServerAlias www.hompage3.de hompage3.de *.hompage3.de
DocumentRoot /var/www/hompage3mitSSL
<Directory /var/www/hompage3mitSSL>
Order Deny,Allow
Allow from all
# Zeige keine Verzeichnisse an
Options -Indexes
</Directory>
</VirtualHost>
Aktivieren des Virtual Hosts:
Debian:~# a2ensite hompage2mitSSL
Debian:~# /etc/init.d/apache2 reload
Ports aktivieren auf denen Apache lauschen soll:
Debian:~# vim /etc/apache2/ports.conf
Listen 80
Listen 443
Die SSL-Unterstützung für Apache aktivieren:
Debian:~# a2enmod ssl
Apache neu starten:
Debian:~# /etc/init.d/apache2 restart
5. Installation eines Mailservers mit Postfix (MTA)
Der Standard-MTA unter Debian ist Exim. Ich bevorzuge jedoch Postfix da ich ihn für leistungsfähiger halte und ihn schon immer benutze.
Mit der Konfiguration die wir hier vornehmen ist es möglich E-Mails vom System aus zu versenden bzw. installierten CMS wie z.B. Joomla die Möglichkeit zu geben E-Mails zu versenden.
Installation von Postfix:
Debian:~# apt-get install postfix
Konfigurations-Dialog von Postfix:
Art der Postfix Config:
Internet-Server
An wen sollen an Root adressierte Mails weitergeleitet werden:
Benutzer
Wenn man hier eine E-Mailadresse einträgt leitet Postfix an Root adressierte E-Mails an diese weiter. z.B. Diese E-Mail-Adresse ist gegen Spambots geschützt! JavaScript muss aktiviert werden, damit sie angezeigt werden kann.
Wie lautet der E-Mail Name Ihres Systems?
domain.de
Für welche weiteren Rechner möchten Sie E-Mails akzeptieren?
domain1.de, domain2.de, localhost.localdomain, localhost
Wenn ihr mehrere Domains habt wie z.B. domain1.de, domain2.de etc. dann tragt sie hier ein da diese sonst nicht akzeptiert bzw. gesendet werden.
Synchrone Aktualisierung der E-Mail-Warteschlange erzwingen?
JA
Lokale Netzwerke?
127.0.0.0/8
Wichtig für die Sicherheit, da nur Nachrichten von localhost angenommen werden!
Möchten Sie procmail zur lokalen E-Mail-Zustellung nutzen?
JA
Maximale Postfach-Größe?
0
Zeichen der lokalen Adress-Erweiterung?
+
Welche Internet-Protokolle sollen verwendet werden?
ALLE
Solltet ihr versehentlich etwas falsch eingetragen haben so könnt ihr die Konfiguration auch noch einmal neu starten.
Wiederholung der Konfiguration:
Debian:~# dpkg-reconfigure postfix
Authentifizierung beim SMTP-Server eures Hosters:
Debian:~# vim /etc/postfix/main.cf
Inhalt:
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_auth
Erstellung von sasl_auth:
Debian:~# vim /etc/postfix/sasl_auth
Inhalt:
Debian:~# smtp.mailanbieter.de username:passwort
Datenbank erzeugen:
Debian:~# postmap /etc/postfix/sasl_auth
Postfix neu starten:
Debian:~# /etc/init.d/postfix restart
6. Installation von Vsftpd als FTP-Server
In diesem Teil des Tutorials gehen wir die Installation und Konfiguration von Vsftpd durch mit dem sich bequem Daten auf dem Server speichern bzw. abrufen lassen. Die hier beschriebene Konfiguration lässt nur FTPS zu. Da ein ein FTP-Server immer ein Sicherheitsrisiko darstellt wird hier der Login über Annonymous bzw. umask abgeschaltet.
Installation Vsftpd:
Debian:~# apt-get install vsftpd
Sicherung der originalen Konfigurationsdatei:
Debian:~# cp /etc/vsftpd.conf /etc/vsftpd.conf_original
Konfiguration:
Debian:~# vim /etc/vsftpd.conf
Inhalt:
# Anonymer Zugriff auf den Debian FTP Server von YES auf NO anonymous_enable=no
# Raute weg / Kommentieren von local_enable entfernen
#und den Zugriff von Systembenutzern erlauben
local_enable=YES
# Raute weg / Kommentieren von chroot_local_user=YES und
# damit alle FTP Server Benutzer in chroot-Gefängnis einsperren
chroot_local_user=YES
# Raute weg / Kommentieren von chroot_list_enable
# als whitelist für FTP Server, die nicht eingesperrt sein sollen
chroot_list_enable=YES
#Folgendes ans Ende der Konfiguration setzen
# ssl/ tls Verschluesslung des FTP Server aktivieren
ssl_enable=YES
# Verbindung von FTP Server auf Passiven Modus erlauben und
# Portrange definieren. Wichtig für Firewall regeln
pasv_enable=YES
pasv_min_port=49152
pasv_max_port=50000
# port-command für FTP Server erlauben
port_enable=yes
# FTP Server lauscht i.d.R. auf Port 22, aber die Verlegung auf Port 2222 ist sicherer
listen_port=3562
Zertifikat erstellen:
Debian:~# openssl req -new -x509 -nodes -out /etc/ssl/certs/vsftpd.pem -keyout /etc/ssl/certs/vsftpd.pem
Whitelist der nicht eingesperrten User erstellen:
Debian:~# vim /etc/vsftpd.chroot_list
Neustarten von Vsftpd:
Debian:~# /etc/init.d/vsftpd restart
7. Einige Sicherheitstipps für den Debian-Server
PHP-Version verschleiern:
Damit mögliche Angreifer die verwendete PHP-Version nicht ermitteln können müssen wir die php.ini anpassen.
php.ini bearbeiten:
Debian:~# vim /etc/php5/apache2/php.ini
Inhalt:
expose_php = OFF
Standardmäßig ist expose_php auf ON gestellt.
Die Auflistung der Verzeichnisse und des Inhalts im Browser verbieten:
Standardmäßig zeigt Apache die Ordnerstruktur und deren Inhalt an wenn keine index.html oder index.php in diesem Ordner vorhanden ist.
Da wir dies nicht wollen müssen wir die apache.conf anpassen.
apache.conf anpassen:
Debian:~# vim /etc/apache2.conf
Am Ende sind folgende Zeilen einzufügen:
# Keine Darstellung des Verzeichnisinhalts
<Directory “/var/www”>
Options -Indexes
Order allow,deny
Allow from all
</Directory>
# Darstellung des Verzeichnisinhalts für diesen Ordner erlauben
<Directory “/var/www/domain/download”>
Options +Indexes
Order allow,deny
Allow from all
</Directory>
Apache neu starten:
Debian:~# /etc/init.d/apache2 restart
~ The End ~
Ich hoffe dieses Tutorial hat euch weiter geholfen!
Sollten Fehler im Tutorial sein bitte ich euch mir diese über das Kontaktformular mitzuteilen.
Wenn ihr dieses Tutorial runterladen wollt, dann könnt ihr dies unter folgendem Link tun: Tutorial Download





