:: مقدمه
يک Proxy Server يک سرويس کارآمد جهت شبکه شما يا شبکه شما و اينترنت است که امنيت بالاتری را جهت کاربران اينترنت فراهم می کند و هم چنين می تواند بعنوان يک Cache Server هم استفاده شود که باعث بالا رفتن بازدهی سرور شما و سرعت آن در دسترسي به اينترنت مي شود.
Squid، خود يک پرکسی سرور ايمن با توانايی بسيار بالا که دارای امکان استفاده در جهت Cache Server را نيز دارد که يکی از کاربردي ترين Cache Server ها در شبکه اينترنت است. اطلاعات بيشتر در مورد اين Cache Server ازطريق سايت http://www.squid-cache.org قابل دريافت است.

:: نصب Linux
بهترين راه جهت نصب لينوکس استفاده از نمونه های مختلف در دسترس است که RedHat و Debian از مشهورترين آنهاست که براحتی از طريق اينترنت قابل دريافت هستند.

:: نصب Squid

- نصب از طريق Pack
اين را توجه داشته باشيد که معمولا بيشتر نسخه های Linux داراي يک پک Squid به صورت Pack های قابل نصب است که ممکن است در موقعی که نسخه Linux شما نصب مي شود، نصب نگردد. بعنوان مثال بعد از نصب RedHat 7.1 شما متوجه مي شود که Squid نصب نگرديده است. خود Squid در CD #2 در شاخه RedHat/RPMS قرار گرفته است. جهت نصب آن ابتدا اطمينان حاصل نماييد که شما بعنوان ROOT وارد شده ايد سپس از فرمان rpm به صورت زير استفاده کنيد:
mount /mnt/cdrom
rpm -Uhv /mnt/cdrom/RedHat/RPMS/squid-*.rpm
umount /mnt/cdrom

شما در هنگام نصب تعداد زيادی Hash (#) را مشاهده می کنيد که نشان از نصب Squid دارد. در لينوکس دبيان شما می توانيد از برنامه apt-get جهت دان لود و نصب Squid از اينترنت اقدام نماييد:
apt-get install squid

- نصب از طريق Source
اگر شما مايل به نصب Squid از طريق فايل های Source هستيد، می توانيد اين کار را جهت همه نسخه های Linux انجام دهيد . يادآور شوم که شما احتياج به دريافت جديد ترين سورس Squid از وب سايت آن هستيد. سورس Squid به صورت فايل فشرده شده tar است که شما احتياج داريد ابتدا آن را غير فشرده نماييد:
zcat squid-2.3.STABLE4-src.tar.gz | tar xf -

هنگامی که شما فايل فشرده tar را غير فشرده نموديد، احتياج به تنظيم و نصب Squid به صورت زير داريد:
cd squid-2.3.STABLE4
./configure
make all
make install

جهت اطلاعات بيشتر جهت نصب آن، فايل INSTALL که در Source Code موجود است را می توانيد مورد بررسی قرار دهيد .

:: تنظيم نمودن Squid

همه تنظيمات اين Proxy Server در فايل Config آن است ( squid.conf ) که بستگی به نسخه Linux شما ممکن است در شاخه /etc/squid.conf يا /etc/squid/squid.conf باشد . قبل از انجام هرکاری بايد مسير اين فايل را در سيستم تان پيدا نماييد :
locate squid.conf

روش های متعددی جهت تنظيم نمودن Squid از طريق وب يا GUI ( واسط کاربری گرافيکی ) وجود دارد. اين GUI ها توانايی خواندن و تشخيص و نوشتن فايل Config در محل مربوطه را دارا هستند .

ما در اينجا تنظيم نمودن Squid را به صورت دستی شرح می دهيم. جهت اين کار شما به يک ويرايشگر متن مانند emacs يا ديگر نرم افزار ها احتياج داريد و اينکه فراموش نکنيد جهت انجام فرامين مربوطه، بايد از طريق ROOT وارد شويد تا دسترسی به نوشتن در فايل Config را داشته باشيد.

فايل تنظيمات Squid خود دارای پارامترهای تنظيماتی بسياری است که ما در اينجا همه آن ها را پوشش نخواهيم داد و به اصلی ترين آن ها اشاره خواهيم نمود.

:: تنظيمات پيش فرض

به صورت پيش فرض Squid همراه با فايل Config است که تقريبا جهت بيشتر سرورها صحيح و قابل استفاده است. جهت استفاده از Squid در شبکه بعنوان يک Proxy Server يک سری تنظيمات وجود دارند که بايد قبل از اينکه Squid مورد استفاده قرار گيرد، تصحيح شوند.

:: شروع تنظيمات مقدماتي

در استفاده از Squid در فايل تنظيمات آن ( squid.conf ) تعداد زيادی توضيحات (Comment) وجود دارد که قابل استفاده هستند که در اين حالت حجم فايل در حدود 76 کيلو بايت است که در صورت حذف اين کامنت ها حجم آن به 600 بايت کاهش مي يابد ! که در اين صورت ويرايش آن از طريق ويرايشگر ها آسان تر خواهد شد.

جهت تنظيمات مقدماتی در فايل Config اين پارامترها را اضافه مي کنيم :

acl privatenet src 192.168.0.0/255.255.0.0
http_access allow privatenet

cache_effective_user squid
cache_effective_group squid

نکته های قابل ذکر در اين پارامترها :

acl privatenet * . براي مثال دو شبکه Private در پشت Firewall وجود دارد که از IANA، شماره IP های 192.168.x.x به آن اختصاص داده شده است
:: نمونه هاي تنظيمات فايل تنظيمات

دقت داشته باشيد که تنظيمات اشاره شده در اينجا تنها بخش کوچکی از آن چه که شما می خواهيد با Squid انجام دهيد را شامل مي شود.

- Logging

به طور پيش فرض Squid فعاليت هاي انجام شده را در چندين Log فايل ذخيره مي کند :

cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none

با اضافه نمودن اين پارامترها Squid پيغام های خطا را در مسير /var/log/squid/cache.log و پيغام های دسترسي به سرور را در /var/log/squid/access.log ذخيره می کند که البته برنامه هايی نيز جهت آناليز access.log قابل دريافت هسنتد که از آن ها مي توان به SARG اشاره نمود ( که با نام sqmgrlog شهرت دارد )

من مطلب مفيدی را در مورد squid's cache_store_log پيدا ننمودم که از همين جهت می توان توسط خط 3 بالا آن را غير فعال نمود.

- Cache Access

شما می توانيد استفاده از Cache را در Server تان مقدور سازيد که اين کار از طريق http_access امکان پذير است. اين را مد نظر داشته باشيد که خط acl يک شبکه يا يک سيستم در شبکه را تعريف می کند .

:: اندکي در مورد Upstream Proxy

شايد يکی از برتری های Squid استفاده از Upstream Proxy باشد که مي تواند دسترسي به اينترنت تا حد قابل ملاحظه ای بالا ببرد. بعنوان مثال وقتی ISP شما دارای Cache جهت کاربرانش می باشد، Cache Server می تواند سايت های بسياري را در خود ذخيره کند که اين خود تا حد زيادی بازدهی را در مواقع ضروری بالا مي برد.

يکي ديگر از مزاياي Squid پشتيبانی به صورت چندگانه است بدين مفهوم که مي توان چندين Cache Server را با هم ارتباط داد که Squid اين کار را از طريق ICP Protocol انجام می دهد. ICP اين اجازه را به Cache Server ها می دهد که که توسط Packet های سريع UDP با هم ارتباط برقرار نمايند.

جهت استفاده از اين مزايا شما اول بايد مد نظر داشته باشيد که آدرس Cache Server ها چيست ( proxyserver.yourisp.com ) و همچنين از چه Port ای بدين منظور استفاده می کند . استفاده از Upstream Proxy به راحتی امکان پذير است :

cache_peer proxy.yourisp.com parent 3128 3130
prefer_direct off

خط cache_peer اسم Hosting و نحوه Cache کردن "parent" و پورت پراکسی "3128" و پورت ICP" 3130" را مشخص می کند. اگر کش سرور شما پروتکل ICP را پشتيبانی نمی کند از اين خط استفاده نماييد :

cache_peer proxy.yourisp.com parent 3128 7 no-query default
prefer_direct off

- Sharing Caches

توجه داشته باشيد که در مواقع ضروری که يک شرکت چندين ارتباط را جهت دسترسی به اينترنت را داشته باشد، Squid، کش نمودن در حالت مشترک را پشتيبانی ميکند.( بدين مفهوم که چندين Cache Server با هم ارتباط داشته باشند ). در اين صورت بايد هر Cache Server اين خط را در فايل تنظيمات خود داشته باشند :

cache_peer theotherproxy.yournetwork.com sibling 3128 3130

که اگر دقت نماييد يکي از پارامترها به sibling تغيير يافته بدين مفهوم که فايل هاي کش را چنانچه در کش سرور ديگر باشد، آنها را دريافت می کند .

- رد نمودن فايل های آلوده

فايل هايی وجود دارند که به ويروس نيز آلوده هستند مانند WIN-BUGFIX.EXE که مربوط به ويروس Melissa مي شد که با يک پارامتر ساده مي توان دريافت چنين فايل هايي را از سرور رد نمود.

acl nastyfile dstdom_regex -i WIN[.*]BUG[.*]EXE
http_access deny nastyfile

:: تنظيمات پيشرفته

ترنفند هايی نيز وجود دارند که شما مي توانيد جهت Web Proxy خود اعمال نماييد، مانند شناسايی کاربر و يا Transparent Proxy و يا عدم دسترسي کاربر به فايل های غير مجاز در طي ساعات اداري. اما اين را فراموش نکنيد که فايل تنظيمات Squid بسيار آسيب پذير است و با يک اشتباه کوچک، Cache Server کار نمي کند !

- شناسايی

اين مرحله يکی از مهم ترين اجزا جهت مديران شبکه است. بعنوان مثال مواقعی که شرکت شما دسترسی به اينترنت را جهت کاربر امکان پذير و يا رد مي کند.

تنظيم نمودن يک acl جهت ورود يا رد نمودن کاربر به راحتي از طريق تغيير زير در فايل تنظيمات امکان پذير است :

authenticate_program /your/authentication/program
acl validusers proxy_auth REQUIRED
http_access allow validusers

و اين را توجه داشته باشيد که يک برنامه مناسب Proxy Authentication پيدا نماييد. قابل ذکر است Squid خود دارای شناساگری به صورت داخلی نمی باشد که شما بايد در خط authenticate_program تنظيمات مناسب را بر طبق برنامه شناساگر تغيير دهيد.

البته Squid همراه با چند برنامه شناساگر نيز می باشد که ذخيره شده در /usr/lib/squid هستند که شامل smb_auth ( شناساگر جهت دومين NT ) و squid_ldap_auth ( جهت شناسايي دايرکتوري LDAP ) که در اين ميان شناساگر مورد انتحاب من pam_auth می باشد که از Library های PAM جهت شناسايی کاربران استفاده می کند .

برتری pam_auth در شناسايی کاربران در روش های متعدد است و همه برنامه های شما ( نظير XDM, Squid, Apache و .... ) بر روی آن قرار دارند ...

جهت تنظيم pam_auth ( اين روش جهت سيستم های Red Hat است ):

- فايل /etc/pam.d/squid را ايجاد نماييد که بايد اين چنين باشد :

auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth

- اطمينان حاصل نماييد که خط زير را در فايل کانفيگ Squid گنجانيده ايد:

authenticate_program /usr/lib/squid/pam_auth

- و اينکه authconfig در سرور شما اجرا شده است تا مشخص نمايد شما از چه سرور شناساگر استفاده می نماييد که مورد LDAP مناسب به نظر می رسد ...


:: Proxy به صورت Transparent

Transparent نمودن Proxy روشی است که شما می توانيد يک پرکسی سرور را بين شبکه و اينترنت بگذاريد و بدون اينکه نياز به تنظيمات خاصی باشد ما مستقيما به اينترنت وصل خواهيم گرديد ( توجه داشته باشيد که اين روش فقط برای WWW قابل اجراست و جهت سرويس FTP جواب نمی دهد ) کاربرها بايد متوجه باشند که Transparent نمودن Proxy و اضافه نمودن شناسايی که در مرحله قبل توضيح داده شد، هر دو با هم امکان پذير نيست.

جهت نصب Proxy به صورت Transparent به اين چيزها احتياج خواهيد داشت:

- يک قانون فايروال ( Rule ) و Redirect نمودن ترافيک خروجي شبکه به پرکسی سرور .

- يک قانون Squid جهت فعال کردن Squid تا اينکه به صورت Transparent عمل نمايد .

جهت اجرای يک Firewall Rule شما به Rule ای مانند زير احتياج خواهيد داشت :

/sbin/ipchains -A input -p tcp -s 0/0 -d 0/0 80 -j REDIRECT 3128

جهت iptables ( نسخه هسته 2.4 لينوکس 2.4 به بالا ) ممکن است شما مايل به نصب iptables مبني بر Firewall در Squid باشيد. در قستمی از نصب فايروال شما به ايجاد قانون DNAT جهت ارسال ترافيک بر روي پورت 80 به 3128 پرکسی سرور خواهيد داشت . برای اطلاعات بيشتر جهت ايجاد قانون های NAT می توانيد به وب سايت NET FILTER مراجعه کنيد.

تنظيمات مورد احتياج Squid جهت فعال کردن Squid به صورت Transparent در اينجا ذکر شده اند :

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on



تهیه و تنظیم: احسان امیدوار



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