Letztes Update:
07.06.2003 |
Liebe Besucher, ein aktueller Hinweis in eigener Sache:
Es ist beabsichtigt, diese Seiten und die Domain im Januar/Februar 2004 auf
einen anderen Server umzuziehen. Es ist leider nicht auszuschließen,
daß es während des Umzugs zu technischen Problemen mit diesen
Seiten kommen wird. Insbesondere im eMail-Bereich wird es vermutlich Probleme
geben. Wenn Sie fragen haben oder mich sonstwie erreichen wollen empfehle
ich an rebel@snafu.de zu posten.
Nachdem der Umzug abgeschlossen ist, wird es allerdings auch inhaltliche Änderungen
während des ersten Halbjahrs 2004 geben. Keine Angst. Es werden keine
Inhalte verlorengehen, aber die Struktur der Seiten wird komplett geändert.
Diese Seite hat eben eine andere Entwicklung genommen seit 2000, als das Projekt
gestartet wurde ;-) Ich werde mich bemühen, daß bei ihnen vorhandene
alte Bookmarks wenigstens zu einem Verweis auf die Neustruktur führen,
und die gesuchten Inhalte für sie trotzdem leicht und schnell auffindbar
sein werden.
Die eigentlich zu dieser Seite gehörenden Domains ag-intra.com, ag-intra.org
und ag-intra.de werden von mir geschlossen bzw. gelöscht und unregistriert.
Anleitung - Viele Server: Virtual
Hosts mit Apache und DynDNS
Copyright 2003 by Frank
Gehde
Getestet mit SuSE 8.2 (und 8.0)
Einen eigenen Webserver auf einem Rechner
zuhause laufen lassen, der auch unter einem echten Namen zu erreichen ist?
Oder mehrere? Dank DynDNS und Apache kein Problem.
Zwei Probleme gibt es dabei in der Regel zu lösen. Wie bekomme ich einen
festen Namen zu meiner dynamischen DSL-IP-Adresse (also DSL ist fast Minimum.
Natürlich geht das auch über ISDN oder Modem, aber selbst die 128
K Up-Stream von DSL werden sie in der Praxis lahm finden) und wie kann ich
ein extra Verzeichnis oder mehrere für einen neuen Webserver verwenden.
DynDNS
Wenden wir uns erstmal dem dynamischen DNS zu. Dies ist ein Service, der einen
Nameserver betreibt, und den Kunden mit dynamischen IP-Adressen verwenden
können. Dazu läuft auf dem Rechner, auf dem auch der entsprechende
Webserver läuft, ein Client Programm. Dieses Programm kontrolliert regelmäßig
die IP-Adresse des Rechners. In dem Augenblick, wo sie sich ändert, nimmt
sie Kontakt mit dem Nameserver auf, und teilt die neue IP-Adresse zu dem
entsprechenden Namen mit. Trotz Nameservercaches etc. funktioniert das richtig
gut und der Rechner ist in kürzester Zeit mit der neuen IP unter dem
gewohnten Namen zu erreichen.
Ein beliebter Anbieter für kostenloses DynDNS ist http://www.dyndns.org. Dort kann man sich
einen Namen als Subdomain unter verschiedenen SecondLevel Domains aussuchen.
Als Beispiel nehme ich ag-intranet.homelinux.net und frankie.gotdns.org (das
sind nur Beispiele, die habe ich nicht registriert.)
Apache
Nachdem wir uns also entsprechende Subdomains bei dyndns.org registriert haben,
können wir nun den Apache entsprechend aufbauen. Im Grunde genommen betreibe
ich drei Webserver. Einen, der nur aus dem Intranet erreichbar sein soll,
und zwei, die von aussen aus dem Internet unter den bei dyndns.org registrierten
Namen erreichbar sein sollen. Damit die drei Server laufen, starte ich nicht
dreimal Apache, sondern verwende die Fähigkeit von Apache sogenannte
Virtual Hosts auf Namensbasis zu kontrollieren. Meine drei Server sollen
ja verschiedene Inhalte präsentieren, laufen aber unter der gleichen
IP-Adresse. Apache kann nun anhand des Domainnamens, der vom Client im HTTP-Protokoll
übertragen wird unterscheiden, welcher Server/welche Webseiten angefordert
werden.
Unter SuSE 8.2 befindet sich das eigentliche Rootverzeichnis für den
Standard Apache unter /srv/www/htdocs (früher /usr/local/httpd/htdocs).
Dieses Verzeichnis werde ich als das Standardverzeichnis meines internen Webservers
verwenden, also für den, der nur aus dem Intranet zugänglich ist.
Für meine beiden neuen Server, die auch von aussen erreichbar sein sollen,
lege ich jeweils ein eigenes Verzeichnis unter /srv/www/ag-intranet
und /srv/www/frankiean. Zum Testen bekommt jedes Verzeichnis eine entsprechende
index.html Seite spendiert, oder schon die fertigen Inhalte. Nun muß
dem Apache gesagt werden, daß er Virtuelle Hosts verwenden soll, und
welche. Dazu ändere ich zwei Zeilen in der /etc/httpd/httpd.conf
und füge einige neue hinzu. Zunächst die Änderungen.
Etwa in Zeile 196 befindet sich der folgende Eintrag, bei dem das Kommentarzeichen
(die Raute) entfernt werden muß:
BindAdress *
Etwa in Zeile 1329 befindet sich der folgende Eintrag, bei dem auch das Kommentarzeichen
entfernt werden muß:
NameVirtualHost *
Direkt dahinter befindet sich ein auskommentierter Block mit der Überschrift
VirtualHostExample. Hinter diesem Block füge ich nun meine Definitionen
für meine drei virtuellen Server ein. Dabei ist zu beachten, daß
der erste definierte Server als Standard verwendet wird. Bekommt Apache also
eine Anfrage, die er nicht direkt einem der drei Einträge zuordnen kann,
geht er davon aus, daß der erste Eintrag gemeint ist. Daher steht mein
interner Server nicht als erstes dort. Den dieser soll ja auch im Fehlerfall
nicht standardmäßig nach aussen angezeigt werden. Ausserdem ist
zu beachten, daß der dritte, also mein interner Server nicht unbedingt
als virtueller Host eingerichtet sein muß, sondern auch als _der_ normale
Apache betrachtet werden könnte. Wie man sieht, geht es aber auch so.
Nun also die Einträge:
<VirtualHost *>
ServerAdmin root@lago.heim.netz
DocumentRoot /srv/www/ag-intranet
ServerName ag-intranet.heimlinux.net
ErrorLog /var/log/httpd/http.ag-intranet.error
CustomLog /var/log/httpd/access_log.ag-intranet common
</VirtualHost>
<VirtualHost *>
ServerAdmin root@lago.heim.netz
DocumentRoot /srv/www/frankie
ServerName frankie.gotdns.org
ErrorLog /var/log/httpd/http.frankie.error
CustomLog /var/log/httpd/access_log.frankie common
</VirtualHost>
<VirtualHost *>
ServerAdmin root@lago.heim.netz
DocumentRoot /srv/www//htdocs
ServerName www.heim.netz
ErrorLog /var/log/http.intranet.error
CustomLog /var/log/access_log.intranet common
</VirtualHost>
Ich habe hier die o.g. Namen, und die Beispiel-Namen aus meiner Nameserver
Anleitung verwendet. Der dritte Eintrag funktioniert natürlich so nur,
wenn bei mir ein Nameserver läuft und einen CNAME Eintrag für www.heim.netz
besitzt.
Der Aufbau ist ansonsten einfach. In der ersten Zeile eines Blocks findet
sich die eMail-Adresse an die Apache eMail schicken soll, falls es Probleme
mit dem Server gibt. In der zweiten Zeile wird das Hauptverzeichnis des jeweiligen
virtuellen Servers angegeben. In der dritten Zeile steht der Name des Servers
(damit Apache die Domainnamen aus dem HTTP-Protokoll zuordnen kann). Die letzen
beiden Zeilen bestimmen, wohin Logausgaben für den jeweiligen Server
gehen sollen. Es gibt noch mehr Konfigurationsmöglichkeiten, aber dies
sind die wesentlichen für den Betrieb von virtuellen Servern. Sie können
beliebig viele derartige Blöcke einfügen und damit beliebig viele
virtuelle Server betreiben (okay, beliebig nicht. Irgendeine Grenze wird
es schon geben. Ich weiß leider grad nicht welche das ist, aber bei
den wenigen Servern die ich betreibe geht das. Provider, die mehr Bedarf
haben, werden schon wissen, wo man die Zahl hochschrauben kann :)) Übrigens
könnte man die Blöcke auch in einer gesonderten Datei aufführen
und über eine Include Anweisung in die httpd.conf aufnehmen (der von
SuSE empfohlene Weg).
Nun sollten Sie über den Runlevel Editor (der aus dem YaST2 Controlcenter)
den Apache neustarten (oder überhaupt starten, wenn Sie dies noch nicht
getan haben). Dabei liest er die neue Konfiguration ein. Zum Testen sollte
der interne Server nun schon funktionieren (wenn Sie einen Nameserver laufen
haben :).
Damit ist der Apache eigentlich soweit fit. Sollten Sie Ihre Firewall mit
Iptables komplett zugenagelt haben (wie z.B. in meiner DSL-Anleitung beschrieben),
können Sie mit
iptables -I INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
den Port 80 nach aussen freigeben (ändern Sie ihr Firewallscript auch
so ab, daß der Port 80 auch nach dem nächsten booten offen ist).
Machen wir die anderen beiden Server nun startklar.
DDClient
Wir haben den Apache fit, und die beiden Subdomains bei dyndns.org registriert.
Nun muß dem Nameserver von dyndns.org nur noch die richtige IP-Adresse
mitgeteilt werden. Und dies möglichst auch nach jedem IP-Wechsel. Dazu
kann der bei SuSE 8.2 mitgelieferte ddclient verwendet werden. Das ist ein
kleines Perl Programm, welches als Daemon laufen kann, und dann z.B. alle
5 Minuten überprüft, ob sich die IP-Adresse geändert hat. Wenn
dies der Fall ist, wird die IP an dyndns.org übermittelt, damit der
Zugriff über den Namen klappt.
Zunächst sollte die Konfigurationsdatei /etc/ddclient.conf angepasst
werden. Für mein Beispiel sieht sie so aus (um alle Kommentarzeilen gekürzt):
daemon=300
# check every 300 seconds
syslog=yes
# log update msgs to syslog
mail=root
# mail all msgs to root
mail-failure=root # mail
failed update msgs to root
pid=/var/run/ddclient.pid # record PID in file.
use=if, if=ppp0 # interface
to observe
login=frankie-intranet
password=MeInGeHeImNiS
server=members.dyndns.org, \
protocol=dyndns2
\
ag-intranet.homelinux.net
server=members.dyndns.org, \
protocol=dyndns2
\
frankie.gotdns.org
Der erste Block konfiguriert ddclient selbst. Als zweites folgt das Interface,
daß von ddclient auf IP-Wechsel überwacht werden soll. Das ist
bei meiner DSL-Leitung natürlich ppp0. Dann folgen Nutzername und Passwort
für den dyndns Account. Dann folgen die Blöcke für die Subdomains,
die hier verwendet werden sollen. Das Backslashzeichen darf auf keinen Fall
vergessen werden :) Die 300 bei Daemon ist im übrigen das Intervall,
in dem ddclient auf eine neue IP checken soll. Hier sind es 300 Sekunden,
was im schlimmsten Fall heisst, daß der Rechner täglich maximal
5 Minuten nicht erreichbar ist (geschickter Weise sorgt man dafür, daß
die Zwangstrennung vom Provider irgendwann nachts gegen 04:00 Uhr oder so
stattfindet, und der IP-Wechsel damit selten auffällt).
Nun muss das ganze konsistent gemacht werden. ddclient soll nach jedem Booten
starten. Dazu verwende ich das folgende Startscript, daß ich nach /etc/init.d/ddclient
kopiert habe:
#!/bin/sh
#
# ddclient This shell script takes care of starting
and stopping
#
ddclient.
#
# chkconfig: 2345 65 35
# description: ddclient provides support for updating dynamic DNS services.
[ -f /etc/ddclient.conf ] || exit 0
PATH=/usr/sbin:/root/bin:${PATH}
COLUMNS=9999
export PATH COLUMNS
program=ddclient
# See how we were called.
case "$1" in
start)
# Start daemons.
echo -n "Starting ddclient: "
ddclient -daemon 300
echo
;;
stop)
# Stop daemons.
echo -n "Shutting down ddclient: "
kill `ps -aef | awk '/[ \/]perl.*ddclient/ { print $2}'`
echo
;;
restart)
$0 stop
$0 start
;;
status)
pids=`ps -aef | awk '/[ \/]perl.*ddclient/ { print $2}'`
if test "$pids"
then
for p in $pids
do
echo "$program (pid
$p) is running"
done
else
echo "$program is stopped"
fi
;;
*)
echo "Usage: ddclient {start|stop|restart|status}"
exit 1
esac
exit 0
Das Script muss nun mit
chmod a+x ddclient
noch ausführbar gemacht werden. Dann können über den Runleveleditor
die entsprechernden Start- und Stopscripte in den rc-Directories angelegt
werden. Dort kann das Script auch gleich zum ersten Mal gestartet werden.
Dabei wird nun die aktuelle IP an dyndns.org übertragen. Bei mir ist
es so, daß ich wirklich kurz danach meine beiden Webserver schon über
den Namen ansprechen konnte. Fertig :)
Sicherheit
Wie üblich zum Schluß ein kleiner Sicherheitshinweis. In der Praxis
habe ich gesehen, wie selbst Rechner, die mit ständig wechselnder dynamischer
IP-Adresse ans Internet angebunden waren gehackt worden sind. Dadurch, daß
ein Rechner über einen festen Namen erreichbar ist, erhöht sich
dieses Risiko noch. Jeder Service, der auf dem Rechner läuft und von
aussen erreichbar ist, stellt ein Sicherheitsrisiko dar. Hier ist es der Apache.
Beschäftigen Sie sich mit dem Thema Sicherheit, updaten Sie ihr System
regelmäßig und verfolgen Sie Sicherheitsmeldungen im Internet.
Beschäftigen Sie sich mit der Firewall Iptables und anderen Sicherheitsmechanismen.
Selbst wenn Sie der Meinung sind, daß es auf Ihrem Rechner oder in
Ihrem Netz keine Dateien gibt, die interessant für einen Hacker sind,
denken Sie mal darüber nach, wie es aussieht, wenn von Ihrem Rechner
aus andere Systeme angegriffen werden, 20 Millionen Spams verschickt werden,
oder auf einmal verbotene Dateien auf Ihrem Rechner sind, die vorher nicht
da waren.
|
|
|