טען איזון של Webapps עם אימות IIS NTLM ו- ASP.NET Imersonation

פורסם על ידי זאבנט | 2 באוגוסט 2018

סקירה כללית

שרת האינטרנט של Microsoft, Internet Information Services (IIS), משלב מספר מנגנוני אימות כדי לאמת משתמשים כנגד מערכות Active Directory או עצמאיות (אימות מבוסס LDAP). NTLM הוא פרוטוקול האימות של Windows / Response, שניתן להשתמש בו ברשתות ויישומים שניתן להשתמש בהם בשתי הסביבות.

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

התחזות ASP.NET היתרים ליישומי אינטרנט כדי לאמת ולהסמיך משתמשים המסתמכים על Microsoft IIS.

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

כיצד פועל NTLM?

פרוטוקול NTLM מסתמך על פרוטוקול HTTP / S שבו לקוח מסוים מתחיל לחיצת יד של סך של 6 צעדים על מנת להקים את הפגישה מאומתים.

לחיצת היד המאומתת דורשת את השלבים הבאים:

1. הלקוח יוזם בקשה אנונימית של משאב מסוים לשרת אינטרנט.

GET / HTTP

2. תגובות השרת עם הודעה לא מורשית ושיטת האימות שהלקוח צריך להשתמש בה.

401 Unauthorized
WWW-Authenticate: NTLM

3. הלקוח שולח שוב את הבקשה, כולל אתגר אימות הפורמט של NTLM.

GET / HTTP
Authorization: NTLM <base64-encoded first NTLM message>

4. השרת מגיב עם הודעה לא מורשית ומבקש מידע נוסף ללקוח.

401 Unauthorized
WWW-Authenticate: NTLM <base64-encoded second NTLM message>

5. הלקוח שולח שוב את הבקשה, כולל שארית מידע ההפעלה.

GET / HTTP
Authorization: NTLM <base64-encoded third NTLM message>

6. השרת מתחבר עם בקר התחום כדי להשלים את בקשת האימות ולאחר מכן מאשר ללקוח את האימות.

HTTP 200 OK

שים לב שלחיצת יד זו נדרשת בכל חיבור חדש, ולא בקשות HTTP, ובמהלך השלבים 3 עד 6, החיבור צריך להישאר בחיים. אם החיבור נסגר, יש לחזור על החלק הזה של לחיצת היד וזה לא תקף לחזור רק משלב 5. מצד שני, לאחר אימות החיבור, כותרת ההרשאה לא צריכה להישלח שוב בזמן שה החיבור אינו סגור ללא תלות במשאב אליו ניגשת.

כיצד לטעון יישומי אינטרנט איזון באמצעות אימות NTLM?

עם Zevenet, יש 2 דרכים עיקריות לטעון איזון ולבנות NTLM יישום אינטרנט מבוסס בזמינות גבוהה, עם פשוט שכבת 4 TCP עומס או עם שכבת 7 proxy עבור תכונות מתקדמות.

איזון עומסים פשוט NTLM בשכבה 4

על מנת לטעון יישומי אינטרנט איזון עם תמיכה אימות NTLM עם תצורה פשוטה, אנחנו יכולים ליצור חוות LSLB מבוסס עם פרופיל L4xNAT. אנו יכולים להשתמש בפרוטוקולי HTTP או HTTPS.

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

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

לבסוף, הוסף את רשימת backends והגדרת תצוגת בריאות כפי שצוין בסעיפים הבאים.

איזון עומס NTLM בשכבה 7

אפשרויות אלה מאפשרות לטפל בנתוני HTTP / S עם תמיכת NTLM עם שכבת ה- 7 של השכבה המוגדרת באמצעות מודול LSLB וחוות HTTP. לשם כך, אנחנו צריכים ליצור חווה עבור HTTP או HTTPS על פי דרישות SSL עבור השירות הווירטואלי. ההבדל היחיד יהיה מקשיב מוגדר ב הגדרות כלליות של החווה שנוצרה.

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

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

בדיקות בריאות מתקדמות עבור אתרי אימות NTLM

כדי ליצור בדיקת בריאות מתקדמת מותאמת אישית עבור יישומים מאומתים של NTLM, עלינו ליצור מתחת לנתיב / usr / local / zevenet / app / libexec סקריפט לבדוק את ה- backend כמו שמוצג למטה. לדוגמה, check_ntlm.sh עם ההרשאות המתאימות.

#!/bin/bash

# get input parameters
BACKEND=$1
PORT=$2
USER=$3
PASS=$4
URI=$5
STRING=$6

/usr/bin/curl http://${BACKEND}:${PORT}${URI} --ntlm -negotiate -u ${USER}:${PASS} 2>/dev/null | grep "${STRING}" &>/dev/null

if [ $? == 0 ]
then
	# if the curl command doesn't fail then notify that the backend is up
	echo "Server ${BACKEND}:${PORT} OK"
	exit 0
fi

# if the the curl command fails then notify that the backend is down
echo "Server ${BACKEND}:${PORT} is not OK"
exit 1

ב ניטור >> Farmguardian סעיף, אם חל, או להוסיף אותו לפקודה כדי לבדוק את שירות החווה.

אנו יכולים לבדוק את התסריט לבדיקת בריאות על ידי ביצוע:

/usr/local/zevenet/app/libexec/check_ntlm.sh 192.168.0.99 80 johndoe johnsecret "/my/uri" "DOCTYPE html"

בידיעה כי ה- IP backend הוא 192.168.0.99 היציאה היא 80 HTTP, פלוני אלמוני הוא משתמש דמה בתחום שלנו, יוהנסקרט היא סיסמת הדמה, "/ My / uri" הוא URI לבדוק ו "DOCTYPE html" היא המחרוזת שתמצא בנתוני התגובה כאשר הבקשה מוצלחת.

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

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

תהנה עומס שלך מאוזנת NTLM יישומי אינטרנט!

תשתף:

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

האם המאמר הזה היה מועיל?

מאמרים נוספים