סקירה כללית #
המאמר הבא מתאר מקרה שימוש אמיתי עבור ספק אינטרנט או ספק אירוח, שבו HTTP/S Load Balancer reverse proxy הוא נקודת הגישה העיקרית לכל שירותי האינטרנט הציבוריים. תצורה זו מראה כמה קל להגדיר סט כללי WAF מתקדם וחזק על מנת לאבטח יישומי אינטרנט המבוססים על כתובות IP של מקורות ברשימה שחורה, כאשר כל VirtualHost מנהל את הרשימה השחורה שלו באופן שבו IP ציבורי אחד יכול להיות מונע להתחבר לדומיין אינטרנט כמו www.company1.com אך מורשה להתחבר אל www.company2.com.
נתמקד את המאמר בשני חלקים, בחלק הראשי תצורת פרופיל ה-HTTPS תפעל כ-Reverse Proxy עם רשימה של שירותים שונים, והחלק השני יסביר כיצד להגדיר סט כללים של Web Application Firewall שינהל רשימה שחורה שונה לכל שירות HTTP/S.
סביבה #
התרשים הבא מתאר את RELIANOID פנים WAF. כפי שמוצג, השכבה הראשונה היא מודול ה-WAF שמטרתו להבטיח בשלב מוקדם שרק בקשות בטוחות יורשו לעבור למודול איזון העומס ולאחר מכן להעביר את הבקשה לחלקים האחוריים.
ראשית, כותרת ה-HTTP Host מוערכת וכתובת ה-IP של הלקוח נבדקת ברשימה השחורה שכבר הוגדרה. אם כותרת ה- Host וכתובת ה-IP של הלקוח תואמות, החיבור מתנתק ותגובת HTTP אסורה 403 נשלחת ללקוח, אך במקרה שכתובת ה-IP של הלקוח וכותרת ה-Host המבוקשת אינן תואמות, התעבורה מזוהה כלא זדונית ומועברת למודול מאזן העומסים, שם היעד נבחר על סמך כותרת ה-Host של בקשת ה-HTTP ולבסוף מועבר לשרת ה-backend הזמין.
כאן תוכל למצוא סכמה של פנימי חומת האש של יישום האינטרנט עבור הדוגמה הנתונה.
תצורת שירות וירטואלי HTTP #
הגדר כתובת IP וירטואלית ייעודית אחת , בדוגמה שלנו 192.168.100.58 , על ידי דפדוף אל רשת > ממשקים וירטואליים > צור ממשק וירטואלי כפי שמוצג להלן:
עכשיו בואו נלך להגדיר את שירות איזון העומסים של HTTP, עבור אל LSLB > חוות ולאחר מכן לחץ על הכפתור צור חוות והזן את פרטי השירות הווירטואלי כפי שמוצג להלן:
לאחר מכן לחץ על צור.
כעת לחצו על הכרטיסייה העליונה שירותים וצרו כמה שיותר שירותים שאתם מנהלים. לחצו על הכפתור שירות חדש . במקרה שלנו, ניצור שני שירותים שונים, אחד לניהול השירות עבור www.mycompany1.com ואחד נוסף עבור www.mycompany2.com.
לאחר יצירת השירות, הוסף את מסנן המארח הווירטואלי ואת ה-backends כפי שמוצג בתמונה למטה.
במקרה שיש לכם כמה אתרים, עליכם להוסיף רק שירותים נוספים על מנת להגדיר שירות ייעודי אחד לניהול כל רשת מאותה כתובת IP.
כעת תצורת איזון העומסים נעשתה מאפשרת להגדיר את מודול חומת האש של יישום האינטרנט IPDS.
תצורת רשימות שחורות #
אנחנו הולכים ליצור רשימה שחורה אחת לכל שירות אינטרנט על מנת להזין בכל רשימה שחורה את כתובות ה-IP הרצויות לחסימת הגישה. בדוגמה שלנו, ניצור שתי רשימות שחורות שונות בשם blacklistmycompany1 ו- blacklistmycompany2 , אחת לכל שירות בהתאמה.
רשימה שחורה זו תישמר בנתיב /usr/local/relianoid/config/ipds/blacklists/lists/Blacklistmycompany1.txt.
כללנו 2 כתובות IP למטרות בדיקה, אנא שקלו להוסיף כמה שיותר כתובות IP לפי הצורך. כמו כן, ניתן להשתמש ברשימות השחורות הקיימות במודול IPDS .
רשימה שחורה שנייה זו תישמר בנתיב /usr/local/relianoid/config/ipds/blacklists/lists/Blacklistmycompany2.txt.
קחו בחשבון שברשימה השחורה הזו כללנו את כתובת ה-IP 192.168.1.191 , כתובת IP זו תשמש למטרות בדיקה בלבד, משם נריץ בקשות HTTP.
קביעת התצורה של חומת האש של יישום האינטרנט מוגדרת #
מטרת תצורה זו היא לשמור על רשימות שחורות IP שונות בכל אתר, על מנת להימנע מאותה רשימה שחורה עבור כל נקודת הגישה לחווה.
אנחנו הולכים להגדיר סט חוקים , שהוא קבוצת חוקים, בשם HostingBlacklisting . סט חוקים זה יורכב משני כללים פשוטים (מזהה כלל 1000 ומזהה כלל 1001 בדוגמה שלנו), כל כלל מוגדר כהתאמה וכפעולה, כאשר אם התנאי תואם אז הפעולה מבוצעת. בדוגמה שלנו, נשתמש באותה פעולה בשני הכללים, אם התנאי תואם, פעולת דחייה מבוצעת עם תגובה 403 Access Denied.
עבור אל IPDS > WAF , לאחר מכן לחץ על צור ערכת כללים של WAF והגדר שם תיאורי למערכת הכללים, בדוגמה שלנו HostingBlacklisting.
הגדר את השדה שלב ברירת מחדל ל- Request headers are received . שדה זה אומר שמודול ה-WAF ינתח את כותרות הבקשות הנכנסות מהלקוח.
לאחר מכן עבור ללשונית כללים וצר את הכלל הראשון מסוג פעולה כפי שמוצג להלן.
כעת נוצר הכלל הראשון של קבוצת הכללים, בואו ניצור את התנאים על מנת להתאים את כתובת ה-IP של הלקוח ברשימה השחורה עבור כל כותרת מארח . עבור אל תנאים וצור תנאי בהתאם למשתנה REMOTE_ADDR כפי שמוצג להלן.
לאחר מכן צור תנאי נוסף עבור התאמת המארח הווירטואלי בהתאם למשתנה SERVER_NAME באופן הבא:
בשלב זה, אתר האינטרנט הראשון שמתארח www.mycompany1.com מנהל כתובת IP של רשימה שחורה של יישום אינטרנט מהרשימה השחורה שכבר הוגדרה, המכונה Blacklistmycompany1.txt.
בואו ניצור כלל נוסף עבור האתר השני www.mycompany2.com ונחזור על אותה תצורה כמו תצורת הכלל הקודמת, אך במקרה זה, עליכם לשנות את SERVER_NAME ל- mycompany2.com ולהתייחס לקובץ blacklist2.txt הבא.
ראה את כל התצורה של ערכת הכללים המורכבת של WAF:
לבסוף, הוסיפו את ערכת הכללים הזו לחווה שכבר נוצרה, גשו לכרטיסייה חוות והעבירו את החווה אירוח , בדוגמה שלנו, למקטע חוות מופעלות כפי שמוצג להלן.
כעת הפעל את ערכת הכללים של WAF עבור החווה, לחץ על הפעולה הפעל בחלק השמאלי העליון של חלון זה, והמערכת תתחיל לסנן תעבורת HTTP עבור אירוח החווה.
בדיקת ערכת הכללים של חומת האש של יישום האינטרנט #
כתובת ה-IP של הלקוח 192.168.1.191 תבקש את האתרים http://www.mycompany1.com ו- http://www.mycompany2.com ובהתאם לתצורה שלנו, מערכת ה-WAF תאפשר חיבור לשירות הראשון בעל אותו שם, אך החיבור ל- mycompany2.com יידחה מכיוון שכתובת IP זו נכללה ברשימה השחורה בשם Blacklistmycompany2.
מכתובת IP 192.168.1.191 ל- VIP המבקשת את האתר www.mycompany1.com דרך מאזן העומסים:
root@192.168.1.191:# curl -H "Host: www.mycompany1.com" http://192.168.100.58 -v * URL שנבנה מחדש ל: http://192.168.100.58/ * מנסה 192.168.100.58... * TCP_NODELAY מוגדר * מחובר ליציאת 192.168.100.58 (192.168.100.58) 80 (#0) > GET / HTTP/1.1 > מארח: www.mycompany1.com > סוכן משתמש: curl/7.52.1 > קבל: */* > HTTP / 1.1 200 אישור < שרת: nginx/1.10.3 < תאריך: יום שלישי, 10 בספטמבר 2019 15:36:22 GMT < סוג תוכן: text/html < אורך תוכן: 11383 < עדכון אחרון: יום חמישי, 13 בדצמבר 2018 11:01: 49 GMT < חיבור: keep-alive < ETag: "5c123c1d-2c77" < Accept-Ranges: bytes
מכתובת IP 192.168.1.191 ל- VIP המבקשת את האתר www.mycompany2.com דרך מאזן העומסים:
root@192.168.1.191:# curl -H "Host: www.mycompany2.com" http://192.168.100.58 -v * URL שנבנה מחדש ל: http://192.168.100.58/ * מנסה 192.168.100.58... * TCP_NODELAY set * מחובר ליציאת 192.168.100.58 (192.168.100.58) 80 (#0) > GET / HTTP/1.1 > מארח: www.mycompany2.com > User-Agent: curl/7.52.1 > קבל: */* > * HTTP 1.0, נניח קרוב אחרי גוף HTTP/1.0 403 בקשה אסורה < Content-Type: text/html < Content-Length: 17 < Expires: now < Pragma: no-cache < Cache-control: no-cache,no-store < * Curl_http_done: called premature == 0 * סגירת חיבור 0 השיב אסורהפ
לאחר שנוצרת התגובה Forbidden , מודול ה-WAF מודיע על הדחייה בקובץ Syslog של מאזן העומסים.
root@zva6000:# tail -f /var/log/syslog 10 בספטמבר 15:38:44 zva6000 פאונד: אירוח, אבטחת מודדים: אזהרה. התאם "האופרטור `StrMatch' עם הפרמטר `mycompany2.com' כנגד המשתנה `SERVER_NAME' (ערך: `www.mycompany2.com') [קובץ "/usr/local/relianoid/config/ipds/waf/sets/HostingBlacklisting.conf"] [שורה "17"] [id "1001"] [rev ""] [msg "התאמה מותאמת אישית 2"] [נתונים ""] [חומרה "0"] [גרסה ""] [בגרות "0"] [דיוק "0"] [שם מארח "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [ref "v0,13v21,18"] 10 בספטמבר 15:38:44 zva6000 פאונד: אירוח, [WAF,service mycompany2, backend 192.168.100.22:80,] (7f6cfac3c700) [לקוח 192.168.1.191] ModSecurity: גישה נדחתה עם קוד 403 (שלב 1). נמצא התאמה בין "Operator `StrMatch' לפרמטר `mycompany2.com' כנגד המשתנה `SERVER_NAME' (ערך: `www.mycompany2.com') [קובץ "/usr/local/relianoid/config/ipds/waf/sets/HostingBlacklisting.conf"] [שורה "17"] [id "1001"] [rev ""] [msg "Custom Match 2"] [data ""] [severity "0"] [version ""] [maturity "0"] [accuracy "0"] [hostname "192.168.100.58"] [uri "/"] [unique_id "156812992458.770641"] [הפניה "v0,13v21,18"] 10 בספטמבר 15:38:44 zva6ktpl1 פאונד: אירוח, שירות mycompany2, backend 192.168.100.25:80, (7f6cfac3c700) WAF דחה בקשה מ-192.168.1.191
עכשיו אתה יכול לבנות ערכות חוקי חומת אש מותאמות אישית שלך כדי להגן על יישומי האינטרנט שלך באמצעות טכניקות בדיקת מנות עמוקות של HTTP / S.












