חסימה גיאוגרפית של CloudFront מאחורי VPN: אבחון היציאה
ה-edge מחליט לפי הכתובת שהוא רואה, ויציאה משותפת משנה גם את המדינה וגם את המוניטין. בדקו כל בקרה בנפרד לפני החלפת צמתי יציאה.
הגבלה גיאוגרפית היא החלטה על כתובת IP, ו-VPN משנה איזו כתובת השירות רואה. המשפט האחד הזה מסביר את רוב הדיווחים המבלבלים שמגיעים לתור תמיכה: «האתר עובד בבית ונכשל במנהרה» ו«האתר עובד במנהרה אבל אף אחד אחר במשרד לא מצליח לטעון אותו» הם אותו מנגנון שמייצר תוצאות הפוכות. ספר הפעלה זה עובר על האבחון בסדר שמאיין סיבות, בהתחלה ממה שה-edge באמת אמר לכם. אותה כתובת יציאה יכולה לעבור בקרה אחת ולהיכשל בבאה, כי כל בקרה מעריכה תכונה אחרת של אותה כתובת.
קראו את ה-403 לפני שמשנים משהו
חסימה גיאוגרפית וחסימת WAF מגיעות שתיהן כ-403, והן מתוקנות במקומות שונים. תעדו את כותרות התגובה ואת השורה הראשונה של הגוף, כי CloudFront מוסיף כותרת מטמון ומחרוזת סיבה שאומרות לכם איזו שכבה ענתה:
curl -sS -o /tmp/body.txt -D /tmp/headers.txt https://d111111abcdef8.cloudfront.net/
grep -i "x-cache\|via" /tmp/headers.txt
head -c 300 /tmp/body.txt
כאשר ההפצה עצמה חסמה את הבקשה בגלל גיאוגרפיה, הגוף נושא הודעה שמציינת את הגבלת המדינה. כאשר כלל WAF חסם אותה, הגוף הוא בדרך כלל דף אסור גנרי ומזהה בקשת ההפצה בכותרות הוא מה שלוקחים ללוגים של WAF. טעות כאן שולחת אתכם לרשימת המדינות המותרות בגלל בעיית כלל מבוסס קצב, וזה יום עבודה שאינו יכול להצליח.
שלב 1: ודאו איזו כתובת ההפצה רואה
שאלו את הרשת מה העולם החיצון רואה, מאותו מחשב ומאותו מסלול שהדפדפן שנכשל משתמש בו. curl -s https://checkip.amazonaws.com מחזיר את הכתובת הציבורית של הקורא, שלגבי לקוח VPN היא היציאה ולא החיבור הביתי של המנוי:
curl -s https://checkip.amazonaws.com
nslookup d111111abcdef8.cloudfront.net
אם הכתובת הזו שייכת ליציאה של הספק שלכם במדינה אחרת, ההחלטה הגיאוגרפית כבר התקבלה ושום דבר בלקוח לא ישנה אותה. כתבו את הכתובת בכרטיס לפני שנוגעים בהגדרה, כי זו העובדה היחידה בדוח שעליה אתם והשירות מסכימים.
שלב 2: הפרידו בין מדינה למוניטין
CloudFront קובע את מיקום הצופה ממסד נתונים GeoIP של צד שלישי הממופתח לפי כתובת המקור של הבקשה, והמיפוי מקורב ואזורי ולא קביעה מדויקת. כאשר לא ניתן לקבוע את המיקום, ברירת המחדל המתועדת היא להגיש את התוכן. לכן יש שלושה מצבים אפשריים: היציאה ממופה למדינה חסומה, למדינה מותרת, או שלמסד הנתונים אין דעה והבקשה ממשיכה.
משתמש במדינה חסומה יכול להיראות כאילו הוא במדינה מותרת אם לספק יש יציאה שם, ומשתמש במדינה מותרת יכול להיחסם כי היציאה רשומה במקום אחר. אף אחת מהתוצאות לא מוכיחה שההגבלה שבורה. שתיהן הן ההגבלה שפועלת על הכתובת שניתנה לה, כפי שמתארת התיעוד של CloudFront להגבלות גיאוגרפיות.
מוניטין הוא הציר השני והוא שורד את המנהרה. קבוצת הכללים המנוהלת של AWS WAF לכתובות IP אנונימיות נבנתה כדי לחסום בקשות מ-VPN, פרוקסי, צמתי Tor וספקי אחסון, ולכן בקשה שעוברת את בדיקת המדינה עדיין עלולה להידחות בגלל מה שהכתובת היא, לא היכן היא. אם החסימה החלה כשהעברתם את המנהרה למארח ענן, זו ככל הנראה השכבה.
שלב 3: בדקו את התנהגות המכסה
יציאות משותפות נכשלות בדרך שלישית. מגבלות קצב לכל IP וספירת הפעלות מתייחסות לכתובת אחת כלקוח אחד, ויציאת צרכן נושאת מנויים רבים בבת אחת, ולכן דפוס בקשות ששגרתי מחיבור ביתי נראה מהיציאה כמו אוטומציה. הסימפטום הוא החסמה או חסימה זמנית שנעלמת מעצמה, לא הודעת שגיאה גיאוגרפית.
הפצה יכולה גם לספור הפעלות לכל כתובת בכוונה, למשל עם פונקציית Lambda@Edge שכותבת ל-DynamoDB. זה לא מזהה את האדם שמאחורי היציאה, אבל זה גורם לכתובת אחת להתנהג כלקוח אחד, וזה לעתים קרובות הכוונה האמיתית. תעדו את הכתובות השונות שמאחורי תלונה לפני כיוון של סף כלשהו, כי NAT ארגוני מול מאתיים שולחנות נראה מבחוץ בדיוק כמו יציאה עמוסה. צפו לחיוביים שגויים מ-NAT ארגוני, מרשת אוניברסיטה או ממשק בית גדול שכולם מציגים כתובת אחת.
הסתכלו בבקשות הדגומות של WAF ובמדדי כללים מבוססי קצב לפני שאתם מאשימים את הגיאוגרפיה. כלל שמתעורר לפי נפח הבקשות של היציאה מותיר חתימה ברורה, והוא גם אומר לכם אם התיקון הוא התאמת מגבלה או נתיב יציאה אחר.
מה לשנות, ובאיזה סדר
קודם כל החליטו לשם מה הבקרה. החזקת קטלוג אזורי, הגבלת ניצול לרעה ואכיפת חוזה הם שלושה יעדים שונים, ורק הראשון מטופל ברשימת מדינות. אם היעד הוא בקרת ניצול לרעה, היציאה היא יחידת הזהות הלא נכונה, וכל כמות של רשימות מותרות לא תהפוך כתובת משותפת לאמינה.
אם באמת נדרשת כתובת יציבה לרשימת מותרות, יציאה ייעודית או סטטית עוזרת כי ניתן לרשום את הכתובת והיא לא מסתובבת. היא לא הופכת את הכתובת למגורית, ולא משנה את המדינה שמסד GeoIP מקצה לה. החלפת יציאות עד שאחת עובדת היא שינוי מוניטין זמני, לא תיקון של המדיניות.
לאחר מכן כתבו את התוצאה במונחים שבהם השתמש המבקש: הכתובת הזו חסומה לפי מדינה, לפי מוניטין או לפי קצב, וזו הבקרה שתתשנה. כל דבר מעורפל יותר מזמין את אותו כרטיס בשבוע הבא עם יציאה אחרת.