סיבוב כתובות IP של פרוקסי בלי VPN: מה היציאה רואה
סובבו יציאות פרוקסי בלי VPN: מה פרוקסי HTTP יכול לקרוא, איך הפעלות דביקות מונעות מצב שבור ואיזו יציאה תוכלו להגן עליה במדיניות.
סיבוב פרוקסי ו־VPN משנים את הכתובת הציבורית שלכם בשכבות שונות, וההבדל הזה קובע מה ידלוף. VPN מעביר כל מנה למנהרה, ולכן כתובת המקור שהמטרה רואה היא נקודת הקצה של המנהרה. פרוקסי יושב מעל שכבת הרשת: רק הבקשות שאתם שולחים דרכו מופיעות מהיציאה, בעוד שכל השאר במכונה שומר על הכתובת האמיתית. כשההפרדה הזאת נעשית נכון, הסיבוב הופך מתיבת סימון להחלטת תכנון.
מאיפה הכתובת הציבורית באמת מגיעה
הכתובת שהמטרה רואה היא זו שממנה התעבורה שלכם יצאה לאחרונה, ובחיבור ביתי זו הכתובת של הספק בנתב שלכם, לא משהו שהמכונה מחזיקה. הפעלה מחדש של הנתב עשויה להחזיר את אותה חכירה, ושינוי כתובת ה־MAC שלו לפעמים מייצר חדשה, אבל אף אחד מהם לא נותן לכם בורר מדינות. VPN מחליף את כתובת המקור בשכבת ה־IP, ולכן כל מנה מהמכונה, כולל DNS ועדכוני רקע, יוצאת מנקודת הקצה של המנהרה. פרוקסי עובד שכבה אחת למעלה: הוא מקבל בקשה, פותח חיבור משלו אל המטרה, ורק הבקשה הזאת מופיעה מהיציאה. כל השאר במכונה עדיין משתמש בכתובת האמיתית.
ההפרדה הזאת מסבירה את רוב ההפתעות. תוספת דפדפן שמכוונת לפרוקסי משנה רק את מה שהדפדפן שולח ושום דבר אחר, ולכן אפליקציה שנייה באותו מארח עדיין מדליפה את הכתובת המקורית. ל־VPN ברמת המערכת יש מצב כשל הפוך: הוא מכסה תעבורה שרציתם להשאיר מקומית ונסגר רק אם הלקוח מוגדר לכך. לבחור בין השניים זה בעצם לבחור איזו תעבורה חייבת לזוז.
הסיבוב חל אז על השכבה שבחרתם. עם פרוקסי, סיבוב אומר שהבקשה הבאה משתמשת ביציאה אחרת. עם VPN, זה אומר לפרק ולבנות מחדש את המנהרה, וזה איטי יותר ונראה כחיבור מחדש גלוי.
מה פרוקסי HTTP יכול לקרוא, ומה לא
ב־HTTP פשוט הפרוקסי רואה URI מוחלט בשורת הבקשה, כל כותרת וגם הגוף. הוא יכול לתעד את הכול ולשכתב כל חלק, ולכן פרוקסי חינמי שמזריק סקריפט לתגובות עושה בדיוק את מה שהפרוטוקול מתיר. האימות משתמש ב־ Proxy-Authorization, ופרט זיהוי חסר או שגוי מפיק 407 Proxy Authentication Required במקום שגיאת חיבור.
ב־HTTPS הלקוח שולח CONNECT host:port והפרוקסי פותח מנהרה גולמית, ולאחריה הוא רואה בתים מוצפנים. הוא עדיין לומד את שם המארח משורת CONNECT ובדרך כלל משדה SNI בלחיצת היד של TLS, ולכן תיעוד ברמת שם המארח שורד גם כשהמטען לא. קריאת המטען דורשת סיום TLS עם תעודה שהלקוח סומך עליה, וזה מוצר אחר עם סיכון אחר. ה־ מפרט הסמנטיקה של HTTP מגדיר את CONNECT כבקשת מנהרה, וזה מודל החשיבה הנכון למה שיציאה יכולה ולא יכולה לראות.
curl -v -x http://proxy.example.net:8080 https://example.com 2>&1 | grep -E 'CONNECT|Proxy-'
הפלט המפורט מראה את שורת CONNECT לפני כל תעבורת TLS, וזה הרגע שבו הפרוקסי לומד את היעד שלכם. פרוקסי שעונה ב־407 מעולם לא פתח את המנהרה, ולכן ניסיון חוזר עם הגדרות TLS אחרות לא יעזור.
גרנולריות הסיבוב קובעת מה נשבר
סיבוב בכל בקשה הוא ההגדרה שנראית הבטוחה ביותר ושוברת הכי הרבה. קובצי cookie, אסימוני CSRF והפעלות בצד השרת קשורים לזהות, וזהות שמשתנה בין הכניסה לקריאה הבאה נראית למטרה כמו חטיפת הפעלה. ספקים רבים מציעים הפעלה דביקה על ידי קידודה בשם המשתמש של הפרוקסי, כך שהיציאה נשארת קבועה בחלון נבחר.
בחרו את הגרנולריות לפי המשימה, לא לפי ברירת המחדל של הספק. סורק שמביא דפים עצמאיים יכול לסובב בכל בקשה, בעוד שתהליך תשלום או API מאומת חייבים להחזיק יציאה אחת לכל התהליך. שתי הקריאות למטה מציגות שם משתמש דביק ונקודת קצה מסתובבת פשוטה, וה־ socks5h סכימה פותרת שמות בפרוקסי במקום באופן מקומי.
curl -sS -x http://user-session-a1b2:[email protected]:8080 https://ifconfig.me
curl -sS -x socks5h://127.0.0.1:1080 https://ifconfig.me
DNS מקומי הוא דליפה שקטה. אם הלקוח פותר את השם לפני ההתחברות, הפותר עדיין לומד כל מארח שאתם מבקרים בו למרות שבקשת ה־HTTP יוצאת במקום אחר. ה־ socks5h צורה והפתרון בצד הפרוקסי מונעים זאת, והשימוש בהם לא עולה דבר.
מה המטרה מסווגת מעבר לכתובת
המוניטין של הכתובת הוא קלט אחד מבין כמה. מטרות משלבות את ה־ASN והתווית שלו כמרכז נתונים או מגורים, את טביעת האצבע TLS של הלקוח, הגדרות HTTP/2, סדר הכותרות, קצב הבקשות וצורת הניווט. יציאת מגורים שמונעת על ידי דפדפן ללא ממשק עשויה להיכשל במקום שבו יציאת מרכז נתונים שמונעת על ידי הפעלה אמיתית עוברת.
סוג היציאה קובע מה תוכלו לטעון ביושר לגבי התעבורה, וכל אחד נושא עלות אחרת.
| Exit type | What the target sees | Main cost |
|---|---|---|
| Datacenter proxy | Hosting ASN, cheap, often pre-blocked | Low reputation, easy to detect |
| Residential network | A consumer ISP address belonging to someone else | Consent and terms-of-service exposure |
| Mobile carrier | A carrier NAT address shared by many subscribers | Price, plus shared blame for abuse |
| Your own cloud egress | An address you are accountable for | Recognisable, but defensible |
יציאה משותפת אינה ניטרלית. כל דבר אחר שרץ מאותה כתובת נוחת באותו דלי מוניטין, וכתובת שכבר נשרפה על ידי שוכרים אחרים נכשלת לפני שהבקשה הראשונה שלכם נקראת.
בחרו יציאה שתוכלו לתאר במדיניות
השאלה המועילה אינה איך להסתיר את הכתובת אלא מי אחראי לתעבורה שיוצאת ממנה. יציאת הענן שלכם לכל משימה, ספק בחוזה עם הסכם עיבוד נתונים ושמירה מפורסמת, ו־VPN באחסון עצמי עם זהות אחת לכל משימה — כולם ניתנים לתיאור במשפט אחד. רשימה חינמית לא, כי למפעיל שלה אין שום חובה כלפיכם ויש לו כל תמריץ לתעד.
שמרו על מגבלות הקצב שלכם מתחת למה שהמטרה סובלת, ואספו רק את השדות שהמשימה צריכה, כדי שטעות תישאר קטנה. סיבוב מהיר יותר כדי להימלט מחסימה בדרך כלל מעלה את קצב הבקשות שגרם לה.
כתבו את היציאה שנבחרה, את חלון הסיבוב שלה ואת הבעלים שלה בתצורת העבודה לפני הריצה הראשונה. כשהחסימה מגיעה, הפתק הזה הוא מה שאומר לכם אם להחליף את היציאה או לשנות את ההתנהגות.