סקירה כללית #
מאמר זה מסביר כיצד להעביר iRule של F5 BIG-IP המשמש לחסימת בקשות על סמך X-Forwarded-For כותרת HTTP לתוך RELIANOID באמצעות המשולב WAF/IPDS (מערכת למניעת וגילוי חדירות) מופעל על ידי תואם לכללי ModSecurity/OWASP.
ה-iRule המקורי בודק את X-Forwarded-For כותרת ומחזירה HTTP 410 Gone כאשר נמצאה התאמה מול רשימה של כתובות IP.
F5 iRule מקורי #
כאשר HTTP_REQUEST { אם { [HTTP::header values "X-Forwarded-For"] מכיל "31.192.108.123" || [HTTP::header values "X-Forwarded-For"] מכיל "65.103.109.21" || [HTTP::header values "X-Forwarded-For"] מכיל "193.90.12.87" || [HTTP::header values "X-Forwarded-For"] מכיל "208.100.0.117" || [HTTP::header values "X-Forwarded-For"] מכיל "100.113.150.102" || [HTTP::header values "X-Forwarded-For"] מכיל "176.10.99.200" || [HTTP::header values "X-Forwarded-For"] מכיל "163.172.143.114" || [HTTP::header values "X-Forwarded-For"] מכיל "163.172.209.46" || [HTTP::header values "X-Forwarded-For"] מכיל "188.138.9.49" || [HTTP::header values "X-Forwarded-For"] מכיל "217.23.13.129" || [HTTP::header values "X-Forwarded-For"] מכיל "162.247.72.27" || [HTTP::header values "X-Forwarded-For"] מכיל "194.67.208.57" || [ערכי HTTP::header "X-Forwarded-For"] מכילים "41.216.186.114" } { HTTP::respond 410 } }
RELIANOID גישת ההגירה #
In RELIANOID, ניתן ליישם לוגיקה זו באמצעות:
- מודול WAF/IPDS
- כללים מותאמים אישית של ModSecurity/OWASP
- קובץ התאמת IP חיצוני
גישה זו ניתנת להרחבה וקלה יותר לתחזוקה מאשר הטמעת השוואות IP מרובות בתוך סקריפט.
מוּמלָץ RELIANOID אדריכלות #
ההגירה משתמשת ב:
- בדיקת כותרת ה-HTTP X-Forwarded-For
- קובץ רשימה שחורה חיצוני המכיל כתובות IP
- התאמת IP דינמית באמצעות אופרטורים של מערך הכללים של ModSecurity/OWASP
יתרונות:
- ניהול IP קל יותר
- רשימה שחורה מרכזית
- אין צורך לערוך כללים עבור כל שינוי IP
- יכולת הרחבה טובה יותר
תצורת כלל WAF #
ניתן להגדיר את כלל ModSecurity/OWASP הבא במצב Raw בתוך מודול WAF/IPDS.
SecRule REQUEST_HEADERS:X-Forwarded-For "@ipMatchFromFile /usr/local/relianoid/config/ipds/waf/sets/xff_blacklist.data" "\ id:1001,\ msg:'התאמה מותאמת אישית',\ phase:1,\ deny,\ nolog"
איך הכלל עובד #
כלל זה מבצע את הפעולות הבאות:
REQUEST_HEADERS:X-Forwarded-Forקורא את כותרת ה-HTTP X-Forwarded-For
@ipMatchFromFileמשווה את ערך הכותרת לערך של קובץ חיצוני
xff_blacklist.txtמכיל את רשימת כתובות ה-IP החסומות
phase:1מבוצע במהלך עיבוד כותרת הבקשה
denyחוסם בקשות תואמות
nolog: מבטל רישום עבור בקשות תואמות
תצורת קובץ רשימה שחורה #
צור את קובץ הרשימה השחורה:
/usr/local/relianoid/config/ipds/waf/sets/xff_blacklist.data
תכנים לדוגמה:
31.192.108.123 65.103.109.21 193.90.12.87 208.100.0.117 100.113.150.102 176.10.99.200 163.172.143.114 163.172.209.46 188.138.9.49 217.23.13.129 162.247.72.27 194.67.208.57 41.216.186.114
הגדר את הכלל דרך ממשק המשתמש של האינטרנט #
צור את רשימת נתוני ה-IP #
צור קובץ נתוני WAF חדש במקטע IPDS > WAF > קבצים כולל תוכן רשימת ה-IP:

צור את תנאי הכלל #
צור מערך חוקי WAF חדש במקטע IPDS > WAF > ערכות כללים כולל תנאי ה-IP של ההתאמה:

הפעל את הכלל בחווה #
הפעל את ערכת הכללים והקצה אותה לחוות הנדרשות.

הערה תפעולית חשובה #
כל שינוי בקובץ הרשימה השחורה דורש:
- עצירת כלל ה-WAF
- הפעלה מחדש של כלל ה-WAF
פעולה זו טוענת מחדש את הכלל ומחילה את רשימת ה-IP המעודכנת. פעולה זו תשפיע רק על כללי ה-WAF שנבדקו בחוות המושפעות, ולא תשפיע על התעבורה בפועל שעוברת דרך מאזן העומסים.
אימות ובדיקה #
ניתן להשתמש בפקודה הבאה כדי לאמת את התנהגות הכלל:
curl -k -H "מועבר באמצעות X עבור: כתובת IP" https://LB_VIP -v
דוגמא:
curl -k -H "מועבר X עבור: 31.192.108.123" https://192.168.1.100 -v
תוצאה צפויה #
כאשר כתובת ה-IP תואמת את הרשימה השחורה:
- הבקשה נדחתה על ידי WAF
- תגובת שגיאת HTTP מוחזרת
שיפור אופציונלי: החזרת HTTP 410 #
ה-iRule המקורי של F5 מחזיר במפורש:
HTTP 410 נעלם
כברירת מחדל, ערכות כללים של ModSecurity/OWASP מניעות פעולות עשויות להחזיר HTTP 403 Forbidden.
אם נדרש שוויון התנהגותי מדויק, ניתן לשפר את הכלל כדי להחזיר 410.
דוגמא:
SecRule REQUEST_HEADERS:X-Forwarded-For "@ipMatchFromFile /usr/local/relianoid/config/ipds/waf/xff_blacklist.txt" "\ id:1001,\ msg:'התאמה מותאמת אישית',\ phase:1,\ deny,\ status:410,\ nolog"
פתרון בעיות #
כלל לא מופעל #
אמת:
- WAF/IPDS מופעל בחווה
- הכלל נטען כהלכה
- כותרת קיימת בבקשה
- הכלל הופעל מחדש לאחר שינויי קובץ
בקשות שלא נחסמו #
לבדוק:
- עיצוב IP בתוך הקובץ
- אין רווחים מיותרים או תווים מוסתרים
- הרשאות קבצים נכונות
כותרת חסרה #
ייתכן שחלק מפרוקסי הזרם לא ישלחו X-Forwarded-Forאימות עם:
curl -k -H "מועבר ב-X עבור: 1.2.3.4" https://LB_VIP -v
רישום נדרש לצורך פתרון בעיות #
הסר באופן זמני:
נולוג
זה מאפשר רישום של ערכות כללים של ModSecurity/OWASP למטרות ניפוי שגיאות.
שיטות עבודה מומלצות #
- ניהול קבצים ברשימה השחורה באופן מרכזי
- השתמש באוטומציה לעדכוני רשימה שחורה
- בדוק מעת לעת כתובות IP חסומות
- הגן על קבצי כללי WAF עם הרשאות מתאימות
- העדפת קבצים חיצוניים על פני כללים קשיחים לצורך גמישות
<br> סיכום #
ביצועי F5 iRules X-Forwarded-For ניתן להעביר סינון ביעילות אל תוך RELIANOID באמצעות מודול WAF/IPDS המשולב וכללי ModSecurity.
גישה זו מספקת:
- ניהול IP מרכזי
- יכולת הרחבה טובה יותר
- תחזוקה קלה יותר
- שילוב WAF מקורי
- מורכבות סקריפטים מופחתת