PONOŽKY

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é.

Úvod

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 protokol

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:
  • 0x01 = navazování spojení TCP/IP
  • 0x02 = přiřazení portu TCP/IP (vazba)
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:
  • 0x5a = žádost schválena
  • 0x5b = požadavek byl zamítnut nebo neplatný
  • 0x5c = Požadavek se nezdařil, protože identd není spuštěn (nebo není dostupný ze serveru)
  • 0x5d = Požadavek se nezdařil, protože klient identd nemůže ověřit ID uživatele v požadavku
2 bajty Libovolná data by měla být ignorována
4 byty Libovolná data by měla být ignorována

SOCKS 5 protokol

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:
  • 0x01 = navazování spojení TCP/IP
  • 0x02 = přiřazení portu TCP/IP (vazba)
  • 0x03 = Přidružení portu UDP
1 bajt Rezervovaný bajt musí být 0x00
1 bajt Typ adresy:
  • 0x01 = IPv4 adresa
  • 0x03 = název domény
  • 0x04 = adresa IPv6
Záleží na typu adresy Přiřazení adresy:
  • 4 bajty pro adresu IPv4
  • První bajt je délka názvu, za nímž následuje název domény bez koncové hodnoty null
  • 16 bajtů pro adresu IPv6
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:
  • 0x00 = žádost schválena
  • 0x01 = Chyba serveru SOCKS
  • 0x02 = Připojení odepřeno sadou pravidel
  • 0x03 = síť nedostupná
  • 0x04 = hostitel nedostupný
  • 0x05 = připojení odmítnuto
  • 0x06 = expirace TTL
  • 0x07 = příkaz není podporován / chyba protokolu
  • 0x08 = typ adresy není podporován
1 bajt Byte vyhrazen, musí být 0x00
1 bajt Typ následné adresy:
  • 0x01 = IPv4 adresa
  • 0x03 = název domény
  • 0x04 = adresa IPv6
Záleží na typu adresy Přiřazení adresy:
  • 4 bajty pro adresu IPv4
  • První bajt je délka názvu, za nímž následuje název domény bez koncové hodnoty null
  • 16 bajtů pro adresu IPv6
2 bajty Číslo portu, v pořadí od nejvyšší po nejnižší ( big-endian )

Implementace

Viz také

Poznámky

  1. Registr názvu služby a čísla portu transportního protokolu . IANA. Datum přístupu: 8. ledna 2016. Archivováno z originálu 3. března 2016.
  2. Marcus Leech <[email protected]>. Protokol SOCKS verze  5 . tools.ietf.org. Získáno 6. června 2020. Archivováno z originálu dne 18. října 2020.

Odkazy