הגדרת עבודה ב – Kerberos מול שרתי Exchange 2010

16 במאי 2012

אין תגובות

tkolber מאת: צחי קולבר, PFE מיקרוסופט ישראל

לאחרונה נתקלנו במקרים מסויימים של איטיות או לעיתים אף הקפצת סיסמאות בעבודה של משתמשי Outlook מול שרתי ה – CAS בגרסת Exchange 2010.

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

כאשר משתמשי Outlook עובדים בתצורת הזדהות של NTLM, נשלחת הבקשה לאחד משרתי ה – CAS (במידה וישנם יותר משרת CAS בודד באותו AD Site) ואותו שרת מעביר את בקשת ההזדהות לשרת Domain Controller מסויים שמולו הוא עובד.

חשוב לציין כי אחת הבעיות בצורת עבודה זו (כך פשוט עובדת המערכת), היא ששרת ה – CAS, יעבוד מול Domain Controller מסויים לצורך אימות הנתונים של המשתמשים שהתחברו אליו ולא יחלק את בקשות ההזדהות ל – Domain Controllers אחרים בכל פעם. התוצאה של הגדרה זו היא עבודה בתצורה היוצרת לעיתים עומסים על Domain controller מסויים ועל שרת ה – CAS מולו עובדים המשתמשים.

בנוסף חשוב לציין כי בעבודה בצורת הזדהות של – NTLM, כל פתיחת Outlook או Connection חדש, מצריך הזדהות מחדש מול שרת ה – CAS ומול אותו Domain Controller שמולו עובד ה – CAS.

לעומת זאת, בעבודה עם מנגנון הזדהות מסוג Kerberos, מונפקת מעיין תעודה (Ticket Granting Ticket / TGT), לכל אובייקט לצורך הזדהות, בצורת עבודה זו, אין צורך להזדהות כל פעם מחדש, אלא רק לאחר שפג תוקף התעודה. כאן גם המקום לומר שכל צורת ההזדהות בין ה – Client לשרת הנותן את השירות המבוקש הינה מוצפנת וניתנת לביצוע רק בסביבת Active Directory ולא בסביבת Workgroup לדוגמה.

ישנן שתי עובדות בסיסיות אליהן יש להתייחס כאשר אנו מעונינים לעבוד ב – Kerberos, בסביבת Exchange 2010 עם מערך שרתי CAS (לצורך שרידות, במידה ושרת CAS אחד לא יהיה זמין):

א. עבודה ב- Kerberos מחייבת הזדהות מול יישות בעלת Service Principal Name (SPN), ללא SPN, לא ניתן לקבל TGT.

ב. היות ואנו עובדים עם CAS Array, כלומר מערך ווירטואלי של כמה שרתי CAS לצורך שרידות, אנו צריכים לייצר יישות בעלת SPN, שלה ניתן יהיה להנפיק TGT. לצורך כך, אנו נגדיר Computer Account ב – Active Directory.

החל מגרסת Exchange 2010 SP1 התווסף Service נוסף הנקרא Microsoft Exchange Service Host service המשמש בשרתי ה – CAS לצורך עבודה ב – Kerberos עם מנגנון Alternate Service Account) ASA) שהוא בעצם ה – Computer Account שיצרנו בסעיף ב'.

בכדי ליישם את התהליך, ישנם 4 צעדים בסיסיים אותם יש לבצע:

1. יצירת Computer Account לשימוש כמנגנון הזדהות.

2. "הצמדת" מנגנון ההזדהות לכל שרתי ה – CAS החברים באותו CAS Array.

3. שינוי ה – Application Pool של ה – OAB) Offline Address Book)

4. הצמדת ה – SPN ל – ASA.

 

מידע נוסף ומפורט יותר לגבי תהלכי ההזדהות, סיבות נוספות לעבודה ב – Kerberos ועוד, ניתן למצוא בבלוג הרשמי של קבוצת ה – Exchange:

Recommendation: Enabling Kerberos Authentication for MAPI Clients

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

  1. DC01: שרת Domain Controller בגרסת Windows 2003 SP2.
  2. EX141: שרת Exchange 2010 SP2, מותקן כ – HUB, CAS, MBX.
  3. EX142: שרת Exchange 2010 SP2, מותקן כ – .MBX
  4. EX143: שרת Exchange 2010 SP2, מותקן כ – .MBX
  5. שם ה – Domain הינו msft.net

 

 

clip_image002

 

כעת, לאחר שהבנו את המושגים ואת הדרישות, בואו ונתחיל:

1. בשלב הראשון ניצור את המחשב "הווירטואלי" שייצג את ה – CAS Array. מחשב זה הוא בעצם ה – Alternate Service Account) ASA). את יצירת חשבון המחשב, ניצור דרך ממשק ה – Active Directory User and Computers:

 

1_

2. הזן את שם המחשב "הווירטואלי" שייצג את ה CAS Array. במאמר זה לדוגמה השם שנבחר הוא CAS-ARRAY-ASA. במקרה זה כפי שרשמתי מדובר ב – Windows 2003 Domain Controller. אם מדובר ב – Windows 2008, הממשק יראה שונה במקצת.

 

2

 

3. לחץ על Next.

4. כעת לחץ על Finish.

 

clip_image011

 

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

 

clip_image013

· חשוב: יש לוודא כי האובייקט של חשבון המחשב שיצרנו עבר ב – Active Direcory Replication לכל ה – Domain Controllers.

 

6. בכדי להמשיך, ישנם כמה נתונים שיש לברר. הראשון שבהם הוא שם ה – Fully Qualified Domain Name) FQDN). השם הנ"ל ישמש כאחד משמות ה – SPN שניתן לשם המחשב שיצרנו קודם לכן. בכדי לברר את ה – FQDN, יש להריץ את הפקודה הבאה:

 

Get-ClientAccessArray

5_

 

7. מידע נוסף שאנו זקוקים לו הוא השם של ה – NLB של שרתי ה – CAS דרכו מתחברים המשתמשים. במקרה זה השם שנבחר הוא – mail.msft.net בכדי לקבל נתונים אילו, יש להריץ את הפקודה הבאה:

 

Get-ClientAccessServer ex141 | Get-OwaVirtualDirectory | fl ExternalUrl,InternalUrl

clip_image018

במידה ואנו מעונינים לקבל או לוודא את שמות ה – InternalUrl ו – ExtrernalUrl המוגדרים על כל שרתי ה – CAS, יש להריץ את הפקודה הבאה:

Get-ClientAccessServer | Get-OwaVirtualDirectory | fl Server,Name,ExternalUrl,InternalUrl

 

8. לפני יצירת שמות ה – SPN אשר יקושרו לשם המחשב אותו יצרנו בשלב הראשון, בואו ונבין את התפקידים של שמות ה – SPNs השונים. היות וישנן אפליקציות MAPI, כולל Outlook 2003 אשר עדיין עובדים עם שמות קצרים, אנו נייצר גם את שמות FQDN וגם שמות קצרים.

 

להלן הסבר קצר לגבי שמות ה – SPNs בהתאם לשירותים שהם מספקים:

· http: שימוש ב – SPN זה מספק שירותים של:

- Exchange Web Service

- Offline Address Book

- AutoDiscover

· exchangeMDB: שימוש ב – SPN זה מספק שירותים ל – RPC Client Access.

· exchangeRFR: שימוש ב – SPN זה מספק שירותים ל – Offline Address Book.

· exchangeAB: שימוש ב – SPN זה מספק שירותים ל – Offline Address Book.

השמות המתאימים שיש להזין לארבעת הפרמטרים מעלה, התקבלו בסעיפים 6 ו – 7.

 

9. כעת, ניצור את שמות ה – SPNs וזאת ע"י פקודת ה – setspn אשר מובנית במערכת ההפעלה. ניתן להריץ כל פקודה בנפרד או להריץ את כל הפקודות בפקודת PS1 / BAT. אני ממליץ להריץ את הפקודות אחת לאחר השנייה בנפרד בכדי לקבל חיווי שכל פקודה הסתיימה בהצלחה:

 

$setspn -s exchangeMDB/outlook CAS-ARRAY-ASA

$setspn -s exchangeRFR/outlook CAS-ARRAY-ASA

$setspn -s exchangeAB/outlook CAS-ARRAY-ASA

$setspn -s exchangeMDB/outlook.msft.net CAS-ARRAY-ASA

$setspn -s exchangeRFR/outlook.msft.net CAS-ARRAY-ASA

$setspn -s exchangeAB/outlook.msft.net CAS-ARRAY-ASA

$setspn -s exchangeMDB/mail.msft.net CAS-ARRAY-ASA

$setspn -s exchangeRFR/mail.msft.net CAS-ARRAY-ASA

$setspn -s exchangeAB/mail.msft.net CAS-ARRAY-ASA

$setspn -s http/outlook.msft.net CAS-ARRAY-ASA

$setspn -s http/mail.msft.net CAS-ARRAY-ASA

$setspn -s http/autodiscover.msft.net CAS-ARRAY-ASA

clip_image020

 

10. בכדי לוודא כי שמות ה – SPNs נרשמו באופן תקין, ניתן להריץ את הפקודה הבאה:

Setspn –L msft\CAS-ARRAY-ASA


clip_image022

 

11. כעת נריץ את הסקריפט אשר "מקשר" או "מצמיד" את נתוני ההזדהות של אובייקט המחשב שיצרנו (ASA), לכל אחד מהחברים ב – CAS Array. את הסקריפט הנ"ל, ניתן למצוא בנתיב הבא:

C:\Program Files\Microsoft\Exchange Server\V14\Scripts.

הפקודה אותה יש להריץ:

.\RollAlternateserviceAccountPassword.ps1 –ToArrayMembers outlook.msft.net -GenerateNewPasswordFor “msft\CAS-ARRAY-ASA$" –Verbose


clip_image024

 

12. במידה והסקריפט הסתיים באופן תקין, יתקבל חיווי "THE SCRIPT WAS SUCCEEDED":

 

11_

 

13. בכדי לוודא כי שם המחשב שיצרנו (ASA), "הוצמד" באופן תקין לשרת CAS מסויים, נריץ את הפקודה הבאה:

 

*Get-ClientAccessServer -IncludeAlternateServiceAccountCredentialStatus | fl name,*alter


clip_image029

 

14. השלב הבא הוא שינוי סוג ה – Application Pool של ה – Offline Address Book) OAB) ב – IIS לצורך תמיכה בצורת הזדהות של Kerberos. לצורך כך, ישנו סקריפט שנכתב ע"י מיקרוסופט וניתן להורדה מהקישור הבא: ConvertOABDir.ps1.

חשוב לציין כי את הסקריפט הנ"ל, יש להריץ מול כל שרת CAS באותו CAS Array.


clip_image031

 

15. לאחר הרצת הסקריפט וכל התהליכים הקודמים לו, מומלץ לבצע איתחול ל – Services הבאים, על כל שרת CAS, החבר באותו CAS Array:

- MSExchangeRPC

- MSExchangeOAB

בכדי לבצע זאת ניתן להריץ את הפקודה הבאה או (דרך ממשק ה – Services.msc):

Get-Service MSExchangeAB,MSExchangeRPC | Restart-Service

clip_image033

 

16. בכדי לוודא כי ה – Services אותם איתחלנו בסעיף הקודם אכן עלו ללא בעיה, נריץ את הפקודה הבאה (או דרך ממשק ה – Services.msc):

Get-Service MSExchangeAB,MSExchangeRPC | fl name,status

clip_image035

 

17. כעת לאחר שסיימנו את ההגדרות לעבודה ב – Kerberos, ישנן כמה בדיקות אותן יש לבצע בכדי לבדוק האם כל התהליך אותו ביצענו קודם לכן, אכן עבד כראוי.

אחת הבדיקות היא ע"י הגדרת ה – Outlook לעבודה בצורה של Kerberos בלבד.

להלן השלבים אותם יש לבצע כדי לעשות זאת:

- פתיחה ועריכה של פרופיל המשתמש.

- לחיצה על לשונית Security.

- ווידוי סימון האפשרות של Encryption.

- הגדרת חלונית "Logon network security" לעבודה באפשרות של "Kerberos Password Authentication"

- לחיצה על OK.

16_

- בדיקה ע"י החזקת מקש ה – CTRL ועל צלמית ה – Outlook בחלק ימני התחתון (ליד השעון) של סרגל הכלים ובחירת Connection Status בכדי לוודא שהחיבור תקין וכל סוגי התקשורת לשרתי הדואר, נמצאים במצב של Established כמתואר בצילום המסך הבא:

17_

 

18. דרך נוספת לבצע בדיקה היא ע"י בדיקת ה – TGT אשר צריך להיות מונפק לטובת העבודה מול שרתי הדואר ב – Kerberos. בכדי לבצע זאת, יש להריץ את הפקודה Klist במערכות מסוג Windows 7 / 2008 או ע"י הרצת Klist tickets במערכות הפעלה מסוג Windows XP / 2003.

בדוגמה זו קיבלנו את הפלט הבא לפני התחברות ע"י Kerberos, ע"י הרצת Klist tickets

clip_image044

לאחר ההתחברות ע"י Kerberos והרצת Klist tickets, קיבלנו את הפלט הבא:

clip_image046

ניתן לראות בבירור כי התווספו עוד TGT נוספים (exchangeMDB, ExchangeAB, exchangeRFR, HTTP), אל מול שרתי הדואר שלא היו קיימים קודם לכן.

 

19. חשוב מאוד: לצורך עבודה עם Kerberos, על פרופיל ה – Outlook ועל שרתי ה – CAS להיות מוגדרים לעבודה ב – Encryption. במידה ושרתי ה – CAS לא מוגדרים לעבודה ב – Encryption וה – Outlook מוגדר כפי שמתואר בצילום המסך הבא (ה – Encryption אינו מאופשר):

21_

לא תהיה אפשרות להתחבר לשירותי ה – Directory ולא ניתן יהיה להתחבר עם ה – Outlook, כפי שנראה בצילום המסך הבא:

22_

 

20. כדי לבדוק האם גם שרתי ה – CAS מוגדרים לעבודה בצורה של Encryption (הגדרת ברירת מחדל של שרתי Exchange 2010 RTM), ניתן להריץ את הפקודה הבאה הבודקת האם ההגדרה של “EncryptionRequired” מאופשרת כל שרת CAS:

 

Get-ExchangeServer ex141 | Get-RpcClientAccess | fl EncryptionRequired

clip_image054

בצילום מסך העליון, ניתן לראות כי האפשרות של “EncryptionRequired” אינה מאופשרת על אותו שרת מסויים (False).

 

21. שימו לב כי לאחר שינוי הערך הנ"ל, לא תהיה אפשרות להתחבר ללא סימון ה – Encryption בפרופיל ה – Outlook כפי שצויין בסעיף 19.

22. כדי לשנות את ההגדרה, יש להריץ את הפקודה הבאה על כל שרתי ה – CAS, ולבצע איתחול לכל ל – MSExchangeRPC service.

 

Set-RpcClientAccess –server servername –EncryptionRequired $true

 

23. מידע נוסף לגבי הגדרת Encryption, ניתן למצוא בקישורים הבאים:

http://technet.microsoft.com/en-us/library/dd439391(v=EXCHG.80).aspx

http://support.microsoft.com/kb/2006508

 

 

חזרה אחורה (Rollback):

במידה ומסיבה כלשהי מעונינים לחזור לתצורת עבודה ללא Kerberos, יש לפעול לפי השלבים הבאים:

 

24. מחיקת כל ה – SPNs (שנוצרו בסעיף 9), המקושרים לחשבון המחשב:

$setspn -d exchangeMDB/outlook CAS-ARRAY-ASA

$setspn -d exchangeRFR/outlook CAS-ARRAY-ASA

$setspn -d exchangeAB/outlook CAS-ARRAY-ASA

$setspn -d exchangeMDB/outlook.msft.net CAS-ARRAY-ASA

$setspn -d exchangeRFR/outlook.msft.net CAS-ARRAY-ASA

$setspn -d exchangeAB/outlook.msft.net CAS-ARRAY-ASA

$setspn -d exchangeMDB/mail.msft.net CAS-ARRAY-ASA

$setspn -d exchangeRFR/mail.msft.net CAS-ARRAY-ASA

$setspn -d exchangeAB/mail.msft.net CAS-ARRAY-ASA

$setspn -d http/outlook.msft.net CAS-ARRAY-ASA

$setspn -d http/mail.msft.net CAS-ARRAY-ASA

$setspn -d http/autodiscover.msft.net CAS-ARRAY-ASA

 

25. מחיקת חשבון המחשב שיצרנו בסעיף 1.

  • חשוב:

- לאחר מחיקת ה – SPNs וחשבון המחשב בסעיפים 24 ו – 25, יש לקחת בחשבון כי Outlook Clients אשר התחברו כבר ב – Kerberos, יתנתקו משרתי ה – Exchange.

- יש לוודא כי חשבונות ה – Outlook אינם מוגדרים לעבוד רק ב – Kerberos, אלא ב – Negotiate או NTLM, כמו בדוגמה הבאה:

clip_image056

- יש לבצע אתחול לכלל התחנות שהתחברו בתצורת Kerberos וזאת בכדי להסיר את ה – Kerberos Ticket מה – Cache של אותן התחנות.

מידע נוסף:

http://technet.microsoft.com/en-us/library/ff808312.aspx

http://technet.microsoft.com/en-us/library/ff808313.aspx

בהצלחה!

 

צחי קולבר משמש כ- Premier Field Engineer במיקרוסופט ישראל מזה כחמש שנים ועוסק בתחום ה – Exchange ומעברים של שעון קיץ. צחי עוסק בתחום ה – Exchange עוד מגרסת 5.5 וקודם לכן החזיק בתואר MVP Exchange של מיקרוסופט

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים