SOCKSSOCKSSOCKS ist ein Protokoll zur Kommunikation zwischen einem TCP-Client und einem Proxy Server. Der Nutzen des Protokolls ist eine einfache Anpassung von bestehenden Anwendungen an die Erfordernisse eines Proxy-Servers. Das SOCKS Protokoll wurde von der Standardisierungsorganisation Internet Engineering Task Force (IETF) angenommen und in den RFCs 1928, 1929 und 1961 dokumentiert. Das dort beschriebene SOCKS V5 unterstützt auch UDP und Authentisierungsmethoden. Viele Client-Anwendungen unterstützen das SOCKS Protokoll, welches eine Zugangskontrolle anhand Quell und Zieladresse, Dienst und Benutzer-ID durchführen kann sowie über Protokollierungsfunktionen verfügt. Auch so populäre Anwendungen, wie ICQ und Napster lassen sich damit durch eine Firewall betreiben. SOCKS-Pakete sind für verschiedene UNIX-Plattformen und Windows NT4/2000 (als Erweiterung für WinSock DLL) erhältlich und bestehen im allgemeinen aus einem SOCKS-Server, einer SOCKS-Client-Bibliothek und ein paar SOCKSifizierten Standard-Clients. Freie Implementierungen von SOCKS konnten allerdings nur in der Version 4 gefunden werden (siehe Anhang). Das Anpassen bisher nicht proxyfähiger Clients funktioniert nach einem einfachen Prinzip: Die Standard-Netzfunktionen werden durch SOCKS-Varianten ersetzt (z.B. connect() durch Rconnect()), eine Initialisierungsfunktion eingesetzt und anschließend das Programm neu compiliert und mit der SOCKS-Client-Bibliothek gebunden. Einträge in der Server-Konfiguration (unter UNIX: /etc/socks.conf, services und sockd.conf) beschreiben die zulässigen IP-Adressen und Dienste, für die die SOCKS-Server eingesetzt werden sollen. Einrichten eines Proxy-FirewallsDieser Abschnitt stellt die Einrichtung eines einfachen Proxy-Firewalls, bestehend aus einem Proxy-Server, dar. Als Server wird der bereits oben vorgestellte SOCKS-Proxy-Server verwendet, da dieser standardisiert ist, von vielen Clients unterstützt wird (Netscape, IE), dabei kostenfrei ist und sich leicht eigene Clients anpassen lassen. Es handelt sich hierbei um einen generischen Circuit-Level-Proxy (siehe Abschnitt 4.1). Die Einrichtung erfolgt nach dem Konzept des ,Firewall and Proxy Server HOWTO v0.83, August 21, 2000" von Mark Grennan.SOCKS-Server Als Basis für die Installation des Servers muß der Kernel entsprechend vorcompiliert sein. Es sollten die folgenden Optionen aktiviert sein:
Weiter sind die gefährlichen und unwichtigen Dienste abzuschalten, die sich ein Angreifer zu Nutze machen könnte. Dazu kommentiert (#) man in der Datei /etc/inetd.conf die Dienste echo, discard, daytime, chargen, ftp, gopher, shell, login, exec, talk, ntalk, pop-2, pop-3, netstat, systat, tftp, bootp, finger, cfinger, time, swat und linuxconfig (soweit vorhanden) aus. Ein
mit für <PID> eingesetzter Prozessnummer von inetd sorgt für eine entsprechende Aktualisierung der laufenden Dienste. Nun folgt die Installation des SOCKS-Paketes (zu finden in Version 4.2 unter ftp://sunsite.unc.edu/pub/Linux/system/network/misc/socks-linux-src.tgz ). Zunächst sind die Einstellungen der Datei include/socks.h, wie SOCKS_DEFAULT_SERVER ,www.meinserver.com" und MULTIHOMED_SERVER, an die eigenen Bedürfnisse anzupassen. Nach Überprüfung der Einstellungen des ./Makefile kann mit ,make" die Kompilierung des Servers und Clients gestartet werden. Als root installiert ,make install.server" den Server und die Manpages. Die Service-Konfiguration /etc/services ist um die Zeile
zu aktualisieren. Der Server-Start wird in der Datei /usr/inetd.conf mit
automatisiert. Der optionale Parameter -I fordert für alle Clients einen laufenden Identifikationsdeamon identd, um eine Verbindung zu erhalten. Die Zugriffskontrolle des Servers wird durch die Datei /etc/sockd.conf konfiguriert. Folgender Inhalt
erlaubt dem Hosts mit der IP 192.168.1.* (da Netzmaske 255.255.255.0) den Zugriff auf den SOCKS-Server. Die Zeile
lehnt jeden Host, der nicht vorher mit permit erfasst wurde, ab und sendet root eine Mail mit dem Benutzernamen, Hostnamen, Zielhost und Dienst des Angreifers (falls er per finger identifizierbar ist). Es lassen sich auch einzelne Dienste in Abhängigkeit der Quell-IP auf diese erlauben oder abweisen. Für unseren Dual-Homed-Host muß noch ein simples Routing angelegt werden. Falls eine Verbindung durch sockd.conf freigegeben ist, wird in sockd.route nach einem Routing gesucht. Die Datei /etc/sockd.route sollte nur aus den Zeilen
bestehen, wobei jede Ziel-Adresse *.*.*.* (Ziel-Maske bewirkt dies) zu der Netzwerkkarte mit der IP 24.94.1.123 geroutet wird. SOCKS-Client-Host Wie oben bereits auf Server-Seite festgelegt wurde, muß identd installiert sein. Auf den internen Hosts reicht als root ein ,make clients", um mitgelieferten Clients für finger, ftp und telnet zu generieren. Mit ,make install.clients" werden diese dann installiert. Die alten Versionen von finger, telnet und telnet sollten umbenannt werden (beachte für finger den Eintrag in include/socks.h). Die SOCKSifizierten Varianten werden mit links, wie
zu Standardbefehlen gemacht. Mit Hilfe der Datei /etc/socks.conf wird den SOCKS-Clients mitgeteilt, welche Verbindungen abgelehnt werden sollen, welche direkt (oder mit einem anderen Proxy-Server) zu verbinden sind und welche den SOCKS-Server nutzen sollen. Die Zeile
sorgt alle Verbindungen innerhalb des internen Netzes (192.168.1.*) direkt ohne SOCKS aufgenommen werden sollen. Die folgende Zeile
erlaubt nur dem Benutzer root und boss, eine Telnet-Verbindung zum Rechner 11.12.13.14 über den SOCKS-Proxy 24.94.1.123 herzustellen. Mit
wird allen Benutzern der Zugriff über Port 80 (HTTP) auf das gesamte Internet per SOCKS-Server gestattet. Die restlichen Spielarten werden unter Benachrichtigung des root abgelehnt:
Damit ist der Aufbau einer einfachen SOCKS-Proxy-Firewall abgeschlossen. Weitere Clients können nun von Hand SOCKSifiziert werden. Manche Standardwebclients, wie der z.B. Netscape Navigator, lassen sich unter den Einstellungen für Proxys in einem Eingabefeld für SOCKS an den Server anbinden.
|