تبليغاتX
Notes On Computer Networks - احراز هویت کاربران اکتیودایرکتوری در پراکسی سرور اسکویید ‏

احراز هویت کاربران در پراکسی سرور یکی از روش هایی است که اغلب در ایران از آن برای مدیریت دسترسی کاربران شبکه محلی به اینترنت استفاده می شود .معمولا در شبکه های ویندوزی از پراکسی سرور ISA  برای این منظور استفاده می گردد . اما اگر به هر دلیلی تصمیم گرفته اید تا از پراکسی Squid  برای این منظور بهره بگیرید از چه راهکاری استفاده می کنید ؟ آیا تمامی کاربران را در سرویس های معادل ActiveDirectory  در لینوکس دوباره تعریف می کنید ؟ اگر تعداد کاربران تعریف شده کم است همین کار را توصیه می کنم ولی اگر تعریف دوباره کاربران در سرویس هایی مانند Samba  یا  LDAP  برای شما امکان پذیر نیست یا اعمال سیاست های اعمالی به کاربران و گروههای مختلف در اکتیو دایرکتوری در سرویس های مبتنی بر لینوکس غیر ممکن یا مشکل ساز باشد چه می کنید؟

در این مقاله به نحوه احراز هویت کاربران اکتیودایرکتوری در اسکویید می پردازم .

 


Squid از سه روش برای بدست آوردن اطلاعات مورد نیاز برای احراز هویت کاربران بهره می گیرد . که عبارتند از :

1 -  Basic

2- Digest

3 – NTLM

 

از لحاظ امنیتی روش Basic  بسیار ضعیف است و روش های Digest  و NTLM  از امنیت بالاتری برخوردار هستند.

Squid برای اعمال این روش ها نیاز به برنامه های ( اسکریپت ها ) کمکی دارد که به authentication helpers  مشهورند .  برای مشاهده لیستی از این برنامه های کمکی می توانید محتوای دایرکتوری /usr/bin/squid را مشاهده کنید .

 

 

 

اگر اسکویید را از طریق source code  کامپایل و نصب می نمایید  در هنگام کامپایل باید از گزینه مناسب برای استفاده از برنامه کمکی بهره بگیرید .

مثال :

./configure -- enable_basic_auth_helpers = LDAP , NCSA

 

درخواست های احراز هویت که از کلاینت ها به سوی سرور پراکسی اسکویید ارسال می شود در یک صف قرار می گیرند . و اسکویید به ترتیب به آنها ترتیب اثر خواهد داد .

اسکویید این قابلیت را دارد تا نتایج احراز هویت را کش کند و به این ترتیب از بار پردازش ها بر خود بکاهد . اگر بار این پردازش ها بر اسکویید از حدی بیشتر شود اسکویید با ارسال یک پیام fatal error متوقف می شود .

 

برای احراز هویت کاربران اکتیودایرکتوری در اسکویید به دو روش Basic  و NTLM  نیاز است و در نتیجه در این مقاله فقط به بررسی این دورش و تگ های مربوط به آنها می پردازیم . ( اگر چه اکثر تگ های موجود در روش Digest  نیز مشابهند .)


 

۱ – Basic Authentication :

ساده ترین و نا امن ترین روش احراز هویت از طریق پروتوکل http  روش Basic است . در این روش تبادل اطلاعات از جمله نام کاربری و کلمه عبور به صورت فایل ها (رشته های ) متنی ساده است . اگر چه این رشته های به کاراکتر های خاصی کد می شوند ولی دیکد کردن آنها به سادگی امکان پذیر است .

به عنوان مثال فرض کنید شما از نام کاربری Fannie و کلمه عبور FuRpAnTsClUb  برای احراز هویت خود جهت دسترسی به اینترنت از طریق پراکسی اسکویید استفاده می کنید .

در روش Basic  ابتدا نام کاربری و کلمه عبور با استفاده از یک کالن از یکدیگر جدا می شوند :

 

Fannie:FuRpAnTsClUb

 

سپس رشته بدست آمده توسط کد گذاری Base64 که در RFC شماره 2045 به آن پرداخته شده است کد گذاری می شود . این رشته کد گذاری شده در سرآیند http به صورت زیر نمایش داده می شود :

 

Authorization: Basic RmFubmllOkZ1UnBBblRzQ2xVYgo=

 

بدین ترتیب هر کسی با Sniff  کردن ترافیک شبکه شما و استفاده از اسکریپت base64.py  که به طور پیش فرض در هنگام نصب pythone در سیستم شما کپی می شود قادر خواهد بود به نام کاربری و پسوورد شما دست یابد .

 

echo RmFubmllOkZ1UnBBblRzQ2xVYgo= | /usr/local/lib/python.5/base64.py –d

 

در روش Basic  از پارامترهای زیر می توان برای تنظیم خصوصیات مختلف استفاده کرد :

 

1 - auth_param      basic      programcommand

2 - auth_param      basic      childrennumber

3 - auth_param      basic      realm String

4 - auth_param      basic      credentialsttltime-specification

 

۱ – پارامتر program : دستور مورد نیاز برای اجرای برنامه کمکی و آرگومان های مورد نیاز ( در صورت وجود ) را مشخص می کند .در بیشتر مواقع این پارامتر مشخص کننده مسیر به یکی از authentication helpers  است ، که بطور پیش فرض در مسیر /usr/local/squid  واقع اند .

۲ – پارامتر children : مشخص می کند که اسکویید مجاز است تا چه تعداد پردازش برای عمل احراز هویت اختصاص دهد . مقدار پیش فرض 5 است .

۳ – پارامتر realm  : در اینجا realm را میتوان نام دامنه اکتیو دایرکتوری که کاربران باید از آن خوانده شود در نظر گرفت . ( توجه شود با حروف بزرگ نوشته می شود . )  

۴ – پارامتر credentials ttl : زمان پیش فرضی را مشخص می کند که اسکویید نتایج عمل احراز هویت کاربران را در خود ذخیره ( کش ) می کند . واضح است که هر چه این مقدار بیشتر باشد بار پردازش های احراز هویت بر اسکویید کمتر خواهد بود .

این نکته حائز اهمیت است که عمل کش شدن نتایج فقط برای نتایج مثبت انجام می گیرد و نه منفی .

همچنین مقدار زیاد این پارامتر باعث به خطر افتادن امنیت و مشکلات جدی خواهد شد .

 

مثال : تنظیم پارامتر های مورد نیاز اسکویید برای بهره گرفتن از احراز هویت از طریق pam

 

auth_param basic program /usr/local/squid/libexec/pam_auth

auth_param basic children 10

auth_param basic realm My Awesome Squid Cache

auth_param basic credentialsttl 1 hour

 

 

 

البته در ادامه نیاز است تا با تعریف ACL  زیر و دسترسی به آن احراز هویت فقط برای کاربران مجاز انجام گیرد:

 

 

acl KnownUsers proxy_auth REQUIRED

 

http_access allow KnownUsers

 

( توجه کنید که در این مثال فقط تنظیمات squid بیان شده است و برای احراز هویت با استفاده از pam  به تنظیمات لازم برای pam  نیاز است که خارج از حیطه این مقاله است . )

 

از دیگر برنامه های کمکی برای احراز هویت در این روش می توان به NCSA ( ncsa_auth )  ، LDAP  ( squid_ldap_auth ) و SMB ( smb_auth  ) نام برد .


 ۲ – Microsoft NTLM Authentication

NTLM  که مخفف واژه های NT Lan Manager   است پروتوکلی است که توسط Microsoft  ایجاد و توسعه داده شد و گروه های مختلفی از جمله گروه squid  از اطلاعات محدود موجود و آنالیز ترافیک شبکه آنرا مهندسی معکوس کرده اند .

NTLM از مکانیزم دستدهی سه طرفه  ) 3 – way handshake ) برای احراز هویت یک اتصال بهره می برد . در این روش وقتی یک اتصال در احراز هویت جواب مثبت دریافت کرد هر درخواستی در این اتصال دیگر نیازی به احراز هویت نخواهد داشت .

 

NTLM  از توابع رمزنگاری و مقادیر کد گذاری شده در تبادلات داده استفاده می کند .

اگر چه NTLM امنیت بسیار بالاتری نسبت به روش Basic  فراهم می آورد ولی متخصصان عقیده دارند که این روش نسبت به روش احراز هویت از طریق Digest  از امنیت ضعیف تری برخوردار است .

 

 

در روش NTLM  از پارامترهای زیر می توان برای تنظیم خصوصیات مختلف استفاده کرد :

 

1 - auth_param ntlm program command

2 - auth_param ntlm children number

3 - auth_param ntlm max_challenge_reuses number

4 - auth_param ntlm max_challenge_lifetime time-specification

 

موارد 1 و 2 همانند روش Basic  عمل می کنند و دو پارامتر بعدی خصوصیات احراز هویت اتصال بین کلاینت و سرور را مشخص می کنند .

( در 3 – way handshake ، ابتدا کلاینت درخواست اتصال را با ارائه اطلاعاتی به سرور ارسال می کند ، سپس سرور پیامی به نام challenge  به کلاینت ارسال می کند و در آخر کلاینت درخواست خود را دوباره با جوابی مثبت به challenge به سرور ارسال می کند . )

3 – پارامتر max_challenge_reuse : مشخص می کند که پیام challenge  چند بار می تواند مورد استفاده قرار گیرد . مقدار پیش فرض 0  است و مشخص می کند که هیچ گاه از یک پیام challenge

دوبار استفاده نخواهد شد .

بالابردن این مقدار بار انجام عمل احراز هویت توسط اسکویید را کم می کند و متعاقبا از امنیت می کاهد .

4 – پارامتر max_challenge_lifetime  : میزان زمانی که پیام challenge  معتبر است را مشخص می کند . مقدار پیش فرض 60 ثانیه است .

 

مثال :

 

auth_param basic program /usr/local/squid/libexec/pam_auth

auth_param basic children 10

auth_param basic realm My Awesome Squid Cache

auth_param basic credentialsttl 1 hour

 

و ACl و http_access  مورد نیاز :

 

acl KnownUsers proxy_auth REQUIRED

 

http_access allow KnownUsers


 

خوب بعد از همه این تفاسیر می رسیم به مبحث اصلی یعنی Squid Proxy Authentication Against ActiveDirectory

برای این کار شما ابتدا باید لینوکس را به اکتیو دایرکتوری join  کنید . ( در این پست طریقه join  کردن linux را به windows 2003 Active Directory  گفتم )

و سپس فایل اسکویید ) /etc/squid.conf  ) را با استفاده از پارامتر های زیر  ویرایش کنید :

 

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp

auth_param ntlm children 5

auth_param ntlm max_challenge_reuses 0

auth_param ntlm max_challenge_lifetime 2 minutes

auth_param ntlm use_ntlm_negotiate off

 

# (in the ntlm basic area)

 

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic

auth_param basic children 5

auth_param basic realm LINUX-NOTES.IR

auth_param basic credentialsttl 2 hours

 

و حالا تنظیمات مربوط به ACL  :

 

acl ntlm proxy_auth REQUIRED

و بالاخره :

http_access allow ntlm

( توجه کنید که

1 -   اگر از کانفیگ اسکوییدی استفاده می کنید که به رنجه خاصی از شبکه دسترسی کامل داده شده است به عنوان مثال :http_access allow LAN1  و اکنون می خواهید authentication  برای آنها انجام گیرد باید این خطوط را حذف کنید .

2 – اگر در حال حاضر از اسکویید در حالت شفاف ( transparent )  استفاده می کنید آنرا از حالت شفاف خارج سازید .

3 –  بعد از اعمال تغییرات سرویس اسکویید را ریستارت کنید . )

 

اکنون اگر تنظیمات مربوط به آی پی و پورت سرور پراکسی را مرورگر کلاینت ها را انجام دهید هنگام در خواست کاربران برای مرور اینترنت به کادری که نام کاربری و کلمه عبور را می خواهد مواجه خواهند شد .

 

 

 

 


امید مهاجرانی

Omid dot mohajerani at gmail dot com

 

 

 

+ نوشته شده توسط امید مهاجرانی در شنبه ششم مرداد 1386 و ساعت 0:8 |