SOCKS4a Proxy
Was ist SOCKS4a
SOCKS4a ist eine Erweiterung des SOCKS4-Protokolls, vorgeschlagen von Ying-Da Lee. Der Hauptunterschied zum ursprünglichen SOCKS4 besteht darin, dass der Client einen Domainnamen anstelle einer IP-Adresse senden kann und die DNS-Auflösung auf der Seite des Proxy-Servers erfolgt.
Im Standard-SOCKS4 muss der Client den Domainnamen selbst in eine IP-Adresse auflösen, bevor er die Anfrage sendet. Dies führt zu einem Problem: Die DNS-Abfrage geht direkt vom Client aus und enthüllt Informationen über die besuchten Websites. SOCKS4a löst dieses Problem.
Das SOCKS4 DNS-Problem
Wie SOCKS4 funktioniert
- Der Client möchte sich mit example.com verbinden
- Der Client stellt eine DNS-Abfrage direkt (nicht über den Proxy)
- Er erhält die IP 93.184.216.34
- Er sendet einen Befehl an den Proxy: "verbinde mit 93.184.216.34:80"
- Der Proxy stellt eine TCP-Verbindung her
Problem: Die DNS-Abfrage in Schritt 2 ist für den ISP, den DNS-Server und jeden, der den Datenverkehr überwacht, sichtbar. Dies ist ein DNS-Leak.
Wie SOCKS4a funktioniert
- Der Client möchte sich mit example.com verbinden
- Der Client sendet einen Befehl an den Proxy: "verbinde mit example.com:80"
- Der Proxy selbst löst example.com in eine IP auf
- Der Proxy stellt eine TCP-Verbindung her
Die DNS-Abfrage ist vollständig hinter dem Proxy verborgen.
Technische Implementierung
SOCKS4 Anfrageformat
| Feld | Größe | Beschreibung |
|---|---|---|
| VER | 1 byte | Version (0x04) |
| CMD | 1 byte | Befehl (0x01 = CONNECT) |
| DSTPORT | 2 bytes | Zielport |
| DSTIP | 4 bytes | Ziel-IP |
| USERID | variabel | Bezeichner-String |
| NULL | 1 byte | 0x00 (Terminierung) |
SOCKS4a Anfrageformat
Das Format ist dasselbe, aber mit einem Trick: Das DSTIP-Feld enthält eine ungültige IP der Form 0.0.0.x (wobei x > 0). Nach dem NULL-Terminator der USERID wird der Domainname angehängt:
| Feld | Größe | Beschreibung |
|---|---|---|
| VER | 1 byte | 0x04 |
| CMD | 1 byte | 0x01 |
| DSTPORT | 2 bytes | Zielport |
| DSTIP | 4 bytes | 0.0.0.1 (SOCKS4a Markierung) |
| USERID | variabel | Bezeichner-String |
| NULL | 1 byte | 0x00 |
| DOMAIN | variabel | Domainname (example.com) |
| NULL | 1 byte | 0x00 |
Der Proxy sieht eine IP der Form 0.0.0.x und versteht, dass nach der USERID ein Domainname zur Auflösung folgt.
SOCKS4 vs SOCKS4a vs SOCKS5
| Parameter | SOCKS4 | SOCKS4a | SOCKS5 |
|---|---|---|---|
| DNS auf Proxy-Seite | Nein | Ja | Ja |
| Authentifizierung | Nein | Nein | Ja |
| UDP | Nein | Nein | Ja |
| IPv6 | Nein | Nein | Ja |
| BIND-Befehl | Ja | Ja | Ja |
| ASSOCIATE-Befehl | Nein | Nein | Ja |
Vorteile von SOCKS4a
1. Eliminiert DNS-Leak
Der Hauptvorteil ist, dass der Client keine DNS-Abfragen direkt stellt. Die gesamte DNS-Aktivität ist hinter dem Proxy verborgen.
2. Protokoll-Einfachheit
SOCKS4a ist einfacher zu implementieren als SOCKS5. Es gibt keine Authentifizierungsphase, keine UDP-Unterstützung – nur TCP CONNECT.
3. Abwärtskompatibilität
Ein SOCKS4a-Client kann mit einem SOCKS4a-Proxy arbeiten, und das Anfrageformat ist abwärtskompatibel mit SOCKS4.
4. Zugriff auf .onion und interne Domains
Da DNS auf der Proxy-Seite aufgelöst wird, kann SOCKS4a verwendet werden, um auf Domains zuzugreifen, die nicht von öffentlichen DNS-Servern aufgelöst werden (z.B. .onion über Tor).
Einschränkungen
1. Keine Authentifizierung
SOCKS4a unterstützt keine Authentifizierung. Jeder, der die Proxy-Adresse kennt, kann sie verwenden.
2. Kein UDP
Es werden nur TCP-Verbindungen unterstützt. DNS-Abfragen, VoIP- und Gaming-Verkehr über UDP werden nicht unterstützt.
3. Kein IPv6
Das DSTIP-Feld ist 4 Bytes groß, nur für IPv4.
4. Veraltetes Protokoll
SOCKS5 hat SOCKS4a abgelöst und bietet alle dessen Funktionen plus Authentifizierung, UDP und IPv6.
Wann SOCKS4a verwenden
- Legacy-Systeme — ältere Software, die SOCKS5 nicht unterstützt
- Einfache Szenarien — wenn Authentifizierung und UDP nicht benötigt werden
- Tor-Verbindungen — Tor unterstützt SOCKS4a für die .onion-Auflösung
- Minimaler Overhead — wenn minimale Protokoll-Latenz wichtig ist
Software-Unterstützung
| Programm | SOCKS4a |
|---|---|
| curl | Ja (--socks4a) |
| Tor | Ja (primäres Protokoll) |
| ProxyChains | Ja |
| Firefox | Via network.proxy.socks_remote_dns |
| PuTTY | Ja |
Fazit
SOCKS4a war ein wichtiger evolutionärer Schritt von SOCKS4, der das Problem der DNS-Leaks löste. Obwohl SOCKS5 heute der Standard ist, ist das Verständnis von SOCKS4a nützlich für die Arbeit mit Legacy-Systemen und zum Verständnis der Entwicklung von Proxy-Protokollen.