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

אספו את עובדות הבקשה שאפשר להגן עליהן

הכתובת היחידה שהשרת שלכם יודע בוודאות היא עמית ה-TCP שהשלים את החיבור. כאשר CDN או פרוקסי הפוך מסיים את החיבור הזה, העמית הוא הקצה, וכתובת הלקוח נוסעת בכותרת העברה שאפשר לסמוך עליה רק אם הקצה שלכם הוסיף אותה. קראו את הרשומה שהפרוקסי שלכם כתב, לעולם לא את המחרוזת השמאלית ביותר, כי לקוח יכול לשלוח שם כל ערך שירצה. כל מה שבהמשך חייב לשמר את ההבחנה הזו.

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

IP=203.0.113.10
dig +short -x "$IP"
whois "$IP" | grep -iE "origin|netname" | head -5

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

נקדו את המבקר לפני שאתם מגבילים אותו

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

SignalWhat it supportsHow it failsTypical action
Hosting ASNTraffic likely originated from infrastructureCorporate VPN and cloud egress look the sameAdd weight, not a block
Reputation verdictA vendor's dated classificationVendors disagree; self-hosted exits look cleanStep-up challenge
RTT versus baselineThe path is longer than usualAnycast, mobile networks, in-country exitsWeak weight only
Forwarded header consistencyWhether the edge saw the claimed clientMisconfigured proxies produce noiseDrop the value, do not score it

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

השאירו את בדיקת המוניטין בצד השרת ומוגבלת

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

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

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

מדדו השהיה בחציון, לא בדגימה אחת

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

קחו כמה דגימות והשתמשו בחציון כדי שבקשה איטית אחת לא תזיז את התוצאה. הלולאה למטה מדפיסה את החציון של חמש.

for i in 1 2 3 4 5; do
  curl -o /dev/null -s -w "%{time_connect} %{time_starttransfer}\n" https://www.example.com/
done | sort -n | sed -n 3p

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

החליטו, תעדו והחזירו אחורה

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

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

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

מאמרים קשורים