تنظیم لینوکس و Squid جهت یک پراکسی وب

:: مقدمه

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

Squid خود یک پراکسی سرور ایمن با توانایی بسیار بالا است که قابلیت استفاده بعنوان کش سرور را نیز داراست و یکی از کاربردی ترین کش سرورها در

شبکه اینترنت است
:: نصب لینوکس

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

:: نصب Squid

– نصب از طریق بسته‌های نرم‌افزاری

توجه داشته باشید که معمولا بیشتر نسخه های لینوکس دارای یک بسته Squid به صورت آماده و قابل نصب هستند که ممکن است در موقعی که نسخه لینوکس شما نصب می شود نصب نگردد . بعنوان مثال بعد از نصب ردهت ۷٫۱ شما متوجه می شوید که Squid نصب نگردیده است . خود Squid در CD #2 در فولدر RedHat/RPMS قرار گرفته است . جهت نصب ان ابتدا اطمینان حاصل نمایید که شما بعنوان کاربر ریشه وارد شده اید سپس از فرمان rpm به صورت زیر استفاده کنید:

mount /mnt/cdrom
rpm -Uhv /mnt/cdrom/RedHat/RPMS/squid-*.rpm
umount /mnt/cdrom

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

apt-get install squid

– نصب از طریق کد منبع

اگر شما مایل به نصب Squid از طریق فایل های کد منبع آن هستید، می‌توانید این کار را در تمامی نسخه های لینوکس انجام دهید. یادآور می‌شوم که شما نیاز دارید تا جدیدترین نسخه پایدار Squid را از وب سایت آن دریافت نمایید. سورس Squid به صورت فایل فشرده شده tar است که شما احتیاج دارید ابتدا آن را غیر فشرده نمایید :

Tar -zxf squid-2.3.STABLE4-src.tar.gz

هنگامی که شما فایل فشرده tar را غیر فشرده نمودید شما از این طریق احتیاج به تنظیم، کامپایل و نصب Squid دارید:

cd squid-2.3.STABLE4
./configure
make all
make install

جهت اطلاعات بیشتر جهت نصب آن فایل INSTALL را که در کد منبع Squid موجود است را مطالعه نمایید. البته به یاد داشته باشید که همیشه آسان‌ترین راه برای نصب Squid استفاده از بسته‌های نرم‌افزاری آماده آن است.

:: تنظیم Squid

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

locate squid.conf

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

خوب ما در اینجا تنظیم نمودن Squid را به صورت دستی شرح می دهیم . جهت این کار شما یک ویرایش گر متن مانند emacs یا دیگر نرم افزار ها احتیاج دارید و اینکه فراموش نکنید جهت انجام فرامین مربوطه شما باید ابصورت کاربر ریشه وارد سیستم شوید تا دسترسی به نوشتن در فایل پیکربندی را داشته باشید.

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

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

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

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

هنگام تنظیم Squid در فایل پیکربندی آن ( squid.conf ) تعداد زیادی توضیح وجود دارد که قابل استفاده هستند.در این حالت حجم فایل در حدود ۷۶ کیلو بایت است که در صورت حذف این توضیحات حجم آن به ۶۰۰ بایت کاهش می یابد! که در این صورت ویرایش آن از طریق ویرایش گر ها آسان تر خواهد شد. البته وجود این توضیحات می‌تواند کمک بزرگی برای تنظیم کننده باشد.

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

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 * . برای مثال دو شبکه خصوصی در پشت فایروال وجود دارد که از IANA در شماره های ۱۹۲٫۱۶۸٫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 پیدا نکردم که از همین جهت می توان توسط خط ۳ بالا آن را غیر فعال نمود .

– Cache Access

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

:: اندکی در مورد Upstream *****

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

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

خوب جهت استفاده از این مزایا شما اول باید مد نظر داشته باشید که آدرس کش سرور ها چیست ( *****server.yourisp.com ) و هم چنین از چه پورتی بدین منظور استفاده می کند . استفاده از Upstream ***** به راحتی امکان پذیر است :

cache_peer *****.yourisp.com parent 3128 3130
prefer_direct off

خط cache_peer اسم هاستینگ و نوع کشینگ “parent” و پورت پراکسی “۳۱۲۸” و پورت ICP” 3130″ را مشخص می کند . اگر کش سرور شما پروتکل ICP را پشتیبانی نمی کند از این خط استفاده نمایید :

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

– Sharing Caches

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

cache_peer theother*****.yournetwork.com sibling 3128 3130

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

– رد نمودن فایل های آلوده

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

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

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

ترنفند هایی نیز وجود دارند که شما می توانید جهت وب پراکسی خود اعمال نمایید مانند شناسایی کاربر و یا پراکسی ترانسپرنت و یا عدم دسترسی کاربر به فایل های غیر مجاز در طی ساعات اداری . اما این را فراموش نکنید که فایل پیکربندی Squid بسیار آسیب پذیر است و با یک تنظیم ناصحیح کوچک کش سرور کار نمی کند!

– احراز هویت کاربران

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

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

authenticate_program /your/authentication/program
acl validusers *****_auth REQUIRED
http_access allow validusers

و این را توجه داشته باشید که یک برنامه مناسب شناساگر پراکسی پیدا نمایید ( ***** authentication ) که قابل ذکر است Squid خود دارای شناساگری به صورت داخلی نمی باشد که شما باید در خط authenticate_program تنظیمات مناسب را بر طبق برنامه احراز هویت مورد استفاده، تغییر دهید.

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

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

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

– فایل 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 مناسب به نظر می رسد …

:: پراکسی به صورت ترانسپرنت

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

جهت نصب پراکسی به صورت ترانسپرنت شما به این موارد نیاز خواهید داشت :

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

– یک قانون Squid جهت فعال کردن Squid تا اینکه به صورت ترانسپرنت عمل نماید .

جهت اجرای یک قانون فایروال شما به قانونی نظیر زیر احتیاج خواهید داشت :

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

جهت iptables ( هسته ۲٫۴ لینوکس ۲٫۴ به بالا ) ممکن است شما مایل به نصب iptables مبنی بر فایروال در Squid باشید . در قستمی از نصب فایروال شما به ایجاد قانون DNAT جهت ارسال ترافیک بر روی پورت ۸۰ به ۳۱۲۸ پراکسی سرور خواهید داشت . برای اطلاعات بیشتر جهت ایجاد قانون های NAT می توانید به وب سایت NET FILTER مراجعه کنید .

تنظیمات مورد نیاز Squid جهت فعال کردن Squid به صورت ترانسپرنت در اینجا ذکر شده اند :

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_***** on
httpd_accel_uses_host_header on

لینک منبع مقاله : وب هاستینک تالک

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.