Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |
Alle Programme unter UNIX sind darauf ausgelegt, im Netzwerk miteinander kommunizieren zu können. So arbeiten Mailprogramme, DNS - Server, FTP - Server stets Hand in Hand und tauschen Informationen untereinander aus. Diese Programme laufen aber auch, wenn keine Netzwerkkarte eingebaut ist. Der Grund liegt darin, daß diese sich über ein sogenanntes LOOPBACK Interface miteinander unterhalten. Dieses LOOPBACK Interface wird mit lo bezeichnet und besitzt die IP - Nummern 127.x.x.x. Man kann im Prinzip jede vierstellige IP - Nummer angeben, hauptsache sie beginnt mit 127. Dieses wurde in den 70er Jahren so definiert. Man kann es sich anzeigen lassen, wenn man /sbin/ifconfig -a eingibt. Über dieses LOOPBACK Interface findet auch die Kommunikation zwischen X - Windows Client und Server statt, wenn beide auf demselben UNIX Host gestartet sind. Ohne Loopback funktioniert X-Windows sonst nicht oder nur über das Netzwerk. Z.B. ein ping auf die eigene Netzwerkkarte funktioniert ohne aktiviertes LOOPBACK nicht.
Die Ausgabe des Befehls /sbin/ifconfig zeigt:
user01@tunix:/etc > /sbin/ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:349 errors:0 dropped:0 overruns:0 frame:0
TX packets:349 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
eth0 Link encap:Ethernet HWaddr 00:80:AD:30:B6:CA
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1250 errors:0 dropped:0 overruns:0 frame:0
TX packets:795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
Interrupt:10 Base address:0x6600
Man sieht das Loopback Interface lo, welches sich auf die Adresse 127.0.0.1
gebunden hat. Das Device eth0 ist korrekt an die Netzwerkkarte
angebunden.
Weiterhin interessiert die Route, also der Weg, den die die Pakete nehmen: Der Befehl: /sbin/route -n zeigt die Routen an, wobei die Option -n die DNS Namens - Auflösung unterdrückt.
user01@tunix:/etc > /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 6 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 1 lo
Hier sieht man, daß alle Pakete unserer Ethernetkarte eth0 an die Netzwerkadresse 10.0.0.0 gebunden sind, mit einer Netmask 255.255.255.0. Dies bedeutet, daß der Host nun mit 252 anderen Hosts verbunden werden kann, also von 10.0.0.2 bis 10.0.0.254. Die Nummer 10.0.0.255 ist per Definition als Broadcast Adresse (siehe oben) eingetragen.
Das LOOPBACK Interface bindet sich an die interne Netzwerkadresse 127.0.0.0.
Es hat also alles seine Ordnung. Im Übrigen besitzen auch Windows 95 und viele andere Betriebssysteme ein solches: Man muß nur in der DOS-Shell einmal route -print, oder ipconfig oder netstat eintippen, es funktioniert ebenso. Sogar die Datei c:\\windows\etc hat unter Windows eine Funktion. Bestimmte IP - Nummern sind allerdings reserviert und dürfen nicht ohne genaue Kenntnis vergeben werden:
224.0.0.0 für Multicast, also Videoübertragungen
10.0.0.0 und 192.168.0.0 für eigene Netzwerke. Diese werden nicht in das Internet weitergeleitet.
255.255.255.255 für allgemeine Broadcasts
127.0.0.0 für LOOPBACK
Nun zurück zum Paket forwarding
Der Befehl: ipfwadm -F -p deny untersagt die Weiterleitung von Paketen zwischen allen Interfaces. Genaugenommen sind es nun drei Interfaces, eth0 der ersten Netzwerkkarte, eth1 der zweiten Netzwerkkarte und lo, dem Loopback Interface. Eventuell kommt noch eine ISDN-Karte hinzu, diese belegt das Interface ippp0 für ISDN Kanal 1, oder ippp1, für den 2. ISDN-Kanal. Das wären 5 Interfaces. Nun, der Name UNIX kommt nicht von irgendwo, er leitet sich aus UNICS ab, einem UNIversal Computer System. Später wurden nur CS zu X verschmolzen. Linus Torwalds ist genau auf demselben Wege zu dem Namen LINUX gekommen ;-)
Nun muß man sich entscheiden, und diesen Interfaces eine IP - Nummer zuweisen. Damit nicht alle Befehle immer wieder eingegeben werden müssen, schreiben wir diese in eine Skript - Datei. Damit das Skript allgemeingültig ist, werden ab hier Namen statt IP - Nummern eingeführt. Diese bezeichnen Variablennamen für die Abarbeitung in der BASH, der Standard Shell unter Linux. IP - Nummern sind schwer zu merken, und irgendwann hat man keinen Durchblick mehr, welche IP - Nummer und Netzwerknummer welchem Interface zugeordnet ist. Der Befehl set zeigt alle Variablen an. Der Befehl variable=wert weist einer Umgebungsvariablen einen Wert zu. Der Befehl echo echo ${variable} gibt den Wert der Variablen aus.
Somit kann man gleich 3 Fliegen mit einer Klappe schlagen. Erstens kann man die Variablenzuweisungen zu Anfang in eine Datei schreiben, zweitens können wir den Code lesbar und verständlich gestalten, und drittens kann man nun ein allgemeingültiges Skript schreiben, in welches dann nur noch am Anfang die richtigen Netzwerk und IP - Adressen eingetragen werden müssen.
Im folgenden Beispiel wird festgelegt, daß alle Dämonen oder Programme auf der Firewall auf das loopback interface zugreifen können. Das ist insbesondere dann notwendig, wenn man z.B. mit Netscape auf den WWW-Server zugreifen können möchte.
# Das loopback Interface
ipfwadm -I -a accept -W $LOOPBACK
ipfwadm -O -a accept -W $LOOPBACK
Dies bedeutet, daß nur die Dämonen und Programme auf der Firewall selber
untereinander kommunizieren können. Der Verbindungsaufbau über die
Netzwerkkarten dürfte (noch) nicht funktionieren.
Das -a besagt, daß eine Regel zu den bestehenden Regeln hinzugefügt (angehangen) wird (append). Das -W (wichtig: großes W) bezeichnet das Interface. $LOOPBACK_INTERFACE ist der Wert der Variablen LOOPBACK_INTERFACE, dem wir später noch 127.0.0.1 zuweisen müssen. Die beiden Zeilen bedeuten also, daß von allen Interfaces der Verkehr vom und zum loopback Interface erlaubt ist.
Nun ist noch ein kleines Problem zu lösen: Wird ein Programm oder Dämon auf dem Host gestartet, über welches Interface ist dieser ansprechbar, und über welches Interface sendet er irgendwelche Pakete ?
Die Frage ist eindeutig zu beantworten, wenn man sich die Ausgabe von "netstat -a" anschaut:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 1 0 tunix.intra.net:www www.intra.net:1365 ESTABLISHED
tcp 0 0 www.intra.net:1365 tunix.intranet:www ESTBLISHED
tcp 0 0 *:6000 *:* LISTEN
tcp 0 0 *:3128 *:* LISTEN
tcp 0 0 *:auth *:* LISTEN
tcp 0 0 *:pop3 *.* LISTEN
tcp 0 0 *:login *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
Man sieht, daß von tunix.intra.net eine WWW-Verbindung zu www.intra.net und umgekehrt besteht (ESTABLISHED). Diese Verbindung liegt auf Port 1365. Wie kann das, wo doch allgemein bekannt ist, daß eine WWW-Verbindung auf Port 80 erreichbar ist ?
Nun, die Antwort ist etwas komplizierter. Selbstverständlich wird zuerst eine Verbindung auf Port 80 geöffnet. Würden aber beide Partner nun über diesen Port weiter kommunizieren, so könnte weder eine zweite Verbindung zwischen den beiden aufgebaut werden, noch könnte ein dritter Host auf den Port 80 einer der beiden Hosts zugreifen. Genaugenommen wird aus IP - Nummer und Portnummer ein sogenannter HASH Wert für jede TCP/IP Verbindung errechnet, an denen sich die Kommunikationspartner wiedererkennen, auch wenn z.B. ein WWW-Server viele tausend simultane Kommunikationspartner gleichzeitig abzuarbeiten hat. Damit z.B. der Server weiterhin noch für andere Hosts erreichbar ist, verabreden sich Server und Client, nachdem sie sich kontaktiert haben, die weitere Datenübertragung über freie, nicht privilegierte Ports abzuwickeln. Dies sind alle Ports über 1024, nach der Definition der alten BSD UNIX Systeme. Somit wäre der Port 80 wieder frei für neue Anfragen. Man sieht auch einige offene Ports...pop3 LISTEN ? Das bedeutet, daß der POP3 Dämon lauscht, nur an welchem Interface ?
Das entscheidet sich beim Start eines Dämons. Ohne Parameter aufgerufen, bindet er sich an alle Interfaces, die ihm angeboten werden, vorrangig natürlich an das LOOPBACK Interface. Man kann jedem Dämon aber auch genau das Interface angeben, an welches er sich binden soll. Leider haben manche Programmierer von Dämonen vergessen, eine solche Option einzuprogrammieren, sodaß man nicht angeben kann, an welches Interface sich der Dämon bindet. Bei guten Programmen, wie Apache WWW-Server, SAMBA, FTP ....kann man dies genau festlegen. Die Optionen findet man in den Konfigurationsdateien oder man übergibt beim Start des Dämons einen Parameter (Siehe /etc/inetd.conf). Startet man Interfaces, wenn schon Dämonen laufen, dann binden sich diese nachträglich automatisch an das neue Interface. Muß ein Dämon viele Interfaces nach Paketen für ihn überwachen, so verringert sich seine Performance. Dramatische Sicherheitslücken haben sich dadurch bei Installation von Firewalls unter NT und auch UNIX ergeben. Hier war z.B. das Fernwartungs - Interface des Microsoft Firewall - PROXY 1.0/2.0 von außen her erreichbar. Eine winzige Kleinigkeit hat somit die Funktion der Firewall völlig ad absurdum geführt. Leider passieren solche Fehler sehr häufig. Der Hauptgrund liegt wohl darin, daß man als Systemadministrator bei bestimmten Betriebssystemen wohl schon froh ist, wenn alles überhaupt läuft....weitere Untersuchungen mit einer Klärung, warum nun z.B. Windows NT 4.0 SP4 Pakete in andere Netze streut (ISDN Karte, RAS) werden oft nicht angestellt.
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |