Ramat Gan

Reverse vs. Forward Proxy

בואו נדבר קצת על שרתים.

עולם ה-Web עצום ואפשר להתעמק בכמות לא נגמרת של טכנולוגיות וכלים, כאן אני אנסה להנגיש סוג מסוים של כלי שנמצא בשימוש כנראה בכל פלטפורמה גדולה שאתם מכירים: Proxy.

לפני שאתחיל לפרק את ההבדלים בין Reverse ל-Forward, בואו נדבר רגע על הפרוקסי עצמו.
פרוקסי זה פשוט אלמנט שמפריד בין המשתמש, למשאב שאליו הוא מנסה לגשת.

בעצם ללא פרוקסי, לאתר אליו אנחנו ניגשים יש תקשורת ישירה איתנו. עם פרוקסי לעומת זאת, מצטרף לסיפור סוג של "Middle man" שמפריד בין השניים. כל בקשה של המשתמש/האתר עוברת קודם כל דרך הפרוקסי לפני שהיא ממשיכה ליעד שלה.

למה זה טוב? בואו נבין קודם כל מה זה Forward proxy.

Forward Proxy

דמיינו את המצב הבא: אתם מנהלים רשת של חברה גדולה. יש לכם עשרות עובדים שניגשים לאינטרנט כל יום מהרשת המקומית שלכם (LAN). רק הסיטואציה הפשוטה הזאת חושפת את הרשת שלכם לאינספור סכנות.
מה יקרה אם אחד העובדים יכניס בטעות נוזקה כלשהיא לרשת? מצב כזה יכול בפוטנציאל לפגוע בכל הרכיבים של הרשת ולגרום לנזק עצום.

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

לזה קוראים Forward Proxy.

אנחנו בעצם מנתבים את הפעילות של כל המשתמשים שלנו דרך גורם שלישי, שמפריד בניהם לבין הרשת החיצונית (WAN).
מה אנחנו משיגים באמצעות זה?

  • אבטחה – הפרוקסי יכול עכשיו למנוע חדירה של נוזקות לתוך הרשת הפנימית. בגלל שכל בקשה עוברת דרכו, הוא מסוגל למנוע גישה לאתרים זדוניים, או מעבר של נוזקות.
  • ייעול רוחב פס – יתרון נוסף של פרוקסי מהסוג הזה הוא היכולת שלו לשמור משאבים לשימוש של משתמשים אחרים. למשל אם אתר מסוים נמצא בשימוש תכוף של המשתמשים, הפרוקסי יכול לשמור אותו בזיכרון, ולהגיש אותו באופן מיידי למשתמשים שמנסים לגשת אליו. בלי צורך לצאת החוצה אל הרשת החיצונית.

Reverse Proxy

רק מהשם, כנראה שהמטרה של פרוקסי מהסוג הזה היא לעשות את הדבר ההפוך – לחצוץ בין השירות לבין המשתמש, כך שהפעם למשתמש לא תהיה גישה ישירה אל האתר/השירות אליו הוא מנסה לגשת. ובגדול זה נכון, אבל למה שנרצה לעשות את זה? למה לא לאפשר למשתמש גישה ישירה לשירות שאנחנו מציעים?

יתרון האבטחה של Reverse Proxy

כאשר אנחנו מגישים שירות כלשהו באינטרנט באמצעות Reverse Proxy, למשתמש אין גישה ישירה לשרת שבו אנחנו משתמשים בשביל לספק את השירות. זה משמעותי מבחינת אבטחה.

  • המשתמשים שלנו עכשיו לא יכולים לראות את כתובת ה-IP של השרת שמגיש את השירות, רק את כתובת ה-IP של הפרוקסי. זה מעולה בגלל שזה מקשה מאוד על ביצוע מתקפות DDoS למשל, שמטרתן להקריס שרת באמצעות כמות גדולה של בקשות.
  • הפרוקסי שלנו יכול להסתיר מידע מסוים שמגיע כלול בתשובות של השרת שלנו, ושעלול לחשוף מידע לגביו.
  • בכך שאין גישה ישירה לשרת, משתמש לא מורשה לא יכול לבצע עליו פעולות (במידה ויש כשל אבטחתי שיכול לאפשר לו את זה).

יתרון פיזור הפעילות של Reverse Proxy

תדמיינו שאתם מפעילים שירות מאוד פופולרי, ולכן אתם צריכים לתת מענה לכמות ענקית של משתמשים. בגלל זה, דאגתם לשכור כמה שרתים על מנת שתוכלו לעמוד בעומס.

אבל מה יקרה אם בגלל טעות כלשהיא, או סתם חוסר מזל, הרוב המוחלט של הבקשות יגיעו לשרת אחד בלבד? עכשיו בעצם מתוך כל השרתים שלכם, שרת אחד קורס תחת העומס, כשכל השאר יושבים ולא עושים כלום. התוצאה של מצב כזה היא פשוט קריסה או האטה של השירות, לומרות שיש עוד מספר שרתים שמוכנים לקבל בקשות.

כאן Reverse Proxy נכנס לתמונה. במקום לאפשר ללקוחות לבצע בקשות ישירות עם השרת, הפרוקסי "לוקח את המושכות" ומחליט בעצמו מי הולך לאן. ככה הוא יכול לוודא שהעומס שמגיע אליכים מפוזר באופן חכם בין כל השרתים, ולמנוע צוואר בקבוק.

Load balancer vs. Reverse proxy

אם יצא לכם להפעיל שירות גדול, או סתם אם אתם מתעניינים בעולם הזה, כנראה שמעתם על Load balancers. דוגמה מאוד פופולרית היא ה-Load balancer של AWS.

Load balancer מבצע בדיוק מה שאתם חושבים: הוא מפזר את הפעילות על גבי השרתים שמגישים את השירות. אבל רגע, זה לא בדיוק מה ש-Reverse Proxy עושה? למה אנחנו צריכים משהו כזה אם כבר הגדרנו פרוקסי ברשת שלנו?

התשובה לשאלה הזאת היא שלעבוד עם שניהם זה אפילו יותר טוב!
העניין הוא שהדרך שבה Load balancer מפזר את הפעילות היא קצת יותר בסיסית. למשל Load balancer אולי יפזר את הפעילות בהתאם לאיזה שרת הכי עמוס.

Reverse Proxy לעומת זאת, יכול לתקשר עם השרת באופן ישיר ולקבל החלטות יותר חכמות, כמו למשל לנתב את כל הבקשות שמגיעות ממשתמש מסוים לשרת ספציפי, ולא להחליף. או לנתב את הבקשה בהתאם לסוג שלה, ובכך לשלוח בקשות כבדות יותר לשרתים חזקים יותר. אלו דברים שלרוב Load balancer לא יעשה.

תוכנות פרוקסי פופולריות מאוד הן למשל Nginx ו- Apache, אני באופן אישי משתמש ב-Apache בשרתים שאני מפעיל לכל מיני מטרות.

וזהו סה"כ! מקווה שנהנתם 🙂 רציתי לדבר קצת על משהו שהתעסקתי איתו הרבה לאחרונה

כתיבת תגובה

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