HTTP CONNECT and friends

אחת השיטות (מתודות) שפרוטוקול HTTP/1.1 הגדיר היא CONNECT. השיטה הזו נועדה לבקש פתיחת מנהרה לשרת הרצוי משרת הפרוקסי. השימוש העיקרי הוא לפתיחת ערוץ תקשורת עם אתרים מאובטחי SSL\TLS, ולא ששרת הפרוקסי יעביר את הבקשות שלנו בשמנו. וכדי שהאבטחה והפרטיות באמת יתקבלו נרצה לדבר ישירות לאתר המרוחק (לפתוח ערוץ שיחה פרטי). ולכן נשתמש בשיטה זו, מה שכל דפדפן מודרני עושה בהקשר זה. כיוון ששרת הפרוקסי רק מתעל את התקשורת ביננו לאתר המרוחק. ובדרך כלל לא באמת בודק מה אנחנו מעבירים נוכל לנצל שיטה זו לדברים אחרים.

פרוייקט וותיק בשם corkscrew הוא כלי לפתיחת מנהרות דרך HTTP Proxy Server, וכמובן שאפשר לתעל דרכו כל דבר אם כי בדוגמא שניתן היא לגבי SSH ובפרט OpenSSH.

אופן השימוש ב corkscrew מאוד פשוט:

לדוגמא אם שרת הפרוקסי בחברה שהמשתמש עובד בה נקרא httpproxy.company.com והוא מאזין בפורט 8080, והמשתמש רוצה לתעל לבית שלו להתחבר ב SSH. והכתובת בבית שלו היא myhome.no-ip.org אז הוא יעשה כך (בשורה אחת):

בדוגמא זו הנחתי שמשתמשים בלקוח SSH של OpenSSH. ואחת האפשריות שלו היא ProxyCommand, משמעות האפשרות הזאת היא לתת לתהליך אחר לפתוח את ההתקשרות מול השרת, ולהתממשק לתהליך הזה דרך הפלט\קלט הסטנדרטי.

כמובן שההנחה שלי שהפרוקסי ייתן לנו לפתוח מנהרה בפורט 22, שהוא הפורט הסטנדרטי ל SSH, היא מאוד בעייתית. כי רוב הפרוקסים מגבילים דבר זה לדוגמא:

כיוון שהורתי לשרת ה SSH במחשב שלי להאזין לפורט 443, שהוא הפורט הסטנדרטי ל SSL, אני מסוגל לעשות את הדבר הבא:

בדוגמא לעיל השתמשתי בכלי  ncat כדי להדגים את מה ש corkscrew עושה. ניתן לראות שאני מורה ל ncat להתחבר ל localhost לפורט 3128, שזה הפורט הסטנדרטי של Squid-Cahce שזה שרת הפרוקסי שאני מריץ כרגע על המחשב שלי. ואז לאחר שנפתחה התקשורות אני הקלדתי את הבקשה לפתיחת מנהרה ככה:

שני מעברי השורה הם בכוונה, כי כך מסתיים מקטע הראש (HEAD) בבקשת HTTP.

ולאחר מכן את התשובה של הפרוקסי:

גם כאן שני מעברי השורה הם הכרחיים כי זה חלק מראש תשובה ב HTTP, לאחר מכן בא התוכן שבמקרה שלנו הוא פשוט התקשורת שמועברת במנהרה והיא ה HelloServer, של פורטוקול ה SSH, ששרת ה SSH , שלי עונה כך:

שמכאן ניתן לראות שאני מריץ שרת OpenSSH, בגירסא 5.4, והוא רוצה לדבר בפרוטוקול SSH גירסא 2.

כיוון שאני לא יודע לכתוב באופן ידני SSH, אז הנה דוגמא עם שימוש ב ProxyCommand:

וולא!


Leave a Comment

האימייל לא יוצג באתר. שדות החובה מסומנים *

*
*