نصب و راه اندازی سرویس Squid

یک پراکسی سرور یک سرویس کارآمد جهت شبکه شما یا شبکه شما با اینترنت است که امنیت بالاتری را جهت کاربران اینترنت فراهم می کند و هم چنین می تواند بعنوان یک کش سرور استفاده شود که باعث
صرفه جویی در پهنای باند و بالا رفتن سرعت اینترنت شما شود.
Squid یکی از بسته های لینوکس میباشد که لینوکس را به عنوان یک پروکسی سرور یا همان کش سرور نتظیم میکند
حالا میرویم Squid را نصب کنیم
اگر داخل CD Linux قرار داشت این دستورات را در ترمینال لینوکس وارد میکنیم با کاربر ریشه وارد میشویم و بعد دستورات زیر را وارد میکنیم
# mount /media/cdrom
# rpm –ivh /media/cdrom/Fedora Core/RPMS/squid-*.rpm
توجه کنید این مسیر بر حسب مثال بوده شما باید مسیر کامل را وارد کنید
و بعد ار نصب این دستور را در ترمینال وارد میکنید
umount /media/cdrom
اگر شما RPM یا Pack Squid را نداشتید میتوانید Source برنامه را از سایت www.squid-cache.org دریافت نموده و آن را Compile کرده و استفاده نمایید
موقعی که شما Source برنامه را دریافت میکنید این فایل یک فایل فشرده میباشد که باید ابتدا آن را Extract نمایید که با دستور زیر این کار را میکنیم
# tar -zxf squid-2.5.STABLE4-src.tar.gz
حالا فایل فشره باز شده و فولدر با نام فایل به وجود آمده داخل فولدر شده و عملیات Compile را شروع میکنیم
# cd squid-2.5.STABLE4
# ./configure
# make all
# make install
بعد از وارد کردن دستورات بالا Squid بر روی سیستم ما نصب شده و ما میخواهیم فایل squid.conf را پیکربندی کنیم
تذکر: برای نصب Squid بهتر است همیشه RPM Squid را نصب کنیم.
حالا بسته به نوع روش نصب ما squid.conf در مسیرهای مختلفی قرار میگیرد که ما با دستور
locate squid.conf
فایل squid.conf را پیدا میکنیم و میریم سراغ پیکربندی (در اینجا مسیر را /etc/squid/squid.conf در نظر میگیریم)
فایل squid.conf دارای صد و بیست وپنح برچسب(Tag) جهت انجام تنظیمات است که ما در اینجا به همه آن ها اشاره نخواهیم داد و به اصلی ترین آن ها اشاره خواهیم نمود
خود فایل squid.conf دارای توضیحاتی میباشد که میتوانید برای کمک از آنها هم استفاده نمایید.
حالا فایل مورد نظر(squid.conf) را پیکربندی میکنیم
http_port
از این گزینه برای مشخص کردن پورت پروکسی استفاده میشود یا به عبارتی آدرس درگاهی را که squid از آن به درخواست های سرویس‌گیرنده‌ها گوش می دهد که پیش فرض 3128 میباشد که ما میتوانیم از چندین پورت استفده کنیم اگر از پروکسی سرور به عنوان وب سرور نیز استفاده میشود پورت 80 را نیز قرار میدهیم و یا اگر سیستم شما چند IP دارد و میخواهید به یک رنج گوش دهد به این صورت عمل میکنید
http_port 8080 3128
http_port 80 3128
http_port 45.58.69.8 3128
icp_port
مخفف Internet Cache Portocol میباشد که از این برچسب موقعی استفاده میشود که بخواهیم چند کش سرور را به هم متصل نمایم تا از اطلاعات همدیگر استفاده نماین که پورت پیش فرض آن 3130 میباشد
icp_port 3130
cache_peer Ip Or ProxyDomain parent 3128 3130
از این گزینه برای ارتباط با با کش سرورهای دیگر استفاده میشود که IP Or ProxyDomain کش سرور دیگر داده میشود Parent نوع کشینگ که سه حالت میباشد و پورت کش با پورت ICP که به شکل زیر استفاده میکنیم
cache_peer 217.218.155.147 parent 3128 3130
cache_peer 214.215.155.14 sibling 3128 3130
که sibling فقط Object های کش شده را Share میکند
hierarchy_stoplist
این برچسب یکی از برچسب های مهم Squid میباشد که میگوید مثلا
hierarchy_stoplist cgi-bin ?
پوشه های cgi-bin کش به همراه? هر فایلی داخل این پوشه(cgi-bin) بود کش نشود که پیش فرض آن این است
hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
این دو خط هم از برچسب های مهم Squid میباشند که برای این میباشد که پوشه cgi-bin و آدرس بعد این پوشه \? به هیچ وضح کش نشود no_cache
پوشه cgi-bin فایلهای با پسوند *.cgi را دارد که این فایلها مانند سایت Dynamic میباشند و بهتر است هیچ وقت کش نشوند چون اطلاعات این فایلها همیشه تغییر میکند این آدرس داخل فایل squid.conf قرار ندهید این مثال از cgi-bin میباشد.
http://55.59.57.52/cgi-bin/cachemgr.cgi
پیش فرض همین برچسبها خودشان میباشد
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

cache_mem
مقدار حافظه ای که Squid برای عملیات خود در احتیاج دارد که بهتر است این مقداربسته به اندازه Ram شما بیشتر از 200-128 نباشد و از مقدار بر حسب MB میباشد
cache_mem 64 MB

maximum_object_size
بیشترین حجم فایلی که Squid میتواند کش کند را مشخص میکند که اگر این حجم زیاد باشد کش سرور شما از لحاظ امنیتی دچار ضعف شده و هکرها به راحتی میتوانند با درخواست های سنگین سرور شما را از پا در بیارند و مقدار فایل را شما با KB یا MB میتوانید مشخص کنید سعی کنید حجم فایل بیشتر از 128 MB نباشد
maximum_object_size 100 MB

minimum_object_size
کمترین حجم فایلی که Squid میتواند کش کند که سعی شود این را همیشه 0 KB بگذارید اگر Bit یا Byte گذاشته شود Squid اخطار میدهد و Run نخواهد شد
minimum_object_size 0 KB

cache_dir Type Directory-Name Fs-specific-data L1 L2
محل ذخیره objectهای Cache شده را مشخص میکند که Type مشخ کننده فرمت ذخیره شدن میباشد (Format Cache Dir) Directory-Name محل ذخیره شدن یا مسیر ذخیره کردن Object Fs حجم داده‌ها بر روی دیسک بر حسب (مگابایت) را مشخص می کند پارامترهای چهارم و پنجم تعداد زیر شاخه ها (اولین و دومین رده) برای ایجاد در این مسیر را مشخص می‌کنند.
فرمت به ترتیب عبارتند از
ufs فرمت قدیمی Squid میباشد
aufs فرمت که بعد از ufs وارد شد
diskd بهترین فرمت Squid که دارای 2 Option میباشد که از این مثال خواهم زد.
cache_dir diskd /var/spool/squid 3000 32 128 Q1=64 Q2=72
Q1 وQ2 از Option فرمت diskd میباشد که پیش فرض 64 و72 میباشند
cache_access_log
cache_store_log
cache_log
این سه برچسب برای گرفتن Log از کارکرد Squid و اینکه کاربران به چه سایتی میروند و کدام Object در حال کش شدن میباشد که Log مقداری از حجم هارد دیسک شما را خواهد گرفت اگر هارد شما حجم کمی دارد بهتر است این Log ها را None کنید تا هارد شما فضای خالی داشته باشد برای none کردن به این شکل عمل میکنیم
cache_access_log none
cache_store_log none
cache_log none
و اگر هارد شما فضا زیاد دارد و میخواهید Log داشته باشید به این شکل عمل کنید
cache_access_log /var/log/squid/access.log
cache_store_log /var/log/squid/store.log
cache_log /var/log/squid/cache.log
که اگر این کار را انجام دهید احتیاج به یک برچسب دیگری به نام
logfile_rotate
دارید که این برچسب بر حسب روزی که مشخص میکنید Log فایلهای شما را فشره کرده تا حجمی که Log فایل میگیرد کم شود اگه این برچسب گذاشته نشود Squid شما بعد از مدتی به خاطر یاد شدن Log میخوابد و تا موقعی که Log ها را پاک نکرده Run نمیشود
logfile_rotate 4

ftp_user
برای انتقال فایلهای که از سور سرور FTP احتیاج به نام کاربر دارند مورد استفاده میشوند که شما میتوانید ایمیل خود را داده یا از کاربر میهمان anonymous استفاده نمایید
ftp_user anonymous@

dns_nameservers
Squid از DNS های که در فایل /etc/resolv.conf استفاده میکند شما با این برچسب میتوانید از DNS های دیگر استفاده نمایید
dns_nameservers 192.9.9.3 4.2.2.2

auth_param
از این ابزار برای احزار هویت کاربران استفاده میشود که پیش فرض آن چند خط میباشد
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
که از لحاظ امنیتی باید 2 برچسب دیگر اضافه نماییم تا امنیت سرور بالا رود
authenticate_ttl 1 hour
authenticate_ip_ttl 2 seconds
پارامتر authenticate_ttl تعریف کننده این مورد است که تا چه مدت زمان Squid اطلاعات Authenticate کلاینت را به خاطر بسپارد . این تنظیم در واقع کلاینت را وادار می‌نماید که تا بعد از یک دوره زمانی خود را دوباره Authenticate کند
request_header_max_size
این پارامتر در این رابطه استفاده می‌شود که تا مقدار سایز قابل پذیرش HTTP Header را محدود نماید . مقدار پیش فرض در اینجا ۱۰ کیلو بایت بوده که از مقدار منطقی بیشتر به نظر میرسد به این دلیل که سایز متوسط header ۵۱۲ بایت است در صورتی که سنگین ترین header ممکن است در حد کیلوبایت باشند. بیشتر حملات DoS نسبت به پراکسی سرورها اینگونه رخ می‌دهد که headerهایی برای آن‌ها فرستاده شود که از مقداری که پراکسی سرور می‌تواند جوابگو باشد بیشتر باشد که شما میتوانید مقدار آن را تغییر دهید سعی منید بیشتر از 10 KB نباشد
request_header_max_size 8 KB

refresh_pattern
این برچسب یکی از مهمترین برچسب های Squid میباشد که برای Refresh کردن سایتهابه کار برده میشود که موقعی که سایت به روز شد یا تغییراتی در آن اعمال شد و موقعی که کاربر آن سایت را درخواست کرد این برچسب سایت را مجددا سایت را بازبینی Refresh میکند اگر این برچسبها درست باشد موقعی که سایت در خواست شد سایت فورا سایت باز میشود حتی اگر به روز شده باشد نیز نشان داده میشود اگر اشتباه باشد در باز شدن سایت تاخیر به وجود می آید و یا اگر سایت به روز شده باشد چیزی نشان داده نمیشود.
من چند خط اینجا قرار میدهم که درست میباشد و شما میتوانید از آنها استفاده نمایید
refresh_pattern ^ftp: 1440 60% 10080
refresh_pattern ^gopher: 1440 20% 1440
refresh_pattern . 0 30% 4320
اینها هم Refresh_pattern های Microsoft که تغییراتی داده ام تا درست کار کنند
refresh_pattern http://*.windowsupdate.microsoft.com/ 0 60% 20160
refresh_pattern http://office.microsoft.com/ 0 60% 20160
refresh_pattern http://windowsupdate.microsoft.com/ 0 60% 20160
refresh_pattern http://wxpsp2.microsoft.com/ 0 60% 20160
refresh_pattern http://xpsp1.microsoft.com/ 0 60% 20160
refresh_pattern http://w2ksp4.microsoft.com/ 0 60% 20160
refresh_pattern http://download.microsoft.com/ 0 60% 20160

Time Out
در این قسمت تعدادی برچسب وجود دارد که Time Out انها در اینجا تعیین میشود که میتوانید اینها را بدین شکل پیکربندی نمایید
negative_ttl 5 minutes
positive_dns_ttl 30 minutes
negative_dns_ttl 1 minute
connect_timeout 1 minute
read_timeout 15 minutes
request_timeout 5 minutes
client_lifetime 14 hours
pconn_timeout 120 seconds
shutdown_lifetime 10 seconds
که اینجا به توضیح دو برچسب میپردازیم که از لحاظ امنیتی مهم هستند
برچسب client_lifetime بیشترین زمانی است که کلاینت می‌تواند به عنوان یک پروسه Squid قرار گرفته باشد. در واقع این تنظیم سرور شما را از باز بودن تعداد زیادی سوکت محافظت می‌نماید . بستگی به شرایط شما ممکن است 8 ساعت مناسب باشد در صورتی که پیش فرض آن 1 روز کمی‌زیاد به نظر می‌رسد. با بررسی در مورد وصل شدن کلاینت‌ها می‌توان زمان مناسب را تشخیص داد یک نفوذگر می‌تواند با استفاده از lifetime طولانی تعداد زیادی سوکت را باز نماید و این خود باعث نوعی حمله DoS می‌گردد. اما پارامتر pconn_timeout شبیه به client_lifetime می‌باشد با این تفاوت که فقط شامل ارتباط بیکار(Idle Connection) ها می‌گردد.
acl
مخفف Access Control List میباشد جهت کنترل دسترسی به Cache مورد استفاده قرار می گیرد. در کنترل دسترسی دو عنصر وجود دارد: کلاس ها و عملگرها
کلاس ها: یک کلاس معمولا به مجموعه ای از کاربرها ارجاع داده می‌شود(IP Range)
عملگرها: روی مجموعه ای از acl ها برای ICP و HTTP عمل می کند. یعنی شما می توانید مجموعه های مختلفی از پروتکل های مختلف داشته باشید. برای هر پروتکل یک acl_operator متفاوت وجود دارد. به عنوان مثال برچسب های icp_access و http_access و snmp_access

برای رد نمودن ویروسهایی که از CMD برای انتقال اسفاده میکنند
acl VIRCMD urlpath_regex winnt/system32/cmd.exe?
http_access deny VIRCMD
برای تعریف یک رنج IP
acl mynet src 217.218.0.0/24
http_access allow mynet
برای مسدود کردن سایتهای که حاوی کلمات خاصی هستند
acl badurl url_regex –i sx
http_access deny badurl
برای مسدود کردن پورتهای که از کش سرور رد میشوند
acl badports port 7 20 81
http_access deny badports
اجازه دسترسی در زمان خاص(روز-ساعت)
acl shab time 17:00-24:00
http_access allow shab
به طور پیش فرض در Squid چند خط acl وجود دارد که میتوانید از آنها استفده نمایید
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl local src 192.168.0.0/24
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow local
http_access deny all
icp_access allow all
که من این چند خط رو در این مقاله قرار دادم تا شما به راحتی بتوانید استفده متید تنها کافی است که شما Ip خود را در acl مربوط به local قرار دهید
reply_body_max_size
با استفاده از این برچسب میتوانید یک رنج را محدود به استفاده از اینترنت نمایید که بر حسب bytes میباشد
acl net src 192.168.1.0/24
reply_body_max_size 800000000000 allow net

cache_mgr
اگر Squid از کار بیفتد، یک e-mail به آدرس مشخص شده با برچسب cache_mgr ارسال می شود. همچنین این آدرس به انتهای صفحه های خطایی که به کاربران ارسال می‌شود، اضافه می شود
cache_mgr Metal_S2004@Yahoo.CoM

cache_effective_user
cache_effective_group
Squid اگر به عنوان root شروع شود، تنها می تواند به پورت های شماره پایین (مثل پورت80 ) بچسبد. در ضمن از لحاظ امنیتی هم صحیح نیست که پروسه‌ای به عنوان root در حال اجرا باشد. Squid به محض چسبیدن به پورت شبکه ID های گروه و کاربر را تغیر می دهد. این ID ها را به صورت زیر مشخص می کنیم
cache_effective_user squid
cache_effective_group squid

visible_hostname
برای پروکسی سرور یک نام مشخص میکنیم
visible_hostname CacheServer

httpd_accel_host
اگر ما بخواهیم از Squid برای پروکسی استفاده کنیم باید این برچسب را در squid.conf گذاشته این برچسب به این معنی است که پروکسی برای کجا استفده میشود که پیش فرض آن virtual میباشد که همه کس از هر جای دنیا میتوانند استفاده کنند یا میتوانید IP بدهید تا فقط یک رنج بتواند به عنوان پروکسی استفده کنید
httpd_accel_host virtual
httpd_accel_host 217.218.155.140

httpd_accel_port
مشخص کننده این است که به چه پورتهایی جواب بدهم که پیش فرض آن 80 میباشد
httpd_accel_port 80

httpd_accel_with_proxy
مشخص کننده این است که آیا به عنوان پروکسی سرور در شبکه عمل کنم یا نه اگر پهنای باند شما کم میباشد بهتر است این گزینه را off کنید زیرا که اگر on باشد همه میتوانند از پروکسی سرور شما استفاده نمایند
httpd_accel_with_proxy off
httpd_accel_uses_host_header
این برچسب کنترل کننده کاربرانی هست که از پروکسی سرور شما استفاده میکنند که همیشه این برچسب باید on باشد
httpd_accel_uses_host_header on
این 4 برچسب همیشه باید در squid.conf باشد تا بتوان کش سرور را run کرد

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

نویسنده: darklove (http://forum.persiannetworks.com/members/8226.html)
آدرس اصلی: نصب و پیکربندی Squid



موضوعات مشابه: