home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 February / Chip_2002-02_cd1.bin / obsahy / Chip_txt / txt / 116-117.txt < prev    next >
Text File  |  2002-01-04  |  8KB  |  137 lines

  1. Internet z Linuxu p°es proxy Windows 2000 
  2. NTLM autorizßcia na proxy
  3. JednΘho d≥a som si vo firme nainÜtaloval Red Hat 7.1. Preto₧e pre Linux je internet ₧ivnß p⌠da, prvΘ, Φo som 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· webov· strßnku.
  4.  
  5. Aj vßm sa prihodila podobnß situßcia? PreΦo je tomu tak, sa vßm pok·sim objasni¥ v tomto Φlßnku. Jadro problΘmu spoΦφva v tom, ₧e vßÜ  proxy server be₧φ na MS Windows 2000. Microsoft proxy server trvß na NTLM autorizßcii. Pochybujem o tom, ₧e tento proprietßrny protokol zvlßda ak²ko╛vek browser r⌠zny od MS 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 MS 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): 
  6. 1: C -> S    GET ...
  7. 2: S -> C    401 Unauthorized
  8. WWW-Authenticate: NTLM
  9. 3: C -> S    GET ...
  10. Authorization: NTLM <base64-encoded type-1-message>
  11. 4: S -> C    401 Unauthorized
  12. WWW-Authenticate: NTLM <base64-encoded type-2-message>
  13. 5: C -> S    GET ...
  14. Authorization: NTLM <base64-encoded type-3-message>
  15. 6: S -> C 200 Ok 
  16. 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·rou a v pamΣti - naΦrtnut²m diagramom; byte je 8bitovΘ pole; short je 16bitovΘ 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. 
  17.  
  18. Type - 1 - message
  19. Tßto sprßva obsahuje host name a NT domain name klienta. Re¥azce host a domain s· zlo₧enΘ z 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.
  20. struct {
  21.   byte protocol[8];    // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
  22.   byte type;            // 0x01
  23.   byte zero[3];
  24.   short flags;        // 0xb203
  25.   byte zero[2];
  26.  
  27.   short dom_len;        // domain string length
  28.   short dom_len;        // domain string length
  29.   short dom_off        // domain string offset
  30.   byte zero[2];
  31.  
  32.   short host_len;      // host string length
  33.   short host_len;      // host string length
  34.   short host_off;      // host string offset (always 0x20)
  35.   byte zero[2];
  36.  
  37.   byte host[*];       // host string (ASCII)
  38.   byte dom[*];           // domain string (ASCII)
  39. } type-1-message
  40.  
  41. Type - 2 - message
  42. 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 kompletnej sprßvy, ktorß v tomto prφpade je v₧dy 40. 
  43. struct {
  44.   byte protocol[8]; // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
  45.   byte type;    // 0x02
  46.   byte zero[7];
  47.   short msg_len;  // 0x28
  48.   byte zero[2];
  49.   short flags;   // 0x8201
  50.   byte zero[2];
  51.  
  52.   byte nonce[8];  // nonce
  53.   byte zero[8];
  54. } type-2-message
  55.  
  56. Type - 3 - message
  57. 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. 
  58. struct {
  59.   byte protocol[8];    // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
  60.   byte type             // 0x03
  61.   byte zero[3];
  62.  
  63.   short lm_resp_len; // LanManager response length (always 0x18)
  64.   short lm_resp_len; // LanManager response length (always 0x18)
  65.   short lm_resp_off; // LanManager response offset
  66.   byte zero[2];
  67.  
  68.   short nt_resp_len; // NT response length (always 0x18)
  69.   short nt_resp_len; // NT response length (always 0x18)
  70.   short nt_resp_off; // NT response offset
  71.   byte zero[2];
  72.  
  73.   short dom_len;   // domain string length
  74.   short dom_len;   // domain string length
  75.   short dom_off;   // domain string offset (always 0x40)
  76.   byte zero[2];
  77.  
  78.   short user_len;   // username string length
  79.   short user_len;   // username string length
  80.   short user_off;   // username string offset
  81.   byte zero[2];
  82.  
  83.   short host_len;   // host string length
  84.   short host_len;   // host string length
  85.   short host_off;   // host string offset
  86.   byte zero[6];
  87.  
  88.   short msg_len;   // message length
  89.   byte zero[2];
  90.  
  91.   short flags;    // 0x8201
  92.   byte zero[2];
  93.  
  94.   byte dom[*];        // domain string (unicode) 
  95.   byte user[*];        // username string (unicode)
  96.   byte host[*];        // host string (unicode)
  97.   byte lm_resp[*];    // LanManager response
  98.   byte nt_resp[*];    // NT response
  99. } type-3-message
  100.  
  101. Proxy server - inÜtalßcia
  102. Najsk⌠r si stiahnite z adresy www.geocities.com/rozmanov/ntlm/ s·bor s nßzvom ntlmaps091.zip. ╧alej budete potrebova¥ Python 1.5.2 alebo vyÜÜiu verziu http://www.python.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: 
  103. LISTEN_PORT:5865
  104. 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.localdomain. 
  105. PARENT_PROXY:
  106. PARENT_PROXY_PORT:
  107. IP adresa a port nadradenΘho proxy win2k servera.
  108. DOMAIN:
  109. Nßzov Windows domΘny, v ktorej mßte vytvoren² ·Φet.
  110. USER:
  111. Meno u₧φvate╛a, ktor² mß oprßvnenie pristupova¥ do Windows domΘny. 
  112. PASSWORD:
  113. Heslo u₧φvate╛a. Tento parameter nemusφte vypσ≥a¥, po spustenφ vßs proxy server vyzve na zadanie hesla pre 
  114. prφstup do Windows domΘny. 
  115. ALLOW_EXTERNAL_CLIENTS:
  116. Ak tento parameter nastavφte na 1 (ALLOW_EXTERNAL_CLIENTS:1), umo₧nφte pou₧φva¥ vßÜ  autorizaΦn² 
  117. proxy server klientom in²ch poΦφtaΦov. 
  118. FRIENDLY_IPS:
  119. Ak vßm  nevyhovuje, ₧e pomocou ALLOW_EXTERNAL_CLIENTS:1 maj· prφstup cez vßÜ  ·Φet vÜetky poΦφtaΦe, nastavte ALLOW_EXTERNAL_CLIENTS: 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 
  120. DEBUG:0
  121. Nastavenφm tejto hodnoty na 1 sa zaΦn· vytvßra¥ log s·bory. Za ka₧d· connection sa vytvorφ jeden s·bor. BIN_DEBUG:0
  122. 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φ). 
  123. URL_LOG:0
  124. 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². 
  125. [CLIENT_HEADER]
  126. Tßto sekcia popisuje, Φo a ako mß server zmeni¥ v zßhlaviach klientov (clients headers). 
  127.  
  128. Zßver
  129. Uveden² program pracuje bez problΘmov ako v Linuxe, tak i vo Windows. Bol testovan² na distrib·cii Red Hat 7.1 (Cartman) s verziou jadra 2.4.2-2. 
  130.  
  131. Peter GaÜparoviΦ
  132.  
  133. Infotipy:
  134. NTLM Authorization Proxy Server        http://www.geocities.com/rozmanov/ntlm/ 
  135. NTLM authentication module for Apache/Unix    http://modntlm.sourceforge.net/ 
  136.  
  137.