Netzwerke,
Firewalls
und
Proxyserver
02/2000
R- Befehle (remote) *
a) rcp *
b) rlogin rlogin [-l username] host *
c) rsh *
Kofiguration der Rechte *
a) /etc/hosts.equiv *
b) die Datei .rhosts i *
Was bringen r- Befehle? *
periodische Zeitaufträge: *
cksum *
touch *
Verteilung von X- Server und X-Client übers Netz *
IP-Adressen, Netzklassen und Netzmasken *
Netz der Klasse A: *
Netz der Klasse B: *
Netz der Klasse C: *
Die Netzmaske ist bitorientiert *
besondere IP- Adressen: *
Netz 200.210.220.0.in 4 Teilnetze aufteilen: *
Konfiguration der interfaces und Konfiguration des Routings *
für das Netz 200.210.220.0 (200.210.220.64, 200.210.220.128,200.210.220.192) *
Rechner im CDI zu Fuß konfigurieren: *
Firewalls *
- Packetfilterung: *
- Masquerading: *
Konfiguration von Tcpd *
Format von Einträgen in /etc/hosts.allow und /etc/hosts.deny : *
inetd *
Backbone *
Masquerader: *
Ipchains *
a) alle eingehenden ICMP- Packete verwerfen (DENY) *
b) voherige Regel wieder löschen *
c) alle ausgehenden ICMP- Meldungen Typ "Port unreachable" verwerfen *
e) jeden Verbindungsaufbau vom lokalen Rechner verhindern (über tcp) *
g) alle auf Port 23 und 80 eingehenden Verbindungen zurückweisen *
Bootvorgang *
Einrichtung eines DHCP- Servers *
DHCP- Server *
Beispielkonfiguration eines DHCP- Servers *
Konfigurationsdatei (Konfigurationsdatei, die der dhcp beim Start einliest) *
ISDN- Karte konfigurieren *
1.) Hardware einrichten: *
2.) ISDN- login konfigurieren *
Masquerading einrichten *
Lösung: *
a) alle ausgehenden Vebindungen von lokalen Hosts akzeptieren: *
b) alle an die lokalen Clients geschickten Antworten akzeptieren: *
c) Anfragen aus dem externen Netz an den lokalen Webserver akzeptieren: *
d) Antworten des lokalen Webesevers: *
e) läßt ICMP explizit durch: *
f) Default- Politik: *
Port- Forwarding *
Hinweise zur Klausur: *
- Zweck: - Ausführung von Befehlen auf einem entfernetn Rechner
(RSH: remote Shell)
- einloggen auf einem entferntem Rechner (rlogin)
- kopieren von Dateien zwischen verschiedenenen Rechnern (rcp),
ohne vorherige Authentifizierung / Passwortabfrage.
- damit ist dass absetzen von Kommandos, das einloggen u.s.w.auch
NICHT INTERAKTIV möglich !!
- Voraussetzungen
- auf den beteiligten Rechnern müssen GLEICHNAMIGE Useraccounts
existieren (d.h. Die Datei /etc/passwd auf den beteiligten Rechnern
mußZeilen mit jeweils den gleichen login. Namen enthalten)
- Die Rechte müssen entsprechend konfiguriert werden
2 Möglichkeiten:
- systemweite Rechtevergabe durch den Systemadminis-
trator in der Datei /etc/hosts.equiv
- eine User- spezifische Rechtevergabe
==> jeder Benutzer kann in einer .rhosts -Datei in seinem
HOME- Verzeichnis die Rechte von Usern anderer
Rechner festlegen, die auf seinen Account zuzugreifen
versuchen.
- Syntax der wichtigsten r- Befehle
rcp host1.cdi.u1:/etc/hosts /tmp
// kopiert die Datei /etc/hosts vom Rechner host.cdi.u1 ins Verzeichnis
// /tmp auf dem lokalen Rechner
rcp /etc/hosts host2.cdi.u1:/tmp
// kppiert die Datei /etc/hosts vom Lokalen Rechner ins Verzeichnis
// /tmp auf host2.cdi.u1
rpc host3.cdi.u1:/etc/hosts host4.cdi.u1:/tmp
// von host3 die /etc/hosts nach /tmp auf host4
b) rlogin rlogin [-l username] host
rlogin host5.cdi.u1
// unter dem Usernamen, unter dem auf dem lokalen Rechner eingelogt wurde
// wird ein login auf dem Zielrechner (host5.cdi.u1) durchgeführt.
//
// bei entsprechender Konfiguration der Rechte mupß KEIN Passwort
// angegeben werden.
rlogin -l hanna host6.cdi.u1
// auf host6.cdi.u1 erfolgt ein login auf dem Usernamen hanna.
//
// dies ist unter bestimmten Voraussetzungen selbst dann möglich, wenn
// auf der lokalen Maschine unter einem ganz anderem Namen eingelogt
wurde
rsh host6.cdi.u1 cat /etc/passwd
// der inhalt von /etc/passwd wird auf dem LOKALEN rechner abgesetzt
// (dem Rechner, auf dem das Kommando abgesetzt wird)
rsh host7.cdi.u1 who > /tmp/users
// alle auf hos7.cdi.u1 angemeldeten User werden in die Datei /tmp/users
// auf dem lokalen Rechner geschrieben
rsh host8.cdi.u1 who ">" /tmp/users
// wie oben, aber Umlenkung in eine Datei auf dem entfernten Rechner
// (festgelegte Konvention)
ASCI- Datei, in der zeilenweise die Rechte konfiguriert werden
host10.cdi.u1
// alle User von host10.cdi.u1, die auf dem lokalen Rechner einen gleichnamigen
// Useraccount haben, können r- Befehle abseten, ohne sich durch ein
// Passwort autentifizieren zu müssen (Abb.:1)
host11.cdi.u1 peter
// Peter hat nun PASSWORTFREIEN Zugriff auf JEDEN Account (exclusive
// root) auf dem lokalen Rechner (Abb.:2)
m home- Verzeichnis eines Users
Mit dieser Datei kann ein Popeluser festlegen, welche Rechte User anderer hosts
haben, wenn sie auf den eigenen Account auf dem lokalen Rechner zugreifen
.hosts in $HOME von User paula
host13.cdi.u1
Ins Besondere, wenn man sich om Batch. Modus befindet, man braucht nicht selber an der Kiste zu hocken
Exkusrs
Zweck: ein Kommando in periodischen Abständen ausführen
- Ein Dämon überprüft regelmäßig, ob Zeitaufträge zur Ausführung vorliegen
(bei Linux = cron)
- Die Berechtigung zum erteilen von Zeitaufträgen ist abhängig von den Dateien
/var/cron/allow /var/cron/deny
- für jeden Benutzer, der Zeitaufträge erteilt, wird unter seinem Loginnamen
eineDatei angelegt und im Verzeichnis /var/cron/tabs abgalagt
- Jede Zeile dieser Datei muß einen bestimmten Aufbau haben
(siehe Kopie 14.02.00, Tabelle B-2)
- Erteilung von zeitaufträgen erfolgt mit dem Kommando: crontab -e
...es wird ein Editor gestartet, in dem in der edtierten Datei Zeilen gemäß
dem besprochenen Format eingetragen werden.
(u.U. Die Datei /var/cron/allow löschen )
Bsp.: Jede Minute soll die Datei /tmp/users um eine Zeile ergänzt werden, die die Anzahl
aller aktuekk angemeldeten User anthält
Voraussetzungen: crontab -e
//vi wird gestartet
Eintrag:
* * * * * /usr/bin/who | wc -l >> /tmp/users
aufhören: Eintrag löschen
Hinweis: für eine Datei kann eine Prüfsumme gebildet werden mit dem
Kommando: cksum
Legt eine Prüfsumme für eine Datei an.
Syntax:
cksum [optionen]... [datei]...
Ändert den Zeitstempel einer Datei auf die aktuelle Zeit. Wird kein Dateiname angegeben, so erzeugt touch
eine Datei mit dem angegebenen Namen.
Syntax:
touch dateiname
Aufgabe: jeden Werktag zwischen 8 und 17 Uhr soll stündlich überprüft werden,
ob sich der inhalt der Datei /tmp/boerse.org auf einem Rechner geändert hat.
Wenn das der Fall ist, soll die Datei auf den lokalen Rechner kopiert werden.
Falls sie sich geändert hat, soll sie auf den lokalen Rechner
kopiert werden
Lösung: quelle.cdi.u1 ziel.cdi.u1
#kopiert /tmp/boerse.org
#von quelle.cdi.u1
Voraussetzung: - gleichnamige Useraccounts auf quelle... und ziel.cdi.u1
quelle.cdi.u1 muß Rechte zur ausführung von r. Befehlen
erteilen a) Eintrag in /etc/hosts.equiv: ziel.cdi.u1
b) .rhosts in $HOME des Users, der die
Datei kopiert (auf Quelle.cdi.u1) ziel.cdi.u1
Achtung!!! der angegebene Hostname muß auf eine IP- Adresse abgebildet werden können!!
ein shellscript schreiben: x-Recht nicht vergessen !
- in einer rsh die Prüfsumme der Datei /tmp/boerse.org ermitteln
(mittels cksum) und in einer Variablen ablegen
- Die Prüfsumme der Datei /tmp/boerse.org vom lokalen Rechner in einer
zweiten Variablen ablegen
- Variablen vergleichen: bei ungleichheit mittels rcp die Datei /tmp/boerse.org
neu übertragen
script:
CKNEU='rsh quelle.cdi.u1 cksum /tmp/boerse.org | cut `-d ` -f1'
CKALT='cksum/tmp/boerse.org `-d ` -f1'
if [ !$CKALT=$CKNEU ]
then
rcp quelle.cdi.u1:/tmp/boerse.org /tmp/boerse.org
echo "boerse kopiert: 'date'" | mail [user]
fi
Erteilung des Zeitauftrages:
- als Popeluser: crontab -e
0 8-17 * * 1-5 /scripte/perl/boerse.sh
Datei mit beliebigenm Inhalt /tmp/boerse.org anlegen
(tuch /tmp/boerse.org legt Datei an, wenn sie nicht existiert,
wenn doch, dann wird der Zeitstempel geändert)
Verteilung von X- Server und X-Client übers Netz
- X- Server und X- Client kommunizieren über ein netzwerkfähiges Protokoll namens X
miteinander
- X- Server ist dabei zuständig für die Ansteuerung der Grafikkarte und die Verarbeitung
von Maus- und Tastaturereignissen,
X- Client für die eigentliche Logik der Anwendung
- da X ein netzwerkfähiges Protokoll ist, ist es nicht erforderlich, daß X- Server und
X- Client auf demselben Rechner liegen.
- X ist ein plattformunabhängiges Protokoll, d.h. Jeder X- Client kann mit jedem
X- Server komunizieren. (so gibt es z.B. X- Server auch für WIN x.x (ca. 1000 DM))
- damit x- Client und X- Server übers Netz miteinander kommunizieren können, müssen
2 Voraussetzungen erfüllt sein:
- der Host, auf dem der X- Server läuft, muß ausdrücklich bestimmten Hosts die
Erlaubnis erteilen, das dort gestartete X- Clients sich mit dem lokalen X- Server
verbinden: xhost +h40.cdi.u1 // X- Clients von h40.cdi u1 dürfen den lokalen
// X- Server ansprechen
- der X- Client muß den Host spezifizieren, dessen X- Server er kontaktieren möchte zwei Möglichkeiten: - die Option -display
- die Umgebungsvariable DISPLAY
Bsp.: h50.cdi.u1 h51.cdi.u1
1. #xhost +h51.cdi.u1 protokol TCP/I P 2. $xterm -display h50.cdi.u1:0.0
3. xtermfenster geht auf
Übung: bringen sie folgendes Kommando zum laufen und klären sie alle rechtlichen
Voraussetzungen: rsh h70.cdi.u1 /usr/x11R6/bin/netscape -display H71.cdi.u10.0
IP-Adressen, Netzklassen und Netzmasken
Für routing im Internet ist ausschließlich der Netzanteil der IP-Adresse maßgebend und nicht derHost-Anteil. Ob ein Zielrechner direkt erreichbar ist, oder nur über ein Gateway, ergibt sich aus den netzanteilen von Quell- und Zielrechner.
Für den Netzanteil einer IP-Adresse ist zunächst die Netzklasse maßgebend. Die Netzklasse wiederum ist abhängig von dem höchstwertigen Bit im höchstwertigen Byte der IP-Adresse.
IP-Adressen werden in die Adreßklassen A bis E eingeteilt.
Die Klassen A, B und C stehen für die normale Adressierung und für
Host-zu-Host-Kommunikation zur Verfügung. Dabei gilt:
Höchstwertiges Bit im ersten Byte: 0
Netzanteil der IP-Adresse: 1 Byte
Hostanteil der IP-Adresse: 3 Byte
Damit gibt es 2^7 Netze der Klasse A, also 128, mit jeweils 2^24
Hosts. Bei Netzen der Klasse A liegt das erste Byte der IP-Adresse im Bereich
von 0 bis 127
Die beiden höchstwertigen Bit im ersten Byte: 10
Netzanteil der IP-Adresse: 2 Byte
Host-Anteil der IP-Adresse: 2 Byte
Damit gibt es also 2^14 Netze der Klasse B, also 16.384, mit jeweils 2^16, also 65536 Hosts. Bei
Netzen der Klasse B liegt das erste Byte im Bereich von 128 bis 191.
Die 3 höchstwertigen Bit im ersten Byte: 110
Netzanteil der IP-Adresse: 3 Byte
Hostanteil der IP-Adresse: 1 Byte
Damit gibt es 2^21 Netze der Klasse C, also 2.097.152, mit jeweils 2^8 Hosts, also 256. Bei Netzen der
Klasse C liegt das erste Byte der IP-Adresse im Bereich von 192 bis 223.
Sehr häufig ist es erforderlich, ein Netz einer gegebenen Klasse in weitere Teilnetze aufzuteilen, also dafür zu sorgen, daß der Netzanteil der IP-Adresse größer (und der Hostanteil der IP-Adresse entsprechend kleiner) wird, als es von der Netzklasse her der Fall wäre. Gründe für die Aufteilung eines Netzes in mehr Teilnetze, als es von der IP-Adreßklasse her eigentlich gegeben wäre.
Bandbreite (von 2^24 möglichen Hosts) --> nicht zu viele Stationen an ein und demselben
Übertragungsmedium.
Beschränkung der Anzahl Stationen pro Segment
Beschränkung der Länge eines Segments. (Auch für Verstärkung gibt es eine Obergrenze)
Ausfallsicherheit
Verwaltung, Organisation, Administration vereinfachen
Beispiel:
CDI hat Adreßklasse A, dieses Netz wird in viele weitere Teilnetze
unterteilt.
10.180.213.56
10.180.130.131
(10) Netz der Klasse A
(10) Netz der Klasse A
--> 180.213.56 = Host
--> 180.131.130 = Host
Ein Netz einer gegebenen Klasse kann durch Setzen einer geeigneten Netzmaske (Subnet-Mask) in weitere Teilnetze aufgeteilt werden. Dabei gilt:
Die Netzmaske ist eine 4-Byte-Größe. Notierung wie bei
IP-Adresse: Dezimalzahlen, getrennt durch Punkt.
Jedes in einer Netzmaske gesetzte Bit wird dem Netzanteil der Adresse
zugeschlagen. Der Rest liefert den Hostanteil.
Die Netzmaske ist bitorientiert
Man erhält den Netzanteil einer IP-Adresse, indem man die Adresse mit der Netzmaske bitweise undiert
(UND-Verknüpfung).
Standard-Netzmasken
Klasse A: 255.0.0.0
Klasse B: 255.255.0.0
Klasse C: 255.255.255.0
Beispiele:
Ein Netz der Klasse A soll so in weitere Teilnetze unterteilt werden, daß die ersten 3 Byte den
Netzanteil ausmachen und nicht nur das erste Byte:
Subnet-Maske = 255.255.255.0
Ein Netz der Klasse C soll in 4 Teilnetze aufgeteilt werden
Subnet-Maske = 255.255.255.192
Host1 = 192.168.17.200 Netzmaske: 255.255.255.192
Host2 = 192.168.17.220 Netzmaske: 255.255.255.192
Host1 = 11000000.10101000.00010001.11000100 (Gelb=Netzanteil)
Host2 = 11000000.10101000.00010001.11011100 (Gelb=Netzanteil)
Übung:
Ein Netz der Klasse C soll in 4 Teilnetze aufgeteilt werden.
Netz: 200.210.220.0
Netzmaske: 255.255.255.192
1.Teilnetz 200.210.220.0 letztes Byte: 00000000
Broadcast-Adresse: 200.210.220.63 letztes Byte: 00111111
Gültige Host-Adressen: 200.210.220.1 bis 200.210.220.62
2.Teilnetz: 200.210.220.64 letztes Byte: 01000000
Broadcast-Adresse: 200.210.220.127 letzt. Byte: 01111111
Gültige Host-Adressen: 200.210.220.65 bis 200.210.220.126
3.Teilnetz: 200.210.220.128 letztes Byte: 10000000
Broadcast-Adresse: 200.210.220.191 letzt. Byte: 10111111
Gültige Host-Adressen: 200.210.220.129 bis 200.210.220.190
4.Teilnetz: 200.210.220.192 letztes Byte: 11000000
Broadcast-Adresse: 200.210.220.255 letzt. Byte: 11111111
Gültige Host-Adressen: 200.210.220.193 bis 200.210.220.254
Netzadresse: alle Bits im Hostanteil = 0
Broadcastadresse: alle Bits im hostanteil auf 1
127.0.0.0 pseudonetz, daß über den folgenden device erreichbar ist:
127.0.0.1 loopback-Adresse (localhost); device: lo
ping 192.168.17.255 C- Netz ping, das als Broadcast an alle Hosts im Netz 192.168.17
gerichtet ist
IP- Adresse und Netzmaske gegeben
gesucht: Netzanteil der IP- Adresse:
bitweises undieren von IP- Adresse und Netzmaske
Broadcastadresse:
bitweises Oderieren mit der invertierten Netzmaske
Bsp.: Netz: 200.210.220.64
Maske: 255.255.255.192
0.0.0.63
Broadcast: 200.210.220.127
Netz 200.210.220.0.in 4 Teilnetze aufteilen:
1. Teilnetz: Netz: 200.210.220.0
Broadcast: 200.210.220.63
Hostadrr.: ....1 - .....62
Konfiguration der interfaces und Konfiguration des Routings
für das Netz 200.210.220.0 (200.210.220.64, 200.210.220.128,200.210.220.192)
a) Hosts mit EINEM Ethernetinterface, die keine weiteren interfaces haben
(weder eine 2. Ethernet- Karte, noch eine ISDN- Karte, noch ein Modem)
Bsp.: Host 200.210.220.130 wird konfiguriert (Natz: 200.210.220.128)
ifconfig eth0 200.210.220.130 netmask 255.255.255.192
(bei SUSE: Datei: /sbin/init.d/network)
// bis jetzt sind nur Hosts im Teilnetz 200.210.220.128 erreichbar.
// ein ping 200.210.220.121 funktioniert
// ein ping 200.210.220.230 funktioniert nicht
// dem Kernel muß noch gesagt werden, welcher host im selben Teilnetz das
// Tor zum Rest der Welt ist.
route add default gw 200.210.220.129
default- route geht über das Gateway 200.210.220.129
b) Konfiguration eines Gateways am Beispiel von GW2
ifconfig eth0 200.210.220.2(3) netmask 255.255.255.192 (Teilnetz 0)
ifconfig eth1 200.210.220.129(65) netmask 255.255.255.192 (Teilnetz
01)
// was geht bis jetzt ??
- Rechner .130 ....... .190 erreichbar
- Rechner .1 ........ .62 erreichbar (Backbone)
// nicht erreichbar !!
- 200.210.220.64 und 200.210.220.192
- der Rest der Welt
// route für 200.210.220.64
route add -net 200.210.220.64 gw 200.210.220.3
// route für 200.210.220.192
route add -net 200.210.220.192 gw 200.210.220.1
// default- gateway(ISDN- Karte sei in 200.210.220.62)
route add default gw 200.210.220.62
Rechner im CDI zu Fuß konfigurieren:
a) Yast aufrufen und eth0 deaktivieren (Netzwerk- Grundkonfiguration)
b) Rechner neu Booten ( reboot oder shutdown -r now
c) ifconfig (return)
// es wird nur das LOOPBACK. Device mit der Adresse 127.0.0.1 angezeigt
d) Ethernetkarte konfigurieren
- Treiber laden: insmod /lib/modules/2.2.13/net/eepro100.0
modpro....... (hier werden evtl. Abhängigkeiten von anderen
Treibern geprüft und evtl diese nachgeladen)
- Testen: lsmod zeigt alle geledenen Module an
- Adresse und Netzmaske zuweisen: (interface konfigurieren)
ifconfig eth0 10.180.213.57 netmask 255.255.255.0
// ping 10.10.213.1 geht, aber ping 10.180.130.131 geht nicht
rout add default gw 10.180.213.1
eth0......eth3 // Ethernet- karten
ipp0.....ipp3 // ISDN- Karten
ppp0....ppp3 // Modem
Trennt ein zu Schützendes Netz von einem als unzuverlässig betrachteten Netz
Prinzip:
- IP- Adressen (oder Hostnamen, Domainnamen)
- Transportschicht/ICMP
- UDP
- TCP
- ICMP
- Ports (Dienste der Anwendungsschicht)
- Richtung des Verbindungsaufbaus, .......
Einfachster Fall:
- das zu schützende Netz, besteht nur aus einem einzigen host
- Masquerading entfällt
- Packetfilter soll/kann/muß eingesetzt werden
==> konfiguration von TCPD
--> /ettc/hosts.allow
--> /etc/hosts.deny
--> man TCPD
--> man 5 hosts_access
Zugriffskontrolle:
- Zugriff wird erlaubt, wenn ein match in /etc/hosts.allow gefunden wird
- andernfalls wird- wenn ein match in /etc/hosts.deny gefunden wird- der Zugriff
verweigert
- andernfalls- wird kein match gefunden- wird der zugriff erlaubt
Format von Einträgen in /etc/hosts.allow und /etc/hosts.deny :
- demonlist : clientlist [: shellkommando]
- Feldtrennzeichen: space oder Kommas
- demonlist enthält die Namen von Dämonen gemäß letztem feld in /etc/inetd.conf
- pattern (Muster) .tue.nl (in client_list) // match, wenn FQDN mit .tue.nl endet
131.155. // match, für hosts im Netz 131.155.0.0
- wildcards ALL // alle Dämonen/ clients
Politik: alles ist erlaubt, es sei denn, es wird ausdrücklich verboten
Lösung: /etc/hosts.allow LEER /etc/hosts.deny ALLE VERBOTE
Politik: alles verboten, es sei denn es wird ausdrücklich erlaubt (üblich)
Lösung: /etc/hosts.deny ALL : ALL /etc/hosts.allow alles, was erlaubt wird
Praktikum:
- Erlauben Sie Zwei hosts im Netz 10.180.213.0 ALLES auf ihrem host
/etc/hosts.allow ALL : 10.180.213.xx,10.180.213.xy
- Erlauben sie einem host im Netz 10.180.213.0 TELNET- Sitzungen zu
starten und sonst NICHTS
/etc/hosts.allow in.telnetd : 10.180.213.xx
- Alle anderen hosts dürfen NICHTS
/etc/hosts.deny ALL : ALL
- Mit welchen Rechten wird ein übr TCPD gestartetes Script ausgeführt ?
(siehe manpage zu hosts_options, section 5)
in.ftpd : ALL : /usr/bin/id >> /tmp/tcpdid
==> /var/log/messages TCPD hat gemeckert
==> man 5 hosts_options
==> ALSO RICHTIG: in.ftpd : ALL : spawn (/usr/bin/id >> /tmp/tcpdid)
Was passiert, wenn TCPD eine Verbindung zurückweist ?
Fehlersuche:
Sie wollen TCPD- konfiguration testen und setzen folgendes komando
ab:
ftp 10.180.213.60
a) no rout to host wahrscheinlich: IP- Adresse oder Netzmaske an
eth0 ist falsch auf dem lokal. Rechner
b) timeout Zielrechner falsch konfiguriert
c) auf dem Zielrechner läuft kein inetd (connection refused)
d) auf Zielrechner läuft inetd, aber ftp ist auskommentiert
in /etc/inetd.conf
e) Formatfehler in /etc/hosts.allow oder /etc/hosts.deny auf Zielrechner:
==> /var/log/messages
f) ftp hennes.cdi.u1 Fehler bei Namensauflösung:
- der eingetragene NS läuft nicht
- falscher NS in /etc/resolv.conf eingetragen
- /etc/hosts liefert keine Info
Datei: /etc/inetd.conf inetd
/etc/hosts.allow tcpd
/etc/hosts.deny tcpd
Wichtiger Satz
startet, sofern in /etc/inetd.conf entsprechend konfiguriert, bei Anfragen auf
bestimmten Ports, den tcp- wrapper TCPD, der seinerseits die Dateien
/etc/hosts.allow und /etc/hosts.deny einliest und auswertet und, bei gegebenen Rechten,
als Dämon den, in /etc/inetd.conf im letzten Feld als Dämon angegebenen Dienst
startet
Schema: Popeluser: ftp 10.180.213.57
Was passiert ?:
- ist ein Netz, in dem Hosts hängen, die durch ein weiteres Interface mit einem anderen Netz
verbunden sind.
Seite 12, Abb.:2.2
- Alle Hosts im Teilnetz 192.168.0.0/24 haben private IP- Adressen, also IP- Adressen, die im Internet NICHT geroutet erden
==> dises Hosts sind vom Internet aus über ihre IP- Adresse NICHT erreichbar
--> Verbindungen zu Hosts im Internet sind nur möglich, wenn Proxyserver
eingesetzt werden, oder IP- Masquerading zum Einsatz kommt
==> relativ guter Schutz der host in 192.168.0, weil diese von außen überhaupt nicht
sichtbar sind (Bsp.: Lohn, Gehalt, Warenwirtschaft,....)
Rechner: Port: Rechner: Port:
192.168.0.17 1030 192.168.0.18 1030
ftp- Server:
130.140.150.160
Ziel: 130.140.150.160:21 Ziel: 130.140.150.160:21
Quelle:192.168.0.17:1030 Quelle:192.168.0.17:1030
- erzeugt aus Quellport und Quelladresse (der Hosts im Privaten Netz)dynamisch eine eigene
Portnummer, und merkt sich die zugehörige ursprüngliche Quellport und Quelladresse
- Quelladresse im IP- Header des Datagramms, daß er über eth1 ins Internet schickt,
wird durch die eigene IP- Adresse (im Bsp.: 192.141.17.132) ersetzt.
- Quellport des privaten Rechners wird durch die dynamisch erzeugte Portnummer ersetzt.
- In den Datagrammen, die als Antwort eintreffen, wird auf der Basis des Zielports im
IP- Header und der Internen Tabelle wieder die ursprüngliche private IP- Adresse als
Zieladresse eingetragen,
- als Zielport im TCP oder UDP Header wird wieder die
ursprüngliche Quellportnummer eingetragen und
- das Datagramm wird über eth0 ins private Netz geschickt.
- setzen, ändern, löschen von Packetfilterregeln:
-A output ans Ende der chain Output eine neue Regel anhängen
- s $IP-INET 1024: alle Packete mit der Quelladr. $IP_INET(IP- Adresse von ippp0)
und einem Quellport von >=1024
- -dport 80 Zielport 80
-p tcp Protokoll tcp
-i $DEV_INET Netzinterface auf der Internetseite (hier ISDN-karte ippp0)
-j ACCEPT akzeptiert
in einem Satz:
Die chain output wird um eine Regel am Ende ergänzt (-A), die besagt, daß alle Datgramme mit der Quelladresse $IP_INET (die echte, i.d.r. Dynamisch zugewiesene IP- Adresse) und einem Quellport >= 1024, die an beliebige Hosts mit dem Zielport 80 mit dem Transportprotokoll Tcp geschickt werden, akzeptiert werden, wenn sie vom Interface $DEV_INET ( ippp0 ) kommen.
-A input akzeptiere alle Packete aus dem lokalen Netz mit einem Quelport -s $LNET 1024: >1024, die an das lokale interface des Proxys (eth0, 192.168.0.1)
-d $IP_LNET 8080 und dem Port 8080 mit dem Protokoll tcp gerichtet sind; füge die
-p tcp ans Ende der bestehenden Regelliste an
-i $DEV_LNET
-j ACCEPT
Praktikum:
Regeln aufstellen und testen
a) alle eingehenden ICMP- Packete verwerfen (DENY)
ipchains -A input -p icmp -j DENY ok
b) voherige Regel wieder löschen
ipchains -D input -p icmp -j DENY ok
c) alle ausgehenden ICMP- Meldungen Typ "Port unreachable" verwerfen
(test: UDPSEND.PL an Einen Rechner ein Packet senden)
ipchains -A output -p ICMP --sport port-unreachable -j DENY ok
d) voherige Regel wieder löschen
ipchains -D output -p ICMP --sport port-unreachable -j DENY ok
e) jeden Verbindungsaufbau vom lokalen Rechner verhindern (über tcp)
eingehende Verbindugen werden nachwievor angenommen
ipchains -A output -p tcp -y -j DENY ok
f) voherige Regel wieder löschen
ipchains -D output -p tcp -y -j DENY ok
g) alle auf Port 23 und 80 eingehenden Verbindungen zurückweisen
ipchains -a input -j REJECT
wenn m nain UNIX eine Option mit mehr als einem Zeichen eingeben will, dann --
Bsp.: ls -lisa == Optionen l, i, s, a
xx --lisa == Option "lisa"
Übungen 18.2.00
9.) a) pscan 10.180.213.60 1234 udp
#!/usr/bin/perl
use IO::Socket;
$socket = new IO::Socket::INET(
Peer Addr => $ARGV[0];
Peer Port => $ARGV[1];
Proto => $ARGV[3]);
if (!$Socket)
die "nix los an Port $ARGV[1]\n";
print $socket "blabla";
close ($socket);
- bei udp wird socket ohne Fehler erzeugt auch wenn Zierechner an diesem
Portnicht lauscht
b) pscan 10.180.213.60 1234 tcp
- socket krepiert, wenn an Port 1234 nix los ist
14.)
ipchains -A input --sport 80 -d 192.150.160.170 1024: !-y -i ippp0
-p tcp -j ACCEPT
- gesteuert durch Scripts, die in diversen Runleveln gestartet werden
- diese Scripts liegen in den Verzeichnissen rc0.d, rc1.d, rc2.d, rc3.d in /sbin/init.d
- jedes dieser Scripts beginnt mit entweder
Snn - Startskript beim Eintreten in das Runlevel
Knn - Stoppscrpt beim Verlassen des Runlevels
- bei diesen Scripts handelt es sich jeweils um die selbe Datei, nämlich um einen
symbolischen Link auf ein Script in /sbin/init.d
- ob ein Script als Start- oder Stopscript fungiert, hängt davon ab, ob es als Start-
Stopscript aufgerufen wird.
- jedes der Scripts liest am Anfang die zentrale Konfigurationsdatei /etc/rc.config ein
und macht sein weiteres Verhalten von Variablen in dieser Datei abhängig.
Aufgabe:
- /etc/rc.config um eine Variable ergänzen, nämlich die Variable ICMPDENY
- ist diese Variable auf YES gesetzt, dann soll automatisch beim Eintritt in runlevel 2
JEDER ausgehende ICMP- Verkehr an eth0 verworfen werden
/sbin/init.d
noicmp // shellscript (liest /etc/rc.config ein- wegen ICMPDENY)
/sbin/init.d/rc2.d
S99noicmp
K01noicmp
Script- noicmp: meine Lösumg
#!/usr/bin/sh
. /etc/rc.config //. damit die Änderungen wirksam werden
if test $ICMPDENY = "yes"
then
if test $1= "start"
then
/sbin/ipchains -A output -p icmp -j DENY;
fi
if test $1= "stop"
then
/sbin/ipchains -D output -p icmp -j DENY;
fi
fi
Gemeinsame Lösung:
a) // script- noicmp im Verzeichnis /sbin/init.d
#!/bin/sh
. /etc/rc.config // ". " damit kein Kindprozess gestartet wird, d.h. Nur so sind
// alle Variablen wirksam
if [ $ICMPDENY = "yes" ]
then
case "$1" in
start)
echo -e "starting noicmp"
/sbin/ipchains -A output -p icmp -j DENY;;
case "$1" in
stop)
echo -e "stopping noicmp"
/sbin/ipchains -D output -p icmp -j DENY;;
esac
fi
b) x- Recht für noicmp chmod a+x /bin/init.d/noicmp
c) symbolische Links ln -s /sbin/init.d/noicmp /sbin/init.d/rc2.d/S99noicmp
ln -s /sbin/init.d/noicmp /sbin/init.d/rc2.d/K01noicmp
d) Variable setzen vi /etc/rc.config ICMPDENY= "yes" //speichern
e) testen init 1/2; /sbin/init.d/noicmp start/stop ipchains -L
nfs
(Packet nfsserver (aus Serie n) installieren)
- nfs network file system
- Import oder Export von Dateisystemen / Verzeichnissen übers Netz
- Erforderliche Dämonen
- portmap
- rpc.mountd
- rpc.nfsd
- Einhängen deines Dateisystems über nfs:
mount -t nfs h1.cdi.u1:/cdrom /mnt
// hängt das Verzeichis cdrom von h1.cdi.u1 im Verzeichnis /mnt des lokalen
// Rechners ein.
Freigebe von Verzeichnissen zum mounten:
- Datei: /etc/exports
Aufbau: Verzeichnis [host1(optionen1) host2(Optionen2) ....] [ ] = optional
==> bei leerer Hostliste darf die ganze Welt mounten
- wichtige Optionen:
rw read and write
ro read only
no_root_sqash - per Voreinstellung arbeitet root auf einem mittels nfs
gemountetem Dateisystem nur stark eingeschränkte
Rechte, (nouser und nogroup)
- sollen die root- Rechte erhalten bleiben, so muß als
mount- Option no_root_squash angegeben werden.
Aufgabe: 2 Packete installieren (über nfs): (bei yast: Installationsquelle nfs), Serie n
- dhcpserver
- dhc- client
Installaton übers Netz:
- Konfiguration des Rechners der als nfs- Server für die Installation dient.
- Dämonen, die laufen müssen:
portmap (START_PORTMAP in /etc/rc.config)
rpc.mountd
rpc.nfsd (NFS_SERVER in /etc/rc.config)
- Installations- CD muß gemountet sein:
mount -t iso9660 /dev/cdrom /mnt
- Freigabe in /etc/exports (weltweit)
/mnt
- an die Dämonen rpc.nfsd rpc.mountd das Signal HUP schicken (sofern die Frei-
gabe in /etc/exports NACH dem Start dieser Dämonen erfolgte).
- Einrichtung des clients:
- YAST
- Installationsquelle festlegen
- Installation über nfs
- IP- Adresse und Verzeichnis angeben
IP- Adressen 10.180.213.55
Verzeichnis /mnt/suse (hä??)
Einrichtung eines DHCP- Servers
- DHCP- Server unter Linux
- konf- Datei: /etc/dhcp.conf
- Testen des Servers: mit Win 95 clients
(TCP/IP konfiguration IP- Adresse dynamisch beziehen)
( testen der Clients auf der Kommandozeile mit winipconfig)
- statische IP- Adressvergabe: jeder Host bekommt vom DHCP- Server statisch
auf Basis seiner MAC- Adresse die IP- Adresse
zugewiesen. (immer die gleiche)
- die folgenden weiteren Konfigurationsinformationen werden ebenfalls geliefert
Ip- Adresse des Name-Servers
Ip- Adresse des Gateways
Netzmaske
Beispielkonfiguration eines DHCP- Servers
Konfigurationsdatei (Konfigurationsdatei, die der dhcp beim Start einliest)
#/etc/dcpd.conf
#für alle Netze gemeinsame Werte:
server-identifier gzagp.gz.de;
option domainname "gz.de";
option domain-name-servers gzagp.gz.de;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.17.0 netmask 255.255.255.0 {
option routers gzagp1.gz.de;
}
subnet 192.168.18.0 netmask 255.255.255.0 {
option routers gzagp2.gz.de;
}
host gzscsi.gz.de {
hardware ethernet nn.nn.nn.nn.nn.nn;
fixed-address 192.168.17.42;
}
host gzatapi.gz.de {
hardware ethernet nn.nn.nn.nn.nn.nn;
fixed-address 192.168.17.41;
}
.........................
Abb.: 22.02..1
.........................
==> Statusmeldungen, etc. stehen in /var/log/messages
==> jede Zuweisung einer Konfiguration wird protokolliert
==> beteiligten Protokolle: siehe /etc/services (herausfinden mit tcpdum)
--> bootpc 68/udp (client)
--> bootps 67/udp (server)
==> geprüft wird unter WIN95
- Karte: Fritz- Card Classic
IRQ 5
IO- Port 300
- Privider: T- online
- eigene Rufnummer: 282676
- PPP- login: 00014878/12030711282676#0001
- Passwort: XXXX XXXX
I4L starten [x] // wenn X, dann wird die ISDN- karte beim Wechsel in runlevel 2
automatisch aktiviert.
Skript: /sbin/init.d/i4l
ISDN- Protokoll: Euro- ISDN
Typ der Karte: Teledat 150
Kennung der Karte: HiSax
IRQ 5
IO- Port 300
==> Testen (==> /var/log/messages)
- Netzwerkhrundkonfiguration
ISDN SyncPPP ippp0 192.168.0.99 192.168.00.1
// Pseudo- IP- Adressen (beliebig)
// werden beim login durch echte IP- Adressen
ersetzt (im rahmen des Protokolls, daß beim
einloggen abgearbeitet wird.
==> F8 = ISDN
neues Fenster
Typ des Netzwerkes ippp0
Nummer (eigene) 282676
anzurufende Nummer 0191011
Nummern, die anrufen dürfen --
........
Wählmodus: auto
idle- time 60 // nach 60 sek. Abwahl, falls kein Daten-
// transfer mehr stattfindet
max. Wählversuche 5
Name des PPP- login 000148781203/0711282676#0001 Passwort: xxxxxxxx /etc/ppp/pup-secrets
Soweit erforderlich, noch festlegen, daß die Default- Route über IPPP0 geht:
==> route add default ippp0
==> ACHTUNG!!!
wird der Rechner so konfiguriert, daß die Default- Route über das ISDN- Device geht,
führt JEDER Aufbau zu einem NICHT- LOKALEN Rechner zu einem automatischen Verbindungsaufbau über die ISDN- Karte.
Bsp.: route
Quintessenz: Wenn bein Wählvorgang AUTO eingestellt wurde und wenn die Default-Route
über ippp0 geht, sieht es aus der Sicht des Anwenders fast so aus, als ob er
permanent mit dem internet verbunden wäre.
Bsp.: ping www.heise.de // in /etc/resolv.conf steht die IP- Adresse des Nameservers
// der Providers
Buchtipp:
Linux- Wegweiser für Onliner O`Reilly Michael Renner
Aufgaben:
1.) lokales Netz mit privaten IP- Adressen soll über einen host mit eingebeuter ISDN-
Karte ans Internet angebunden werden;
die Anbindug soll durch maskieren der privaten Adressan erfolgen
Wie ist das Masquerading einzurichten ?
2.) Wie sind die Router einzurichten, die die 4 Teilnetze (hier im Klassenraum) über ein
Backbone miteinander verbunden werden.
Abb.: 22.02..2
a) eine neue, benutzerdefinierte chain erstellen
/sbin/ipchains -N user_msq
b) /sbin/ipchains -A user_msq -s 0/0 -d 0/0 -j MASQ
c) /sbin/ipchains -A forward -s 192.168.17.0/24 -d 0/0 -i ippp0 -j
user_msq
Einrichtung der Router
- Treiber für die 3com- Karte laden: yast- Administration- Hardware integrieren- Netzkarte
oder: insmod /lib/modules/(kernelrelease)/net/3c....0
- IP- Adresse und Netzmaske zuweisen
- routing für die Teilnetze am Beispiel von 10.180.213.50
route add -net 10.180.101.0 netmask 255.255.255.0 gw 10.180.213.56
route add -net 10.180.102.0 netmask 255.255.255.0 gw 10.180.213.61
route add -net 10.180.103.0 netmask 255.255.255.0 gw 10.180.213.70
- echo 1 > /proc/sys/net/ipv4/ip_forward (ipforwarding aktivieren)
Wiederholung
Natzwerkkarte zum laufen bringen
echo 1 > /proc/sys/net/ipv4/ip_forward (ipforwarding aktivieren)
Routing einrichten
siehe oben (3 Routen)
1 Aufgabe: statisches Routing komplettieren
- testen
- traceroute--- auf eienen Host im Internet von einem Host in einem inneren Netz.
/sbin/ipchains -N user_msq
/sbin/ipchains -A user_msq -s 0/0 -d 0/0 -j MASQ
/sbin/ipchains -A forward -s 10.180.100.0/24 -d 0/0 -i eth0 -j usr_msq
3. Masquerating wieder ausschalten (ipchains -F)
4. Router wie folgt konfigurieren:
- alle ausgehenden Vebindungen von lokalen Hosts und die eingehenden Antworten
akzeptieren (jede darf Telnet, ftp, ...mit jedem)
- Eingehende Verbindungen nur für EINEN Host , der als Webserver fungiert,
akzeptieren (und dessen Antwortpackete)
- Alle anderen eingehenden Verbindungen zurückweisen
a) alle ausgehenden Vebindungen von lokalen Hosts akzeptieren:
ipchains -A input -i eth1 -s 10.180.100.0/24 1024: -d 0/0 1:1023
-p tcp -j ACCEPT
b) alle an die lokalen Clients geschickten Antworten akzeptieren:
ipchains -A input -i eth0 -s 0/0 1:1023 -d 10.180.100.0/24 1024:
-p tcp -j ACCEPT
c) Anfragen aus dem externen Netz an den lokalen Webserver akzeptieren:
ipchains -A input -i eth0 -d 10.180.100.xx 80 -s 0/0 1024: -p tcp
-j ACCEPT
d) Antworten des lokalen Webesevers:
ipchains -A input -i eth1 -s 10.180.100.xx 80 -d 0/0 1024: -p tcp
-J ACCEPT
ipchains -A input -p icmp -j ACCEPT
ipchains -P input DENY
Prinzip: Packete, die an einen bestimmten Host geschickt werden, werden, ohne daß der Absender es merkt, automatisch an einem anderen Port eines anderen Hosts weitergeleitet. (von außen nicht sichtbar)
Voraussetzung: Packet ipmasqadm serie n
Beschreibung: "Netzwerk in Ketten" ( ct 17/99); Seite 199
Aufgabe: - Auf einem lokalen Host läuft ein WWW- Server
- der Außenwelt wird als Adresse des www- Servers jedoch die Adresse
bekanntgegeben, mit der der Router im Außennetz hängt
- Alle an Port 80 des Routers gerichteten Packete werden in den internen www- Server weitergeleitet und umgeleitet
Lösung: - client 10.180.100.2
- der client macht folgendes: Netscape: http://10.180.213.61
- Router R3 reicht die http- Anfrage an einen host im lokalen Netz weiter: 10.180.102.62
- www- Server 10.180.102.62 bearbeitet die Anfrage
- Die Antwort wird über 10.180.213.61 an 10.180.213.50 geschickt und von dort an 10.180.100.2 durchgereicht
ipmaskadm portfw -a P tcp -l0.180.213.61 80 -R 10.180.102.62 80
ipchains -A forward -s 10.180.102.62 80 -t tcp -i etho -j MASQ ! -y
Auf den Routern folgendes machen:
- das Portforwarding wieder deaktivieren
ipmasqadm portfw -d.............................
- die forwardingregel wieder löschen
ipchains -F forward
- IP- forwarding deaktivieren:
==> echo0 > /proz/sys/net/iiiipv4/ip_forward
( in Datei ip_forward eine 0 schreiben)
- den Proxyserver squid installieren: (serie n)
- init 1
- in /etc/rc.config: START_SQUID="yes"
- init 2
- echo0 > /proz/sys/net/iiiipv4/ip_forward (zur Sicherheit nochmal)
- auf allen Popelhosts Netscape wie folgt konfigurieren:
- edit
- preferences
- proxy
- manual proxy- konfiguration
als proxy für http, ftp
- Adresse: IP- Adresse von eth1 des routers
- Port: 3128 ( http und ftp )
Netzklassen, -Masken, Subnettierung; netz-hostanteil, Broadcastadresse
ifconfig
manuelle konfiguration von routing route
zu einem Netz über ein Gateway
defaultroute über ein gateway
defaulroute über eigenes interface
Einträge in /etc/route.conf interpretieren
Anzeige des route- kommandos interpretieren
netstat -ta (tcp)
netstat -ua (udp)
tcpd /etc/hosts.allow und deny (inetd)
r Befehle - rcp rsh rlogin
/etc/hosts.equiv, .rhosts
x- client und x- server verteilen (-display; xhost)
herausfinden, über welchen port die beiden kommunizieren?
dhcp- server /etc/dhcpd.conf
ipchains einfache Regeln aufstellen
portforwarding
allg. Verständnissfragen