برای پیکربندی اسکویید فایل 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 ) اختصاص می دهم و مراحل پیکربندی را به صورت مرحله به مرحله ( البته بدون توضیحات اضافی که اینجا دادم ) بیان می کنم.
راستی ----- خوشحال می شم ایراد ها و اشکال های احتمالی را برام بنویسید .
