تبليغاتX
Notes On Computer Networks - Squid Web Proxy Cache ( قسمت سوم – پیکربندی )

برای پیکربندی اسکویید فایل squid.conf  را بازکنید . اگر از توزیع fedora  استفاده می کنید این فایل در مسیر /etc/squid  واقع است .

 

 

این فایل حاوی حدود 200 تگ قابل ویرایش و 2700 خط توضیحات است .با کمی تغییرات این فایل  و قبول اکثر تنظیمات پیش فرض نیز می توان اسکویید را راه اندازی کرد . ولی این کار را به شما توصیه نمی کنم . در ادامه به انجام توضیحات لازم در کمترین حالت اشاره و در پست های بعدی توضیحات  این تگ ها را به تفصیل بیان می کنم .

 

در این فایل توضیحات با #  مشخص شده اند که همانند  خطوط خالی در پیکربندی تاثیری نداشته و در هنگام اجرا ،  اسکویید بدون توجه به آنها عمل می کند .

در هنگام تنظیمات باید توجه داشته باشید که در صورت تکرار بعضی از تگ ها که فقط یک بار قابل استفاده هستند .  تنظیمات تگ های پایین تر در فایل اعمال می شوند . به عنوان مثال :

 

connect_timeout 2 minutes

.

.

connect_timeout 10 hour

 

میزان timeout    تگ دوم که در قسمت پایین تر فایل واقع است در نظر گرفته می شود .

بر خلاف برخی تگ ها که کاربرد مکرر آنها برای انجام تنظیمات و اضافه کردن مقادیر الزامی است .

به عنوان مثال :

extension_methods UNGET

extension_methods UNPUT

extension_methods UNPOST

 

که این چنین تگ هایی را می توان در یک خط نوشت . مثال :

 

extension_methods UNGET UNPUT UNPOST

 

ترتیب قرار گرفتن بسیاری از تگ ها در این فایل مهم نیست ولی برخی تگ ها باید به ترتیب قرار گیرند . به عنوان مثال acl  ها باید قبل ار تگ http_access  قرار گیرند .

acl Foo src 1.2.3.4

http_access deny Foo

 

در تنظیم فایل squid.conf  باید توجه داشته باشید که بسیاری از تگ ها نسبت به حروف کوچک و بزرگ حساسند . (case sensitive  )  به عنوان مثال اگر بجای تگ http_port  از HTTP_PORT استفاده کنید . اسکویید ایراد گرفته و اجرا نمی شود .

 

ID squid :

 

همانطور که می دانید در لینوکس هر پراسس توسط یک کاربر یا گروهی اجرا می شود و مالکیت ( ownership  ) آن پراسس ها متعلق به آنها است . برای اسکویید نیز نیاز است تا یک کاربر تعیین شود که دسترسی خواندنی-نوشتنی به فایل ها و فولدر های اسکویید داشته باشد.

توصیه می کنم که یک کاربر و گروه  اختصاصی برای این کار تعریف کنید . زیرا این کار ریسک دسترسی هکرها به دیگر فایل های سیستم را با exploit  کردن اسکویید به حداقل می رساند . اگر بیش از یک نفر نگهداری  اسکویید را بر عهده دارد می توان user  او را به گروه اسکویید اضافه کنید .

بعد از تعریف کاربر و انجام تنظیمات لازم، برای اجرای اسکویید باید توجه داشته باشید که اسکویید را با کاربر تعریف شده اجرا کنید . زیرا با هر کاربری که سرویس اسکویید را start  کردید،  پراسس اسکویید هم با مالکیت همان کاربر شروع به کار می کند . همانطور که می دانید می توانید با دستور su   با کاربر دیگری login  کنید .به عنوان مثال فرض کنید نام کاربری که برای این منظور تعریف کردیم squid  باشد و ما با کاربر omid  وارد سیستم شده باشیم .

omid% su - squid

squid% /usr/local/squid/sbin/squid

 

البته همیشه روند کار به این راحتی نیست زیرا برخی تگ ها برای اجرا نیاز دارند تا پراسس اسکویید با کاربر root شروع به کار کند . در چنین حالتی باید تگ cache_effective_user  را تعریف کرد تا اسکویید  بعد از اجرای  موارد مورد نیاز به عنوان کاربر ریشه  ، از آن کاربر برای ادامه کار ا استفاده کند .مثال :

 

cache_effective_user squid

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

اسکویید تگ دیگری به نام cache_effective_group  نیز دارد که نیازی به تنظیم آن نیست زیرا به طور پیش فرض اسکویید از گروهی استفاده می کند که کاربرش در   تگ cache_effective_user  مشخص شده است .

نکته دیگر اینکه دربرخی توزیع ها مانند فدورا کاربر و گروه squid به طور پیش فرض وجود داشته و نیازی به ایجاد آنها نیست.

 

شماره پورت :

 

تگ http_port  مشخص می کند که Squid  از کدام پورت برای گوش دادن به درخواست های http  استفاده کند. مثال :

http_port 3128

پورت پیش فرض 3128 در نظر گرفته شده است . فقط در حالتی که اسکویید ما به عنوان سرور surrogate  ( توضیحات در پست های بعدی ) عمل کند  باید از پورت 80 و در صورتی که سرور surrogate  به عنوان کش نیز استفاده شود از هر دو پورت استفاده کرد .

پس فعلا شماره پورت را بدون تغییر ، 3128 در نظر می گیریم .

 

cache_mem :

 

اسکویید برخی از آخرین آبجکت هایی که از اینترنت گرفته است درون  حافظه ) ram   )   ذخیره می کند . واضح است که خواندن آبجکت ها از حافظه به مراتب سریعتر از خواندن آنها از هارد دیسک است.

معمولا به این آبجکت ها Hot Object Cache  گفته می شود .

تگ cache_mem مشخص می کند که  اسکویید چه مقدار از ram  را می تواند برای ذخیره آیجکت ها در حافظه استفاده کند. پیشنهاد می کنم این مقدار را عددی بین 8 تا 32 مگابایت در نظر بگیرید. مگر اینکه چندین گیگابایت  حافظه در اختیار دارید . اگر چه در این حالت  با زیاد کردن cache_size  می توان بهتر از آن بهره برد .

بسیاری از افراد تصور می کنند که این تگ ، مقدار حافظه کلی مورد استفاده اسکویید را محدود می سازد . در صورتیکه در اسکویید هیچ تگی برای محدود ساختن میزان حافظه مورد استفاده وجود ندارد .

از اسکویید ورژن 2.5  به بعد آجکت های ذخیره شده در ram  فقط شامل آبجکت هایی می شوند که از شبکه می آیند ( اینترنت یا کش های مجاور ) و آبجکت های ذخیره شده در هارد دیسک به هیچ عنوان در ram  قرار نمی گیرند .

مثال :

cache_mem 128 MB

 

maximum_object_size_in_memory :

 

فقط آبجکت ها با اندازه مشخصی می توانند در ram  قرار گیرند که ماکزیمم حجم این آبجکت ها توسط تگ  maximum_object_size_in_memory تعیین می شود .مقدار پیش فرض 8 کیلوبایت است که برای بیش از نصفی از درخواست هایی که اسکویید دریافت می کند کافی است . چون اسکویید آبجکت ها را در بلاک های 4 کیلوبایتی ذخیره می کند ، maximum_object_size_in_memory را باید ضریبی از 4 در نظر گرفت تا از اتلاف حافظه جلوگیری شود .

 مثال :

maximum_object_size_in_memory 64 KB

 

maximum_object_size :

 

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

مثال

maximum_object_size 32000 KB

minimum_object_size 0 KB

 

  : cache_dir

 

cache_dir یکی از مهمترین تگ هاست و نقش مهمی در کارایی اسکویید دارد . این تگ زمان و نحوه ذخیره آبجکت ها را مشخص می کند . شکل کلی آن به صورت زیر است :

 

cache_dir scheme directory size L1 L2 [options]

 

schema ( مدل ) : اسکویید از 5 مدل ذخیره سازی آبجکت ها پشتیبانی می کند . که عبارتند از : ufs ، aufs  ، diskd ، cross و null  . از این 5 مدل 3 مدل ufs  ، aufs  و diskd تقریبا به صورت مشابه کار می کنند .  ufsمدل ذخیره سازی ) Storage Schema )  پیش فرض اسکویید است . باید توجه داشته باشید که در صورت استفاده از مدل هایی غیر از ufs  باید در هنگام کامپایل از پارامتر

—enablestoreio استفاده کنید .  در اینجا فقط به توضیح مدل ذخیره سازی ufs می پردازیم .

 

directory : این آرگومان مشخص کننده مسیری است که آبجکت های کش شده درآن قسمت از سیستم فایل نگهداری می شوند . معمولا یک پارتیشن کامل را برای cache_dir  در نظر می گیرند .

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

# newfs /dev/hd1d

# newfs /dev/hd2d

# mount /dev/hd1d /cache0

# mount /dev/hd2d /cache1

 

و سپس خطوط زیر را به squid.conf  اضافه کنید :

cache_dir ufs /cache0 7000 16 256

cache_dir ufs /cache1 7000 16 256

البته اگر هارد دیسک اضافی در اختیار ندارید می توانید از پارتیشن های سیستم فایل کنونی خود استفاده کنید . یکی از پارتیشن ها را که بیشترین حجم را دارد ( شاید /usr یا  /var ) انتخاب کنید ، و یک فولدر در آن ایجاد کنید. به عنوان مثال :

# mkdir /var/squidcache

و سپس خط زیر را به squid.conf  اضافه کنید .

cache_dir ufs /var/squidcache 7000 16 256

 

size : سومین آرگومان cache_dir  مشخص کننده حجم دایرکتوری مشخص شده برای عمل کش کردن  است. در واقع مقدار ماکزیمم حجمی است که اسکویید  می تواند از فضای دیسک برای ذخیره آبجکت ها اختصاص دهد . این مقدار باید با توجه به عوامل متعددی از جمله پهنای باند – میزان حافظه سیستم و ... در نظر گرفته شود . علاوه بر آن همیشه باید در هنگام اختصاص این فضا از در نظر گرفتن فضای لازم برای فایل های log و فایل های موقتی که اسکویید یا دیگر برنامه ها نیاز دارند مطمئن بود .

برای دیدن میزان فضای خالی یا استفاده شده ی هارد دیسک می توانید از دستور df –k  استفاده کنید .

مثال :

 

# df -k

Filesystem 1K-blocks Used  Avail  Capacity  Mounted on

 /dev/da1d  3037766   8   2794737    0%      /cache0

 /dev/da2d  3037766   8   2794737    0%      /cache1

 

 در این مثال دو هارد دیسک خالی در نظر گرفته شده است . توجه داشته باشید که اگر چه حجم هارد دیسک ها تقریبا  3037مگابایت  است ولی شما فقط می توانید از 2794 مگابایت آن برای کش استفاده کنید . اگر چه توصیه می کنم حداقل 10 درصد از این فضا را برای فایل های موقتی که سیستم ایجاد می کند یا فایل های log کنار بگذارید .

مثال :

cache_dir ufs /cache0 2500 16 256

 

L1 و L2 : مدل های ذخیره سازی ufs ، aufs و  diskd از ساختاری درختی با دو سطح استفاده می کنند .  شماره L1 و L2 مشخص کننده تعداد دایرکتوری های موجود در این دو سطح هستند .برای روشن شدن موضوع به شکل زیر توجه کنید :

 

 

باید L1 و L2 را طوری تنظیم کرد که فایل های موجود در هر دایرکتوری سطح دوم  از چند صد تا تجاوز نکند . به عنوان مثال فرض کنید دایرکتوری کش/cache0 شما 7000  مگابایت فایل ذخیره می کند .

اگر اندازه هر فایل را حدودا 10 کیلوبایت در نظر بگیریم . این دایرکتوری می تواند 700000  فایل را در خود ذخیره کند . با در نظر گرفتن L1 = 16  و L2 = 256   در مجموع 4096 دایرکتوری در سطح دوم داریم . در نتیجه 170= 4096/700000  یعنی در هر دایرکتوری 170 فایل ذخیره می شود که مقداری متعادل است . واضح است که  هر چه تعداد این فایل ها زیاد شود سرعت فراخوانی  آنها کمتر خواهد شد .

و آخرین نکته این که برای ساخته شدن این swap directory   ها باید قبل از اجرای سرویس اسکویید دستور squid – z را اجرا کنید .

 

[options]:  دو گزینه به همراه تگ cache_dir قابل استفاده است .

1-  readonly : این گزینه اسکویید را وادار می کند تا آبجکت های جدید را بجای آبجکت های قبلی ذخیره نکند و فقط آبجکت هایی که قبلا کش شده اند را بخواند . مثال :

cache_dir ufs /cache0 7000 16 256 read-only

این گزینه در مواردی کاربرد دارد که بخواهید مکان ذخیره آبجکت ها را تغییر دهید ( تغییر هارد دیسک یا دایرکتوری حاوی فایل های کش شده ) .  اگر بدون استفاده از این گزینه اقدام به تغییر مسیرذخیره آبجکت ها نمایید کش شما  تامدتی از hit ratio  پایینی برخوردار خواهد بود . شما می توانید با استفاده از این گزینه از hit  های آبجکت های کش شده استفاده کرده و پس از مدتی که این گزینه را حذف کنید . به عنوان مثال اگر/ cache0  حاوی آبجکت های قبلی و /cache1  هارد دیسک جدید باشد میتوان از پیکربندی زیر استفاده کرد :

cache_dir ufs /cache0 7000 16 256 read-only

cache_dir ufs /cache1 7000 16 256

 

2 -  max-size : توسط این گزینه می توانید حداکثر حجم فایل که کش شود را مشخص کنید . که معادل تگ maximum_object_size است . مثال :

cache_dir ufs /cache0 7000 16 256 max-size=1048576

 

 

cache_swap_low :

 

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

 

cache_swap_low 80%

مشخص می کند که تا قبل از پر شدن 80 درصد فضای در نظر گرفته شده برای کش کردن آبجکتها اقدام به ذخیره آبجکت های جدید بر روی آبجکت های قدیمی نکند .

در اسکویید های ورژن پایین تر برای کنترل این موضوع از تگ cache_swap_high  نیز استفاده میشد که در ورژن های بالاتر اگر چه این تگ هنوز قابل استفاده است.ولی می توان گفت عملا بی تاثیر است .

 

cache_mgr :

 

این تگ که در جلوی آن یک ایمیل قرار می گیرد برای ارتباط کاربران با مدیر کش در صورت بروز اشکال در نظر گرفته شده است . مثال

cache_mgr  omid@linux-notes.com

که این ایمیل در صفحات error   اسکویید به نمایش در می آید .

 

visible_hostname :

 

اگر چه تنظیم این تگ الزامی نیست ولی پیشنهاد می کنم که حتما از آن استفاده کنید چون که اگر اسکویید به هر دلیلی نتواند نام کامپیوتر شما ) FQDN  )  را بدست آورد ایراد گرفته و اجرا نمی شود .

 

% squid -Nd1

FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

 

refresh_pattern :

 

Refresh_pattern  ها را می توان مدل هایی برای تصمیم در مورد کش کردن یا نکردن یک آبجکت تعریف کرد . به عنوان مثال شما می خواهید فایل های با پسوند jpg را ذخیره کنید یا ...

چون در پست های بعدی به تفصیل در باره آنها صحبت می کنم اینجا فقط به ارائه چند مثال می پردازم. 

refresh_pattern \.img$           0   50%    720

refresh_pattern \.jpeg$          0   50%    720

refresh_pattern \.jpg$           0   50%    720

 

acl :

 

Access control list  ها قوانینی هستند که اجازه دسترسی به پراکسی و ... در آن مشخص شده است  . اسکویید با تنظیمات پیش فرض توسط همین acl  ها به هیچ کلاینتی اجازه دسترسی به پراکسی را نمی دهد .

در ساده ترین حالت می توان یک acl  برای رنج آی پی های درون شبکه خود تعریف کرده و توسط یک قانون http_access  به آنها اجازه دسترسی به پراکسی اسکویید را بدهید .برای این کار می توان از src acl  بهره برد.

acl MyNetwork src 192.168.0.0/16

http_access allow MyNetwork

 

در اسکویید انواع acl  ها برای انجام کار های مختلف در نظر گرفته شده است که در یک پست  ، کامل به آنها می پردازم . تنظیمات پیش فرض Squid.conf حاوی چندین acl  مهم است که فعلا آنها را تغییر ندهید . ترتیب قرار گرفتن خطوط acl  مهم نیست ولی ترتیب قرار گرفتن قوانین http_access  مهم است و جابجایی آنها مشکل ایجاد خواهد کرد . برای وارد کردن Acl  خود خط زیر را در فایل پیدا کنید و آن را زیر این خط بنویسید.

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

به عنوان مثال با اضافه کردن اجازه دسترسیMyNetwork  و با در نظر گرفتن acl  های پیش فرض فایل squid.conf به صورت زیر خواهد بود .

acl All src 0/0

acl Manager proto cache_object

acl Localhost src 127.0.0.1/32

acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535

acl SSL_ports 443 563

acl CONNECT method CONNECT

acl MyNetwork src 192.168.0.0/16

 

http_access allow Manager Localhost

http_access deny Manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow MyNetwork

http_access deny All

 

با تنظیم acl ها کار پیکربندی فایل squid.conf  در حالت مینیمم تمام می شود.

خوب حالا ابتدا Squid –z  را اجرا کنید و سپس سرویس squid را با اجرای دستور  squid -Ndlاجرا کنید(  اگر از توزیع فدورا استفاده می کنیدمی توانید از دستور  service squid start  برای این کار  و اگر از توزیع debain  استفاده می کنید از دستور  /usr/local/squid/sbin/squid)

 

حالا پراکسی و کش شما آماده است . فقط کافی است در تنظیمات browser  کاربران آدرس آی پی کامپیوتر squid و شماره پورت 3128  را وارد کنید . به عنوان مثال در internet explorer  :

 

البته حتما به این فکر کردید که در شبکه ای با 100 ها کامپیوتر انجام این تنظیمات کمی مشکل ساز خواهد بود . برای حل این مشکل می توان اسکویید را در حالت شفاف ) transparent  ) استفاده کرد . که موضوع پست بعدی من خواهد بود .

 

خوب امیدوارم زیاد گیچ نشده باشید . بعد از چند پست دیگر که با مفاهیم و اصول کلی آشنا شدید یک پست را به نصب سریع ) quick installation  ) اختصاص می دهم و مراحل پیکربندی را به صورت مرحله به مرحله ( البته بدون توضیحات اضافی که اینجا دادم ) بیان می کنم.

 

راستی -----     خوشحال می شم ایراد ها و اشکال های احتمالی  را برام بنویسید .

+ نوشته شده توسط امید مهاجرانی در پنجشنبه بیستم اردیبهشت 1386 و ساعت 9:58 |