לדלג לתוכן

3.6 פרוקסי, טינול, ויפיאן הרצאה

פרוקסי - proxy

מהו פרוקסי?
קונספט: פרוקסי (Proxy) הוא שרת שמתפקד כמתווך בין משתמש (קליינט) לבין שרת אחר. כאשר המשתמש מבקש לגשת למשאב מסוים באינטרנט, הבקשה עוברת דרך שרת הפרוקסי, והוא זה שמעביר את הבקשה לשרת היעד. לאחר שהשרת מחזיר את התשובה, הפרוקסי מעביר אותה חזרה למשתמש.
- חשבו על פרוקסי כשרת מתווך, שאחראי להעביר פאקטות שלכם ליעד.

פרוקסי משמש למטרות שונות:
- כמו הגנה על פרטיות המשתמש: מה אם תרצו לגשת לדבר כלשהו באינטרנט מבלי לחשוף את הip שלכם? מבלי לחשוף את הזהות שלכם?
- גישה לאתרים חסומים: המון פעמים אתרים ומוצרים באינטרנט חוסמים כתובות ip מסויימות, עם פרוקסי תוכלו לצאת עם src ip אחר ולעקוף את המנגנון.

סוגי פרוקסי נפוצים:
1. פרוקסי שקוף (Transparent Proxy):
- סוג זה של פרוקסי עובר ללא ידיעת המשתמש, ומתווך בין הבקשות שלו לאתרים השונים מבלי לשנות את הבקשה.
- דוגמא: בבתי ספר או בעסקים, פרוקסי שקוף משמש לפיקוח על השימוש באינטרנט.
יצא לכם שלא יכלתם לגשת לאתרים מסויים בבית ספר, וויפי ציבורי, או במקום עבודה? זה כנראה פרוקסי שקוף שחוסם אתכם.

  1. פרוקסי אנונימי (Anonymous Proxy):
  2. פרוקסי זה מסתיר את כתובת ה-IP האמיתית של המשתמש ומציג כתובת IP חלופית לשרת היעד, אך עדיין יכול לחשוף שמדובר בפרוקסי.
  3. דוגמא: שימוש בפרוקסי אנונימי לגישה לאתרים שמגבילים גישה על פי מיקום גיאוגרפי. - כי ip משוייך לרוב למדינה כלשהי או אזור.

  4. פרוקסי הפוך (Reverse Proxy):

  5. פרוקסי זה ממוקם מול שרת אינטרנט כדי להגן עליו, להאיץ את הביצועים, או לאזן עומסים. כל בקשה שמגיעה לשרת עוברת דרך פרוקסי זה.
  6. דוגמא: חברה גדולה המשתמשת בפרוקסי הפוך כדי לאזן את העומס על כמה שרתים, דמיינו שיש מיליון אנשים שפונים לגוגל בשנייה, גוגל לא יכולים שיהיה להם מחשב אחד שיעבד את כל הבקשות, אז יש להם המון מחשבים שכל אחד מהם מריץ את השרת http ואז יש את הפרוקסי (הload balancer- מבזר עומסים) שיודע לחלק את התעבורה בין השרתי http ובכך לטפל גפ במיליוני בקשות בשניה.

אז איך עושים פרוקסי?
יש 2 דרכים שכדאי לכם להכיר כדי לממש פרוקסי:
1. פרוקסי מעל http: באמצעות הheader הhost אפשר להסיק לאן הבקשה אמורה להגיע, וכך אנחנו יכולים לממש שרת http proxy שכאשר אנחנו שולחים את הבקשת http לשרת הproxy הוא ידע לאן להעביר את הבקשה (לhost שנמצא בheader.)
2. פרוטוקול socks: פרוטוקול socks ממש פרוקסי, ונמצא מעל שכבת התעבורה ומתחת לאפליקציה. בפרוטוקול מסומן הip אילו אנחנו רוצים שהפרוקסי יפנה אותנו, לפורט, וכמובן גם הip שלנו והפורט שלנו. אחרי שהבקשה מגיעה לשרת proxy הוא ידע בדיוק לאן להעביר את הבקשה, וכשהיא תחזור גם לאן להחזיר אותה. החלק היפה בsocks שהוא מאפשר לנו לעשות proxy לכל פרוטוקול בשכבת האפליקציה, כי הוא תמיד נמצא שכבה מתחת. וכל מה שאנחנו צריכים זה client שתומך בsocks כדי להעביר את הפאקטה עם socks, ושרת socks.

קראו באינטרנט בעצמכם על הכלים הבאים.
כלים שימושיים עם פרוקסי:
- הכלי proxfier: כלי ווינדוזי שיכול להפוך כל פרוסס במערכת לclient proxy שמדבר בsocks, ותוכלו גם להגדיר לפרוסס לאיזה שרת proxy לדבר איתו.
- הכלי mitmproxy: כלי שמאפשר ליצור שרת proxy על המחשב שלכם כדי לנטר על פאקטות http. קיימת לו גם ספרייה בפייתון, ואיתה אתם יכולים לפתח איזה שרת proxy שתרצו.
- הכלי burpsuite: כלי נהדר למחקר אתרים, שיוצר שרת http proxy שתומך גם בhttps ויודע לחקור בקשות http, ומאפשר המון כלים למחקר אתרים.
- גם בדפדפן שלכם קיימת כנראה הגדרה של לקוח פרוקסי, שיכול להפוך לכם את הדפדפן לclient proxy שמעביר את כל הבקשות שלו לשרת פרוקסי שאתם מגדירים
- הכלי foxyproxy תוסף לדפדפנים שמאפשר ליצור פרופילים של שרתי proxy שהוא מעביר אליהם את הבקשות, ומאפשר להחליף בניהם מהר במקום לפתוח את ההגדרות של הדפדפן בכל פעם.
- הכלי proxychains הוא כלי לינוקסי דומה מאוד לproxyfier ומאפשר לנו לכתוב פקודות בטרמינל, שכאשר כל פקודה שנשים אחרי הproxychains כל הסוקטים שלה יצאו לשרת socks שנגדיר בהגדרות

טינול - tunneling

  • טינול תעבורה היא יצירת מנהרה בין סוקטים שונים. קיימים המון סוגים של טינולים, בשיעור נדבר על 3 סוגי טינולים ששרתי SSH מאפשרים לנו.

  • טינול מקומי: local port forwarding- טינול זה מאפשר לנו לגרום לכך שעל שרת ssh מסויים, כל פאקטה שתגיע לפורט מסויים, תועבר לip ופורט אחר שנחליט. כדי לבצע זאת על שרת SSH נקליד את הפקודה הבאה:

    ssh -L localport:retmoteip:remoteport ssh_username@ssh_server
    

    למשל הפקודה הבאה, תעביר כל דבר שאנחנו שולחים בפורט 50, לip של גוגל בפורט 53.
    ssh -L 50:8.8.8.8:53 amitp@127.0.0.1
    

    עכשיו אם נדבר עם פורט 50 לשרת SSH, זה יעביר את הפאקטות ל8.8.8.8 בפורט 53. אפילו אם כמשתמש בתוך המחשב שמריץ את הssh, ונשלח לוקלית לפורט 50 פאקטות זה יעביר אותם לip של השרת dns של גוגל בפורט 53.

  • שימו לב שגם בפקודה נקליד את השם משתמש והip של המחשב אילו אנחנו רוצים להתחבר בssh, במקרה הזה אני מתחבר לוקלית למחשב שלי בssh עם המשתמש amitp. (משתמש שקיים במחשב שלי.) כמובן שאפשר גם להתחבר בssh למחשב מרוחק עם ip מרוחק, והפעולת הטינול תתבצע על המחשב שאילו אנחנו מתחברים בssh.

  • טינול מרוחק: remote port forwarding- טינול פחות נפוץ בssh שמאפשר לנו לטנל פורט לוקלי על המחשב שלנו, ולפרוורד אותו למחשב אחר. מתי זה שימושי?

  • דמיינו ופתחנו שרת http בבית שלנו, ובגלל שיש לנו דאבל nat אנחנו לא יכולים לפתוח פורט על הראוטר- כדי להוציא את הפורט לאינטרנט, אנחנו יכולים להתחבר לשרת ssh מרוחק ולעשות remote port forwarding- בעצם לקחת את הפורט שפתחנו במחשב, ולפתוח אותו על השרת ssh.

    ssh -R remoteport:localinterface:localport ssh_username@ssh_server
    

    נניח ובמקרה הזה השרת http שלנו מאזין ב3000 ואנחנו רוצים שהוא יאזין על השרת ssh ב80 נריץ את הפקודה הבאה:
    ssh -R 80:localhost:3000 amitp@127.0.0.1
    

  • טינול דינמי: dynamic port forwarding- טינול חזק מאוד בssh שמאפשר לפתוח שרת socks לוקלית על המחשב שאיתו אתם מריצים את הפקודת ssh, ומאפשר שכל פאקטת socks שהפורט הלוקלי שלנו מקבל, תטונל דרך השרת ssh.

    ssh -D localport ssh_username@ssh_server
    

    אם נריץ את הפקודה הבאה:
    ssh -D 9050 ssh_username@ssh_server
    

    מעכשיו כל פאקטת socks שנעביר לפורט 4444 לוקלית על המחשב שלנו, תצא מהשרת ssh.

ויפיאן - vpn

  • אני כבר אומר שיש המון סוגי ויפיאנים, ואני לא אדבר על כולם. אבל רובם בנויים על עקרון דומה. vpn הוא קיצור של virtual private network - או בעברית, רשת פרטית וירטואלית. vpn מאפשר למחשב שלנו להתחבר לרשת LAN מרוחקת, כיאלו שהמחשב שלנו ממש חלק מהLAN ומחובר פיזית לרשת בצורה מוצפנת ובטוחה.
    קיימים שני סוגי vpn-ים נפוצים
  • ויפיאן שכבה 2: ויפיאן שמטנל את כל התעבורה של המחשב, ברמה של שכבת הקו- והלאה (משכבה 2 ומעלה). זה אומר שזה מאפשר למחשב ממש לשלוח בקשות arp, ולדבר עם המחשבים ברשת LAN המרוחקת כיאלו שהם באותו הLAN - ממש mac עם mac.
  • ויפיאן שכבה 3: דומה לקודם, רק שפועל מעל שכבה 3, (מעל שכבת הקו.)

אז איך זה נראה?
- בכל חיבור vpn קיים שרת ולקוח, כאשר השרת נמצא ברשת LAN אלייה הלקוחות מתחברים. והלקוחות הם בדרך כלל תוכנות שמתחברות לשרת.
- פאקטת vpn נראת כך: בשכבה החמישית (האפליקציה) של הפאקטה שהלקוחות שולחים לשרת vpn נמצא פאקטה מוצפנת (ממש מהשכבה השנייה ומעלה). ואז השרת vpn מפענח את ההצפנה, ולוקח את הפאקטה ושולח אותה בLAN שלו. כך שממש נשלחת אותה פאקטה ששלחנו במחשב שלנו.
- בדרך כלל בצד לקוח vpn ממש יצור interface חדש במחשב, כיאלו שיש לנו interface שמחובר ישירות לlan המרוחק. נוכל לראות זאת עם ipconfig

שימושי vpn:
1. השימוש הנפוץ ביותר הוא להתחבר לרשת של המקום עבודה שלך מהלפטופ בבית, לרוב זה קורה כי ברשת של העבודה קיימים כל התשתיות שאתה צריך בשביל העבודה, ואתה תרצה להתחבר לשרת vpn של המקום עבודה כדי להתחבר לLAN מהבית שלך.
2. יש המון מוצרי vpn שהם לא ממש דומים לvpn קלאסי, אלה יותר כמו שרת proxy. שאתם עם התוכנה שלהם מתחברים לשרת vpn מרוחק שכל מה שהוא עושה זה מוציא אותך לאינטרנט מip כלשהו שאתה בוחר. ואז כך אתם יכולים בפרטיות לאינטרנט עם ip אחר.

  • חשוב להכיר את המוצר openvpn המאוד פופלארי שמאפשר לנו להרים בקלות שרת vpn בבית שלנו, וגם להשתמש בלקוח של openvpn כדי להתחבר לשרתי openvpn. בנוסף קיימת קונפיגורציה לכל לקוח ושרת openvpn כזה שכדאי לקרוא.