SOCKS je síťový protokol na úrovni relace modelu OSI , který umožňuje transparentně (pro ně neviditelně) předávat pakety z klienta na server přes proxy server a využívat tak služby za firewally (firewally) .
Novější verze SOCKS5 předpokládá autentizaci, takže k serveru mají přístup pouze oprávnění uživatelé.
Klienti za firewallem , kteří potřebují přístup k externím serverům, mohou být místo toho připojeni k SOCKS proxy serveru . Takový proxy server spravuje práva klienta pro přístup k externím zdrojům a předává požadavek klienta externímu serveru. SOCKS lze použít i opačným způsobem, řídit práva externích klientů na připojení k interním serverům za firewallem .
Na rozdíl od HTTP proxy SOCKS přenáší všechna data od klienta, aniž by ze sebe cokoliv přidával, to znamená, že z pohledu finálního serveru jsou data, která obdrží od SOCKS proxy, totožná s daty, která by klient přenesl přímo. , bez proxy. SOCKS je obecnější, nezávisí na konkrétních protokolech aplikační vrstvy (vrstva 7 modelu OSI ) a funguje na úrovni TCP spojení (vrstva 4 modelu OSI ). Na druhou stranu HTTP proxy ukládá data do mezipaměti a může pečlivěji filtrovat obsah přenášených dat.
Protokol vyvinul správce systému MIPS David Koblas . Poté, co se MIPS stal součástí Silicon Graphics Corporation v roce 1992 , měl Koblas přednášku o SOCKS na Usenix Security Symposium a SOCKS se staly veřejně dostupnými. Čtvrtá verze protokolu byla vyvinuta Ying-Da Lee z NEC .
Servery SOCKS obvykle používají port 1080 [1] .
SOCKS 4 je navržen tak, aby fungoval přes firewall bez ověřování pro aplikace klient-server běžící přes protokol TCP , jako je Telnet , FTP , a populární komunikační protokoly, jako je HTTP , WAIS a Gopher . Server SOCKS lze v podstatě chápat jako firewall, který podporuje protokol SOCKS.
Typický požadavek SOCKS 4 vypadá takto:
Požadavek klienta na server SOCKS:
Velikost | Popis |
---|---|
1 bajt | Číslo verze SOCKS, 1 bajt (pro tuto verzi by mělo být 0x04) |
1 bajt | příkazový kód:
|
2 bajty | Číslo portu |
4 byty | IP adresa |
n+1 bajtů | Uživatelské ID. Řetězec proměnné délky zakončený byte NUL (0x00). Pole je určeno k identifikaci uživatele (viz Ident ) |
Odpověď serveru na klienta SOCKS:
Velikost | Popis |
---|---|
1 bajt | NUL bajt |
1 bajt | Kód odpovědi:
|
2 bajty | Libovolná data by měla být ignorována |
4 byty | Libovolná data by měla být ignorována |
SOCKS 5 [2] je nekompatibilní rozšíření protokolu SOCKS 4. Přidává podporu pro UDP , poskytuje generická silná autentizační schémata a rozšiřuje metody adresování, přidává podporu doménových jmen a IPv6 adres . Počáteční nastavení komunikace nyní obsahuje následující:
Způsoby autentizace jsou očíslovány takto:
0x00 | Není vyžadováno ověření |
0x01 | GSSAPI |
0x02 | Uživatelské jméno/heslo RFC 1929 |
0x03-0x7F | Rezervováno IANA |
---|---|
0x03 | CHAP |
0x04 | Není obsazeno |
0x05 | Výzva-odpověď (ověření) |
0x06 | SSL |
0x07 | NDS ověřování |
0x08 | Vícefaktorový autentizační rámec |
0x09 | Blok parametrů JSON |
0x0A–0x7F | Není obsazeno |
0x80-0xFE | Vyhrazeno pro metody soukromého použití |
Úvodní pozdrav od klienta:
Velikost | Popis |
---|---|
1 bajt | Číslo verze SOCKS (pro tuto verzi by mělo být 0x05) |
1 bajt | Počet podporovaných metod ověřování |
n bajtů | Čísla metod autentizace, proměnná délka, 1 bajt pro každou podporovanou metodu |
Server hlásí svůj výběr:
Velikost | Popis |
---|---|
1 bajt | Číslo verze SOCKS (pro tuto verzi by mělo být 0x05) |
1 bajt | Vybraná metoda ověřování nebo 0xFF, pokud nebyla nabídnuta žádná přijatelná metoda |
Následná identifikace závisí na zvolené metodě.
Požadavek zákazníka:
Velikost | Popis |
---|---|
1 bajt | Číslo verze SOCKS (pro tuto verzi by mělo být 0x05) |
1 bajt | příkazový kód:
|
1 bajt | Rezervovaný bajt musí být 0x00 |
1 bajt | Typ adresy:
|
Záleží na typu adresy | Přiřazení adresy:
|
2 bajty | Číslo portu, v pořadí od nejvyšší po nejnižší ( big-endian ) |
Odpověď serveru:
Velikost | Popis |
---|---|
1 bajt | Číslo verze SOCKS (0x05 pro tuto verzi) |
1 bajt | Kód odpovědi:
|
1 bajt | Byte vyhrazen, musí být 0x00 |
1 bajt | Typ následné adresy:
|
Záleží na typu adresy | Přiřazení adresy:
|
2 bajty | Číslo portu, v pořadí od nejvyšší po nejnižší ( big-endian ) |