Hlavní navigace

Internet z linuxu cez proxy win2k - prax

5. 10. 2001
Doba čtení: 5 minut

Sdílet

Jedného dňa som si nainštaloval vo firme RedHat 7.1, pretože pre Linux je Internet živná pôda, prvé čo sa sa snažil urobiť bolo zabezpečiť spojenie na Internet. Po nastavení všetkých dôležitých sieťových konfiguračných súborov, som si spustil browser a nastavil proxy server. Po zadaní stránky som však s prekvapením zistil, že niečo nie je v poriadku. Browser ako by zostal v nekonečnom cykle, stále sa snažil kontaktovať zadanú web stánku. Aj vám sa prihodila podobná situácia? Prečo je tomu tak, sa vám pokúsim objasniť vo tomto článku.

Jadro problému spočíva v tom, že váš proxy server beží na Microsoft win2k.

Microsoft proxy server trvá na NTLM autorizácii. Pochybujem o tom, že tento proprietárni protokol zvláda akýkoľvek browser rôzny od Microsoft Internet Exploreru. Pán Dmitry A. Rozmanov napísal v programovacom jazyku Python program NTLM Authorization Proxy Server. Jeho cieľom je realizovať autorizáciu na proxy pomocou proprietárneho protokolu NTLM. Program funguje ako proxy server, to znamená, že nie je potrebné sa obmedzovať na nejaký konkrétny browser a naviac každá požiadavka je upravená tak, aby sa tvárila rovnako, ako keby bola zaslaná z Microsoft Internet Exploreru.

Keď sa klient potrebuje autorizovať na proxy alebo serveri, ktorý používa NTLM autorizáciu musí dodržať určitý postup pre nadviazanie spojenia. Táto komunikácia prebieha nasledovne (C = klient, S = Server):

1: C -> S   GET ...

2: S -> C   401 Unauthorized
               WWW-Authenticate: NTLM

3: C -> S   GET ...
               Authorization: NTLM <base64-encoded type-1-message>

4: S -> C   401 Unauthorized
               WWW-Authenticate: NTLM <base64-encoded type-2-message>

5: C -> S   GET ...
               Authorization: NTLM <base64-encoded type-3-message>

6: S -> C   200 Ok

Všetky tri správy poslané pri nadväzovaní spojenia majú binárnu štruktúru. Každá jedna je nižšie popísaná pseudo-C štruktúrov a v pamäti – načrtnutým diagramom. byte je 8-bitové pole; short je 16-bitové pole. Všetky polia sú unsigned, teda bez znamienka. Pole štruktúry s názvom zero obsahuje nuly. Pole dĺžky * indikuje premenlivú dĺžku poľa. Znaky a hexadecimálne čísla v komentároch štruktúry indikujú nemenné hodnoty pre dané pole. Pole flags pravdepodobne obsahuje príznaky, ktorých význam je neznámy.

Type – 1 – message
Táto správa obsahuje host name a NT domain name klienta. Reťazce host a domain sú zložené ASCII (alebo možno ISO-8859–1) znakov. Reťazce sú zložené z veľkých písmen a nie sú zakončené nulou. Host name sa zadáva v tvare napríklad „GOOFY“, a nie „GOOFY.DISNEY.COM“.

struct {
    byte protocol[8];   // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
    byte type;      // 0x01
    byte zero[3];
    short flags;        // 0xb203
    byte zero[2];

    short dom_len;      // domain string length
    short dom_len;      // domain string length
    short dom_off;      // domain string offset
    byte zero[2];

    short host_len;     // host string length
    short host_len;     // host string length
    short host_off;     // host string offset (always 0x20)
    byte zero[2];

    byte host[*];       // host string (ASCII)
    byte dom[*];        // domain string (ASCII)
} type-1-message;


Obr. 1 Type – 1 – message

Type – 2 – message
Táto správa obsahuje výzvu NTLM servera. Priestor nonce je používaný klientom na vytvorenie odpovedí NT a Lan Managera. Pole message lenght obsahuje dĺžku kompletnéj správy, ktorá v tomto prípade je vždy 40.

struct {
    byte protocol[8];   // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
    byte type;      // 0x02
    byte zero[7];
    short msg_len;      // 0x28
    byte zero[2];
    short flags;        // 0x8201
    byte zero[2];

    byte nonce[8];      // nonce
    byte zero[8];

} type-2-message;


Obr. 2 Type – 2 – message

Type – 3 – message
Táto správa obsahuje meno užívateľa (user name), meno servera (host name), meno NT domény (NT domain name), a dve odpovede. Reťazce server (host), doména (domain) a meno užívateľa (user name) sú v Unicode a nie sú zakončené nulou; meno servera a domény musí byť zložené z veľkých písmen.

struct {
    byte protocol[8];   // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
    byte type;      // 0x03
    byte zero[3];

    short lm_resp_len;  // LanManager response length (always 0x18)
    short lm_resp_len;  // LanManager response length (always 0x18)
    short lm_resp_off;  // LanManager response offset
    byte zero[2];

    short nt_resp_len;  // NT response length (always 0x18)
    short nt_resp_len;  // NT response length (always 0x18)
    short nt_resp_off;  // NT response offset
    byte zero[2];

    short dom_len;      // domain string length
    short dom_len;      // domain string length
    short dom_off;      // domain string offset (always 0x40)

    byte zero[2];

    short user_len;     // username string length
    short user_len;     // username string length
    short user_off;     // username string offset
    byte zero[2];

    short host_len;     // host string length
    short host_len;     // host string length
    short host_off;     // host string offset
    byte zero[6];

    short msg_len;      // message length
    byte zero[2];

    short flags;        // 0x8201
    byte zero[2];

    byte dom[*];        // domain string (unicode)

    byte user[*];       // username string (unicode)
    byte host[*];       // host string (unicode)
    byte lm_resp[*];    // LanManager response
    byte nt_resp[*];    // NT response
} type-3-message;


Obr. 3 Type – 3 – message

Proxy server – inštalácia

Najskôr si stiahnite z adresy http://www.ge­ocities.com/roz­manov/ntlm/ súbor s názvom ntlmaps091.zip. Ďalej budete potrebovať Python 1.5.2 alebo vyššiu verziu http://www.pyt­hon.org/. Skôr ako spustíte váš proxy server, je potrebné nastaviť súbor server.cfg. Na nasledujúcich riadkoch opíšem konfiguráciu tohto súboru. V danom súbore sa nachádzajú dve sekcie [GENERAL] a [CLIENT_HEADER]. V sekcii [GENERAL] možno nastaviť tieto parametre:

LISTEN_PORT:5865
Na tomto porte pobeží váš proxy server, ktorý bude prekladať všetky adresy do tvaru akoby ich posielal sám Internet Explorer. Tento port musíte nastaviť v browseri, ktorý budete používať (napr. Mozilla, Opera, Konqueror). Keďže váš proxy beží lokálne, IP adresa vášho servera bude 127.0.0.1, resp. localhost.local­domain.

PARENT_PROXY:
PARENT_PROXY_PORT:
IP adresa a port nadradeného proxy win2k servera.

DOMAIN:
Názov Windows domény v ktorej máte vytvorený účet.

USER:
Meno užívateľa, ktorý má oprávnenie pristupovať do Windows domény.

PASSWORD:
Heslo užívateľa. Tento parameter nemusíte vypĺňať, po spustení vás proxy server vyzve na zadanie hesla pre prístup do Windows domény.

ALLOW_EXTERNAL_CLI­ENTS:
Ak tento parameter nastavíte na 1 (ALLOW_EXTERNAL_CLI­ENTS:1) umožníte používať váš autorizačný proxy server klientom iných počítačov.

FRIENDLY_IPS:
Ak vám nevyhovuje, že pomocou ALLOW_EXTERNAL_CLI­ENTS:1 majú prístup cez váš účet všetky počítače, nastavte ALLOW_EXTERNAL_CLI­ENTS: na nulu a do FRIENDLY_IPS: zadajte IP adresu počítača, ktorému prístup cez váš autorizačný proxy server povoľujete. Napríklad: FRIENDLY_IPS: 192.168.3.0

DEBUG:0
Nastavením tejto hodnoty na 1 sa začnú vytvárať log súbory. Za každú connection sa vytvorí jeden súbor. Pre zaujímavosť uvádzam log súbor adresy www.google.com.

BIN_DEBUG:0
Nastavením tejto hodnoty na 1 získate podrobnejšie debug informácie. Zápis sa vykonáva do súborov 127.0.0.1–32769.bin.client a 127.0.0.1–32769.bin.proxy (číslo v strede sa mení).

URL_LOG:0
Nastavením tejto hodnoty na 1 sa začnú všetky vaše požiadavky URL zapisovať do súboru url.log. Môže vám byť osožný.

[CLIENT_HEADER]
Táto sekcia popisuje čo a ako má server zmeniť v záhlaviach klientov (clients headers).


Obr. 4 Štart proxy servera

Web Linky

NTLM Authorization Proxy Server
http://www.ge­ocities.com/roz­manov/ntlm/

NTLM authentication module for Apache/Unix
http://modntlm­.sourceforge.net/

CS24_early

Záver

Uvedený program pracuje bez problemov ako v Linuxe tak i vo Windows. Bol testovaný na distribúcii RedHat 7.1 (Cartman) s verziou jadra 2.4.2–2.

Byl pro vás článek přínosný?