Rechnernetze
Home Nach oben

SOCKS

 

SOCKS 

Protokoll zur Kommunikation zwischen 
TCP-Client und 
Proxy Server
einfache Anpassung bestehender Anwendungen an Erfordernisse eines Proxy-Servers
SOCKS- Protokoll von IETF angenommen 
in RFCs 1928, 1929 und 1961 dokumentiert.
SOCKS V5 unterstützt auch 
UDP und 
Authentisierungsmethoden. 
Viele Client-Anwendungen unterstützen SOCKS Protokoll
Zugangskontrolle anhand 
Quelladresse und 
Zieladresse, 
Dienst und 
Benutzer-ID 
Protokollierungsfunktionen 
auch Anwendungen wie ICQ und Napster durch Firewall betreibbar
SOCKS-Pakete erhältlich für 
verschiedene UNIX-Plattformen und 
Windows NT4/2000 (als Erweiterung für WinSock DLL) 
bestehen im allgemeinen aus 
SOCKS-Server, 
SOCKS-Client-Bibliothek und 
ein paar SOCKS-Standard-Clients

Anpassen bisher nicht proxyfähiger Clients funktioniert nach einem einfachen Prinzip

Standard-Netzfunktionen werden durch SOCKS-Varianten ersetzen

 z.B. connect() durch Rconnect()

Initialisierungsfunktion eingesetzen

Programm neu compilieren 

mit SOCKS-Client-Bibliothek binden

Einträge in Server-Konfiguration beschreiben 

zulässigen IP-Adressen und Dienste

UNIX: /etc/socks.conf, services und sockd.conf

  für die die SOCKS-Server eingesetzt werden sollen.

Einrichten eines Proxy-Firewalls

Dieser 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:
Packet socket, Network firewalls, Unix domain sockets, TCP/IP networking, IP: advanced router, IP: firewalling, IP: always defragment, IP: transparent proxy support, IP: masquerading, IP: optimize as router not host, IP: aliasing support, IP: TCP syncookie support, IP: Allow large windows, IP: ICMP masquerading
Diese Optionen sind zu deaktivieren:
Kernel/User netlink socket, Socket Filtering, IP: multicasting, IP: kernel level autoconfiguration, IP: masquerading special modules support, IP: tunneling, IP: GRE tunnels over IP, IP: Reverse ARP, The IPX protocol, Appletalk DDP, WAN router, Fast switching, Forwarding between high speed interfaces, alle Netzwerkoptionen mit dem Status EXPERIMENTAL.
Für den Fall, dass zwei Netzwerkkarten eingesetzt werden sollen, kann bei Einsatz von lilo als Boot-Manager in der Datei /etc/lilo.conf mit der Zeile

append="ether=12,0x300,eth0 ether=15,0x340,eth1"


dem Kernel mitgeteilt werden, dass eine Karte auf Interrupt 12 mit Basis-IO-Adresse 300h als Ethernetkarte 0 arbeiten soll und die andere auf Interrupt 15 auf Karte 1. Die Karten müssen nun mit der äußeren Adresse, vom Internet aus sichtbar sein wird, und der inneren Adresse belegt werden. Für die inneren Adressen wird der nicht routbare freie Adressbereich 192.168.1.1-254 (Netzmaske 255.255.255.0) gewählt (siehe Abbildung 9).

Die Firewall im Überblick

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

kill -HUP <PID>

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

socks 1080/tcp

zu aktualisieren. Der Server-Start wird in der Datei /usr/inetd.conf mit

socks stream tcp nowait nobody /usr/etc/sockd sockd -I

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

permit 192.168.1.0 255.255.255.0

erlaubt dem Hosts mit der IP 192.168.1.* (da Netzmaske 255.255.255.0) den Zugriff auf den SOCKS-Server. Die Zeile

deny 0.0.0.0 0.0.0.0 : /usr/ucb/finger @%A | /usr/ucb/mail -s \
'SOCKD: rejected -- from %u@%A to host %Z (service %S)' root

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

# Interface_Adresse Ziel_Adr Ziel_Maske
24.94.1.123 0.0.0.0 0.0.0.0

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

ln -s /usr/local/bin/rfinger /usr/ucb/finger

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

direct 192.168.1.0 255.255.255.0

sorgt alle Verbindungen innerhalb des internen Netzes (192.168.1.*) direkt ohne SOCKS aufgenommen werden sollen. Die folgende Zeile

sockd @=24.94.1.123 *=boss,root 11.12.13.14 255.255.255.255 eq telnet

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

sockd @=24.94.1.123 0.0.0.0 0.0.0.0 eq 80

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:

deny 0.0.0.0 0.0.0.0 : /usr/ucb/mail -s \
`SOCKS: rejected %S from %u to %Z' root

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.