Implementierung des Lösungskonzepts

Implementierung des Lösungskonzepts:
Mit dem Tool dselect ging die Installation des Apache-SSL Servers und des für die Aufgabe benötigten PHP-Moduls (beinahe) problemlos. Zu diesem Zeitpunkt steht Apache-SSL bereits als voll funktionsfähiger Webserver zur Verfügung.
Ändern der Hauptkonfigurationsdatei httpd.conf:
Nach der Installation waren verschiedene Einstellungen in der httpd.conf vorzunehmen:
1.) Den Namen des Servers auf localhost stellen. Das ist besser, weil erstens noch keine DNS-Auflösung zur Verfügung stand und die Einstellung sowieso von den VirtualHosts überschrieben wird.
2.) Den Befehl "AddType application/x-httpd-php .php" einfügen, damit Apache-SSL weiß, was er mit PHP-Dateien anzufangen hat.
3.) Im letzten Teil der Datei befindet sich eine Beispielkonfiguration eines SSL-Servers, die teilweise unkommentiert ist. Diese Konfiguration haben wir komplett auskommentiert damit sie uns nicht in die Quere kommt. Die nachfolgenden VirtualHost Einstellungen haben wir gelöscht.
Alle restlichen Einstellungen konnten weitestgehend übernommen bzw. ignoriert werden.
4.) Es müssen Listen- und NameVirtualHost- Direktiven in eingefügt werden, die den Server auf allen verwendeten Ports horchen lassen:
Listen 80
Listen 443
NameVirtualHost www.ktds-labor.de:80
NameVirtualHost www.intern.ktds-labor.de:80
Konfiguration der einzelnen virtuellen Webserver:
Als Grundvoraussetzung haben wir drei Verzeichnisse "w1", "w2" und "w3" erstellt, auf denen später unsere Virtuellen Server operieren sollen.
Server W1:
Für den W1 sollte der Zugriff mit einer Passwortabfrage gesichert werden. Dies haben wir folgendermaßen realisiert:
1.) Die Konfiguration unseres VirtualHost unterscheidet sich an sich nicht von den anderen:
ServerAdmin webmaster@ktds-labor.de
DocumentRoot /etc/apache-ssl/w1
ServerName www.ktds-labor.de
2.) Folgende Directory-Anweisung musste eingefügt werden:
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Insbesondere der rote Teil ist wichtig. Hier wird dem Apache-SSL mitgeteilt, dass es für .htaccess-Dateien im Verzeichnis "/etc/apache-ssl/w1" gestattet ist, Einstellungen der httpd.conf lokal zu überschreiben.
3.) Eine .htpasswd-Datei musste angelegt werden, in der ein Zugriffberechtigter Benutzer registriert ist. Dies geht mit der in der Apache-SSL Installation enthaltenen Datei htpasswd.
htpasswd -c /etc/apache-ssl/.htpasswd ktds
Dies erstellt eine neue .htpasswd-Datei im Verzeichnis /etc/apache-ssl mit dem Benutzer ktds. Das Programm fragt dann weiterhin nach einem Passwort für ktds.
4.) Im Verzeichnis des W1 (/etc/apache-ssl/w1) musste eine .htaccess-Datei mit folgendem Inhalt angelegt werden:
AuthType Basic
AuthName "geschuetztes Verzeichniss"
AuthUserFile D:\Programme\apache\w1\.htpasswd
require valid-user
Dies sagt dem Apache-SSL, dass er den Zugriff auf das Verzeichnis nur gestatten soll, wenn sich ein in der .htpasswd registrierter Benutzer sich mit seinem korrekten Passwort anmeldet.
5.) Alle in dem Verzeichnis enthaltenen Dateien sind nun geschützt. Zum testen haben wir eine simple index.html erstellt, die den Namen des Webservers ausgibt.
Server W2:
Für den W2 sollte PHP Einbindung realisiert werden und eine PHP-Infoseite angezeigt werden können. Dies war die einfachste Aufgabe, da nach der Installation des PHP-Moduls PHP Einbindung bereits global zur Verfügung stand.
1.) Die Konfiguration des VirtualHosts:
ServerAdmin webmaster@ktds-labor.de
DocumentRoot /etc/apache-ssl/w2
ServerName www.intern.ktds-labor.de
1.) Es musste eine PHP-Datei erstellt werden, die die Informationen anzeigt. Wir nannten sie info.php. Sie hat folgenden, sehr einfachen Inhalt:
Dies ruft einzig und allein die netterweise schon zur Verfügung stehende PHP-Funktion phpinfo auf, die sich um alles weitere kümmert.
2.) Jetzt musste nur noch eine index.html erstellt werden, die den Namen des Servers ausgibt und einen Link auf die info.php enthält. Fertig.
Server W3:
Der W3 soll eine sichere Verbindung via SSL aufbauen. Dies war im Gegensatz zum W2 die mit Abstand schwierigste Aufgabe.
1.) Als Erstes muss ein Sicherheitszertifikat für die Verbindung erstellt werden. Dies geschieht mit dem Programm openssl, dessen Paket bei der Installation von Apache-SSL mitinstalliert wurde. Die Erstellung des Zertifikats und der zugehörigen Key-File geschieht mit folgenden Befehlen:
openssl req -new > /etc/apache-ssl/ktds.cert.csr
openssl rsa -in privkey.pem -out /etc/apache-ssl/ktds.cert.key
openssl x509 -in /etc/apache-ssl/ktds.cert.csr -out /etc/apache-ssl/ktds.cert.cert -req -signkey /etc/apache-ssl/ktds.cert.key -days 365
Damit sind Zertifikat ktds.cert.cert und der Key ktds.cert.key ab jetzt für 365 Tage gültig.
2.) Die httpd.conf muss um einige SSL-Direktiven erweitert werden:
SSLDisable
SSLNoCAList
SSLRandomFile file /var/tmp 1024
SSLCacheServerPath /etc/apache-ssl/bin/gcache
SSLCacheServerPort 1234
SSLCacheServerRunDir /tmp
SSLSessionCacheTimeout 15
Dies sind global notwendige Einstellungen für SSL! (Das mit dem voll funktionsfähigen Browser war also nicht ganz korrekt, denn zumindest die Direktiven SSLCacheServerPath und SSLCacheServerPort sind notwendig, damit der Server überhaupt erst startet)
SSLDisable gibt weiterhin an, dass alle normalen Server kein SSL verwenden sollen.
3.) Wieder die VirtualHost Konfiguration, aber diesmal wesentlich komplexer wegen serverspezifischen SSL-Direktiven:
443>
DocumentRoot /etc/apache-ssl/w3
ServerAdmin webmaster@ktds-labor.de
ServerName www.praktikum.ktds-labor.de
SSLCertificateFile /etc/apache-ssl/ktds.cert.cert
SSLCertificateKeyFile /etc/apache-ssl/ktds.cert.key
SSLVerifyClient 0
SSLVerifyDepth 10
SSLBanCipher NULL-MD5:NULL-SHA
CustomLog logs/ssl_log "%t %{version}c %{cipher}c %{clientcert}c"
SSLEnable
Hier wird dem virtuellen Server gesagt, dass er die eben erzeugten Zertifikatdateien benutzen soll um die Verbindung zu erstellen und dann wird für ihn noch SSL eingeschaltet. Der Port 443 ist der Standardport für SSL.
4.) Es fehlt noch eine Directory-Direktive, die den Verzeichniszugriff nur auf SSL beschränkt:
SSLRequireSSL
Damit kann das Verzeichnis nur noch mit SSL betreten werden.
5.) Jetzt nur noch eine index.html mit dem Namen des Webservers erstellen und fertig.
Lösung der Querschnittsaufgaben:
Client für Mailserver:
Für die Verbindung zu einem Mailserver werden verschiedene Programme benötigt. Als erstes wäre da fetchmail, mit dem die eingetroffenen Mails vom Mailserver abgeholt werden und im lokalen spool-Verzeichnis gespiechert werden können. Dafür müssen zuerst Einträge der lokalen Benutzer in die Konfigurationsdatei /etc/fetchmailrc gemacht werden. Das sieht in etwa so aus:
poll Pop3-Servername protocol pop3 user "Benutzername" there with password "Passwort" is Lokaler_Benutzername here
Jeder Benutzer hat seinen eigenen Eintrag in der Datei.
Der Aufruf von fetchmail sähe dann etwa so aus: fetchmail -f /etc/fetchmailrc.
Lokal berabeitet werden können die Mails dann mit einem beliebigen Bearbeitungsprogramm, z.B. mail.
Für das versenden der Mails an den Mailserver benötigt man selber einen kleinen lokalen Mailserver wie z.B. sendmail oder exim. Dieser Muss natürlich auch erstmal korrekt eingerichtet werden um die Mails der lokalen Benutzer zu sammeln und an den Mailserver weiterzuzleiten. Mal ausgegangen von sendmail kann man die Mails (sofern nicht als Dienst konfiguriert) dann mit einem Befehl wie sendmail -qf sammeln und versenden.
Client für DNS / DHCP:
Durch die Ausführung des scripts /etc/init.d/networking restart wird das komplette netzwerk automatisch konfiguriert. Wenn ein DHCP Server verfügbar ist wird die IP Adresse dann direkt dorther bezogen und wenn ein DNS Server verfügbar ist steht dann DNS Auflösung zur Verfügung.
Client für SAMBA:
Die einfachste Art auf eine SAMBA-Freigabe zuzugreifen ist mit dem Tool smbclient. Durch den Aufruf smbclient //Servername/Freigabename -U Benutzername kann auf die Freigabe wie auf einen FTP Server zugegriffen werden. Sollte dem Clientcomputer der Hostname des Servers nicht bekannt sein, kann man diesen durch die Angabe einer IP Adresse mit folgendem Befehl umgehen: smbclient //Servername/Freigabename -I IP-Adresse -U Benutzername. Mit dem Befehl smbclient -M Servername -U Benutzername lässt sich eine Liste aller Freigaben auf einem Server anzeigen.
|