Firewall / Proxy / Gateway

Subnetze verbinden und dabei Schutzmaßnahmen einbeziehen

* Begriffsklärung (Index)

Oft werden verschiedene Begriffe durcheinenandergeworfen oder absichtlich mißverständlich benutzt. Eine Firewall ist im gesamten ein Konzept zum Schutze eines Netzes, es ist kein einzelner besonders konfigurierter Rechner oder gar ein Programm auf einem unsicheren Betriebssystem.
Ein Rechner der Mittels TCP/IP Filter portbasiert Verbindungen ablehnt/weiterleitet/umleitet ist ein Paketfilter, da er ja schlicht und ergreifend lediglich die TCP/IP Pakete nach vorgegeben Kriterien filtert.
Als Proxy werden oft auch Rechner bezeichnet die Subnetze verbinden, ich verwende hier für diese Rechner die Bezeichnung Gateway, da ich Proxy in seiner Verwendung für Programme verwenden möchte die Inhalte einer Verbindung auf Anwendungsebene filtern.
Network Address Translation (NAT) oder auch IP Masquerading genannt, ist ein Mechanismus um Verbindungen von Rechnern über diesen Tunnel auf eine andere Adresse zu mappen (und natürlich auch wieder zurück). Das bekannteste Einsatzgebiet ist sicherlich der ISDN/DSL Router der mehrere PCs auf die Einwahladresse mappt und so ins Internet bringt.

* Bestandsaufnahme (Index)

Wir möchten nun ein Subnetz einem anderen Netz verbinden. Dazu benötigen wir einen Rechner, der die Verbindungen von den Rechnern eines Subnetz in das andere Subnetz tunnelt. Da alle Verbindungen zwischen diesen beiden Netzen über das Gateway laufen, ist dies der ideale Punkt für Schutzmaßnahmen.
                         _______
                        /       \         _____
  |~~~~~~~~~~|         /         \       |     |
 {  Internet  } ===== <  Router   >----- | LAN |
  |~~~~~~~~~~|         \         /       |_____|
                        \_______/


Wir benötigen einen je nach Netzgröße dimensionierten Rechner (für ein Privatnetz von 4-5 PCs die per DSL ins Netz wollen reicht oft ein P1-100, für ein Subnetz von 150 PC die per 100 MBit LAN in ein anderes Subnetz wollen, sollte man je nach Filter über einen Rechner der Pentium III Klasse nachdenken) und ein Betriebsystem mit entsprechenden netzwerkfähigen Schutzmechanismen. Den Rechner findet man evtl. auf eBay, das Betriebsysstem gibt es auf www.NetBSD.org.

* Netzwerk-Setup (Index)


Das Einrichten des Gateways ist relativ einfach, man sollte vorher allerdings festlegen, was der Rechner zu erledigen hat. In der Regel ist dies das Verbinden zweier Subnetze, evtl. noch IP und Port NAT sowie filtern von Verbindungen oder bereitstellen eines Proxy. All dies kann von NetBSD erledigt werden, und zwar folgendermaßen:

* IP NAT (Index)

Wie bereits schon angedeutet ist IP NAT (Internet Protocol Network Address Translation), ein Mechanismus um IP Adressen (meist auch die entspr. Ports) zu übersetzen, also umzuwandeln und weiterzuleiten. Dies ist bspw. notwendig wenn mehrere PC über ein Modem in das Internet geleitet werden sollen.
    PC 1 \        +++++     +~~~~~~~~~~+
  Laptop  =======| NAT |====| Internet | 
    PC 2 /        +++++     +~~~~~~~~~~+ 
Die beiden PC und der Laptop haben private Adressen aus dem Block 192.168.1/24, der NAT Rechner eine oder mehrere Netzwerkkarten die nach innen gehen und ebenfalls private Adressen haben. Ein externes Interface (Modem/ISDN/DSL Karte) ist mit dem Internet verbunden und hat die vom Provider zugewiesene offizielle IP Adresse.
Der NAT Rechner bekommt die Anfragen der internen PCs und übersetzt deren Pakete auf die externe Schnittstelle, welche dann ins Internet gesendet werden. Die Antworten aus dem Internet werden dann entsprechend rückübersetzt und geroutet.
NetBSD benötigt zum Adressmapping das Pseudodevice IPFilter, welches in den Kernel einkompiliert sein muss. Dies wird mit der Option
pseudo-device   ipfilter                # IP filter (firewall) and NAT
im Konfigurationsfile festgelegt. Desweiteren ist IP Forwarding (noch ein Begriff für NAT) notwendig, sollte nach der Eingabe von
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding = 1
geantwortet werden, ist GATEWAY im Kernel aktiviert. Standardmäßig ist dies in GENERIC nicht der Fall, daher sollte man einen neuen Kernel kompilieren oder mit
# sysctl -w net.inet.ip.forwarding=1
IP NAT einschalten. Dieser Befehl kann übrigens in die /etc/rc.local eingefügt werden, um beim Boot automatisch gesetzt zu werden. Trotzdem sollte man über einen individuellen Kernel nachdenken, da meistens ältere Hardware eingesetzt wird und ein verkleinerter Kernel Ressourcen schont (es sei nochmal darauf hingewiesen das NetBSD komplett Crosscompilefähig ist, man kann den Kernel also auch auf einem anderen, leistungsfähigeren Rechner bauen).

* Paketfilter (Index)

Unter NetBSD ist ipf der Standardpaketfilter. Es gab vor geraumer Zeit einige Kontroversen um die ipf Lizenz, dies hat sich allerdings geklärt. Ein großer Vorteil von ipf ist, das er ein Anwendungsprogramm und so nicht im Kernel eingebaut ist. Dies erhöht seine (schon sehr hohe, NetBSD-bedingte) Portabilität auf andere OS wie z.B. SUN OS, Solaris, HP UX oder Digital Unix. ipf ist einfach zu konfigurieren und vielseitig einsetzbar. Normalerweise wird in /tc/ipf.conf der Regelsatz übergeben und beim starten automatisch gelesen.
ipf ist in der Lage nach Adressen, Ports, Status oder Protokollen zu filtern und zu loggen. Dies geschieht mit Anweisungen, die in einer einfach strukturierten Syntax übergeben werden:
block in quick on ex0 from 192.168.0.0/24 to any
blockiert sofort alle eingehenden Pakete die von einer privaten Adresse kommen
pass out quick on tun0 proto tcp from 20.20.20.1/32 port = 80 to any Lässt alle TCP Verbindungen auf Port 80 von 20.20.20.1/32 rausgehen und so weiter. Für die konkrete Konfiguration von ipf sei auf das englische und das deutsche HOWTO verweisen.
ipf ermöglicht mit ipfstat die Ausgabe einer Statistik, die interessante Daten zum Paketfilter enthält.

* Proxy (Index)

Ein Proxy ist ein Programm das bestimmte Anwendungen filtert, in dem es sich zwischen die Verbindung von Programm und Server hängt. Dies geschieht nicht direkt auf Verbindungsebene (obwohl einige Proxies dies unterstützen) sondern auf Anwendungsebene. Dies sei hier an einem Beispiel näher erläutert, und zwar am Internet Junkbuster dem wahrscheinlich ältesten www-Proxy. Der Junkbuster (ijb) läuft auf einem Rechner (lokal oder eben idealerweise zentral auf dem Gateway) und bietet sich so an. Auf einem internen PC wird ein Internet Browser, z. B. Lynx verwendet um damit im WWW zu surfen. Dies geschieht normalerweise direkt, in dem sich der Browser mit dem Webserver verbindet und die Daten anfordert bzw. sendet. Nun wird der Lynx so konfiguriert, das er statt dem WWW den ijb auf dem Gateway konnektiert. Der ijb arbeitet für Lynx und Server zwar in diesem Falle transparent, so das der Server nichts von der Existenz des Proxy mitbekommt, Lynx allerdings muss den Proxy kennen, da er ihn ja adressiert. Ein Proxy kann allerdings auch wirklich transparent agieren, in dem er den zu bearbeitenden Verkehr abfängt und dann entsprechend weiterleitet. Eine dritte Art von Proxy ist der generische Proxy, welcher auf dem socksified TCP Stack basiert und das Socksprotokoll beherrscht. aus diesem Grunde müssen auch Applikationen, die mit ihm kommunizieren wollen, socksified sein.
Lynx ====== Junkbuster ===== www.NetBSD.org
Der Proxy kann nun bestimmte Aufgaben übernehmen, die je nach eingesetztem Programm unterschiedlich sind. Der hier beschriebene ijb kann beispielsweise den Referrer des Lynx filtern und durch einen übergebenen String ersetzen oder Cookies sperren und Bilder von bestimmten Adressen filtern (dies war der Ursprungszweck des ijb, das Filtern von Bildern die von bestimmten Servern kamen, nämlich Werbebanner). Der Proxy kann die Sicherheit erhöhen, in dem er eben bestimmte Verbindungsinhalte filtert und so z. B. Buffer Overflows verhindert. Neben der Sicherheit hat ein Proxy noch weitere Vorteile, wie z. B. Erschwerung von Datensammlung zur Profilbildung und regelrechte Anonymisierung (speziell der Anonproxy der TU Dresden).
Auf dem NetBSD FTP-Server sind einige Proxies als Package verfügbar z. B. squid (www), bnc (IRC), choparp (arp) oder dante (socks 4/5).

net-tex.de, Index
\$Id: fw.html,v 1.30 2014/08/21 09:24:03 stefan Exp $


$Log: fw.html,v $ Revision 1.30 2014/08/21 09:24:03 stefan Umlaute und Makefile clean up

Autor: Stefan Schumacher für net-tex.de/cryptomancer.de, PGP-Key 0xB3FBAE33

Bitte beachten Sie, das die Seite inhaltlich seit Ende 2007 nicht mehr gepflegt wird!
Aktuellere Informationen erhalten Sie auf Kaishakunin.com