menu.jpg  ::  Home ::  Computing ::  Downloads ::  Harley Davidson ::  Links ::  Music ::  Nonsense ::  Mail :: 

Warum sollte man einem Paketfilter einsetzen?

Strangers on your machine? Don't be the last to know!

Das Internet ist ein grosses Netzwerk von verschiedenen Rechnern, die gegenseitig Dienste und Dateien anbieten und nutzen. Die markigen Werbeaussagen verschweigen jedoch durchweg die Tatsache, das dies für Deine Einwahlverbindung keinesfalls nur in Form einer Einbahnstrasse vor sich geht.

IMHO ist ausserdem die weitverbreitete Ansicht, Linux sei bei Online-Aktivitäten "aus der Schachtel heraus" sicherer als Windoze, schlichtweg Blödsinn:

Die erste Devise lautet also: Schalte jeden Service auf Deiner Maschine, den Du nicht unbedingt benötigst, ab. Zum Feststellen der laufenden Services installiere einen Portscanner wie nmap, werde root und führe folgenden Befehl aus:

   # nmap -O '-p 1-' localhost

Im Ergebnis siehst Du anhand einer von nmap errrechneten Zahl, wie anfällig Dein Rechner ist. Ausserdem findest Du dort alle offenen Ports, an denen irgendein Service Deiner Maschine lauscht.

Eine Vielzahl von Services wird bei Bedarf über den Internet Superdaemon 'inetd' bzw. 'xinetd' gestartet. Zum Deaktivieren nimmt man Auskommentierungen in der Datei '/etc/inetd.conf' bzw in den im Verzeichnis '/etc/xinetd' befindlichen Dateien vor und startet den Internet Superdaemon neu. Alternativ kann man die Zugriffsmöglichkeiten auf derartige Services individuell über den tcp-wrapper ('/etc/hosts.allow' und '/etc/hosts.deny') steuern. Weitere Services, die nicht über den Internet Superdaemon gestartet werden, kann man mittels gezielter Paketfilter vor ungewollten Zugriffen von aussen schützen.

Wie funktioniert ein einfacher Paketfilter?

Zum Grundverständnis über das Funktionieren eines Paketfilters zunächst einmal folgendes:

Pakete können Deinen Rechner über verschiedene Interfaces

und verschiedene Ports

erreichen. Du kannst auf diese Pakete folgendermassen reagieren:

Sinn eines Paketfilters ist es also, alle privilegierten Ports und diejenigen unprivilegierten Ports, an denen auf Deiner Maschine ein Service lauscht, vor Zugriffen von aussen über das Interface, mit dem Du mit dem Internet verbunden bist, zu schützen. Dabei willst Du dich nicht selbst von irgendetwas, was Du im Internet nutzen willst, aussperren.

Im Paketfilterkonzept des 2.2.X-Kernels durchläuft ein Paket von oben eine Reihe von Filtern, bis es einen auf sich zutreffenden Filter findet. Sollte dies nicht der Fall sein, wird es - je nach Konfiguration des Paketfilters - abgewiesen/verworfen oder zur lokalen Bearbeitung durchgelassen.

Man sollte einen Paketfilter also spätestens unmittelbar nach einer Einwahl ins Internet starten. Ergo integriert man ihn am besten in den Einwahlmechanismus seines Rechners (das ist leider distributionsabhängig: Bei meiner Debian erstellt man ein Skript im Verzeichnis '/etc/ppp/ip-up.d').

Beispiel eines einfachen Paketfilters

Zunächst der Shebang und einige Variablen, die teilweise an das jeweilige System anzupassen sind (EXTIF - das Device zum Internet):

   #!/bin/sh
   #
   IPC=/sbin/ipchains
   EXTIF=ppp0
   LOCALIP=`ifconfig $EXTIF | grep inet | cut -d : -f 2 | cut -d \  -f 1`
   LOCALMASK=`ifconfig $EXTIF | grep Mask | cut -d : -f 4`
   LOCALNET="$LOCALIP/$LOCALMASK"
   INTERNET="0/0"
   LOOPBACK="127.0.0.0/8"
   CLASS_A="10.0.0.0/8"
   CLASS_B="172.16.0.0/12"
   CLASS_C="192.168.0.0/16"

Zuerst verbieten wir generell Zugiffe auf das Interface zum Internet aus Namensräumen, die nur aus lokalen Netzen kommen können. Es handelt sich bei etwaigen Zugriffen also um gefälschte (spoofed) Adressen.

   # Spoofing-Schutz DENY-en (logged)
   #
   $IPC -A input -i $EXTIF -s $LOOPBACK -j DENY -l
   $IPC -A input -i $EXTIF -s $CLASS_A -j DENY -l
   $IPC -A input -i $EXTIF -s $CLASS_B -j DENY -l
   $IPC -A input -i $EXTIF -s $CLASS_C -j DENY -l

Jetzt verbieten wir alle Zugriffe auf privilegierte Ports über das Interface, mit dem wir mit dem Internet verbunden sind. Da diese Ports "genormt" belegt sind, also grundsätzlich auf jeder Maschine mit entsprechend laufenden Services die entsprechenden Ports "belegt" sind, brauchen wir hier nichts mit "DENY" zu verstecken. Zugriffe werden geloggt.

   # -- Zugriffe auf privilegierte Ports REJECT-en (logged) 
   #
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 0:1023 -j REJECT -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 0:1023 -j REJECT -l

Mit den unprivilegierten Ports können wir leider nicht so unkompliziert umgehen, da FTP-Server, auf die man zugreifen möchte, im aktiven Modus einen unprivilegierten Port auf dem lokalen Rechner benötigen. Ähnlich verhält es sich mit Mailservern, von denen man eMails abholen will.

Hier muss man erneut mit 'nmap' (s. o.) herauskriegen, an welchen dieser Ports auf der lokalen Maschine Dienste lauschen und auf diese gezielt Paketfilter setzen. Hier kann man ruhig auf Zugriffe mit einem 'DENY' reagieren. Die Zuordnung von Ports und Protokollen zu den entsprechenden Diensten findet man übrigens in der Datei '/etc/services'. Ich nehme hier einfach mal ein paar gängige Ports:

   # -- Zugriffe auf bestimmte unprivilegierte Ports DENY-en (logged)
   #
   # MySQL (3306), PostgreSQL (5432) und Microsoft SQL (1433)
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 3306 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 3306 -j DENY -l
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 5432 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 5432 -j DENY -l
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 1433 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 1433 -j DENY -l
   #
   # X-Server (6000:6063) und X-Truetype-Fontserver (7100:7101)
   #
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 6000:6063 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 6000:6063 -j DENY -l
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 7100:7101 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 7100:7101 -j DENY -l
   #
   # NFS-Server (2049)
   #
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 2049 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 2049 -j DENY -l
   #
   # Proxy-Server: Internet Junkbuster (5865) und WWWOffle (8080:8081)
   #
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 5865 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 5865 -j DENY -l
   $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 8080:8081 -j DENY -l
   $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 8080:8081 -j DENY -l

Man kann einen derartigen Paketfilter, der noch ein paar zusätzliche Goodies aufweist, wie

von meiner Download-Site herunterladen. Der Filter eignet sich für eine Standalone Maschine und sollte sich ohne weiteres auf lokale Gegebenheiten anpassen lassen.

Ich würde allerdings niemals mit einem fremden Paketfilter an den Start gehen, aber das ist Gewissenssache, but trust me, I'm a banker ;-)

Weitere Infos/Links

Dieser Artikel erhebt keinen Anspruch, die Sache vollständig abgehandelt zu haben, da ich ansonsten wunde Finger vom Tippen hätte. Zur Ergänzung jetzt noch ein paar Links:


Valid XHTML 1.0

Zurück zur Main-Site
Impressum
Created with GNU-Emacs on Die Mar 13 20:20:55 CET 2001

Valid CSS