پیکربندی سرویس squid در لینوکس

پیکربندی سرویس squid در لینوکس

Squid چيست ؟

Squid براساس پروژه اي بنام  Harvest در اواخر دهـه ۱۹۹۰تـهـيـه شـده كه مـبناي آن ايجاد يك سيستم توسعه يافته Cache Daemon بوده و در حال حاضر تـحـت مـجـوز عمومي گنو (GNU/GPL) و توسط آزمـايـشـگـاه NLANR و دانـشـگاهي در آمريكا پشتيباني و توزيع مي شود. وب سايت اصلي آن به آدرس www.squid-cache.org شامل مـسـتـنـدات، آخرين نـگـارشـهـا و كـد اصـلي برنامه ميباشد. در حال حــاضر نـسـخـه Version 3.0.stable6موجود بوده و ميتوانيد آنرا از وب سايت اصلي دانلود كنيد.

نصب Squid : پس از دريافت نسخه مورد نظر و با دستورات زير نصب ميگردد :

    # tar  xzf  squid*.tar.gz

    # cd  squid*

    # ./configure

    # make

    # make  install

كاربردهاي Squid

۱- Squid يك سرويس دهـنـده پراكسي با قابليت Caching براي سرويس گيرنده هاي وب مي باشد كه امكان Support پروتـكلهاي HTTP,FTP,SSL را در صفحات وب دارد. اسـتـفـاده از اين قابليت موجـب استفاده بهينه از پهناي باند خطوط ارتباطي موجود و نيز افزايش كارآيي و سرعت سرويس دهنده هاي وب  ميگردد.

۲- با اسـتـفاده از Squid ميتوان نسبت به انجام عـمـلـيات WEB Publishing جـهـت سرويس دهنده هاي وب موجود در شبكه محلي اقدام نمود، البته بـتـرتـيـبـي كه بـتوان امنيت سرويس دهنده را تامين كرد.

۳- Squid ميتواند فقط به عنوان يك WEB Proxy عمل كند، بترتيبي كه دسترسي به اينترنت براي كاربران و ميزبانهاي موجود در شبكه محلي فراهم گردد.

۴- كنترل مصرف پهناي باند و ترافيك اينترنتي با استفاده از ابزارهاي موجود

۵- امكان گرفتن گزارشات آماري و نموداري با استفاده از MRTG,SNMP

 

پيكربندي و چگونگي كار با Squid

پس از نصب Squid مـيـتـوانـيـم از دستورات زير جـهـت اجرا، تـوقف و راه اندازي مجدد سرويس دهنده Squid استفاده كنيم :

# service  squid  start

# service  squid  stop

# service  squid  restart

براي اينكه سرويس دهنده Squid به طور خودكار اجرا شود از دستور زير كمك ميگيريم :

# chkconfig  –level  ۳۴۵  squid on

براي پـيـكربـنـدي Squid بايد فـايـل /etc/squid/squid.conf را ويرايش نماييم. در مـســير مذكور فايل ديگري به نـام squid.conf.default  نيز وجـود دارد كه قـابـلـيـت اجرايي ندارد و همه تـنـظيمات اصلي در فايل squid.conf به همراه توضيحات بسيار زياد در مورد چگونگي كار با برچسب هاي يا پارامترهاي آن قرار دارد.

Squid Command Line

پس از نصب Squid مـيـتـوانـيـم تعدادي از دستورات خطي مرتبط را بوسيله فايل اجرايي squid كه در مسير /sbin قرار دارد، اجرا كنيم :

# squid  –z

قبل از اينكه براي اولين بار Squid را اجرا كنيم و يا وقتي كه يك Cache Directory جديد ميسازيم

# squid  –a  ۸۰۸۰

تعريف يك مقدار جديد براي برچسب http_port

# squid  –k  parse

براي Verify نمودن فايل squid.conf قبل از اجراي برنامه به صورت Daemon

تعدادي از برچسب هاي فايل squid.conf

http_port  ۳۱۲۸

شماره Port كه سرويس دهنده از طريق آن به درخواستهاي Client ها گوش ميدهد

cache_dir

cache_dir ufs /var/spool/squid 100 16  ۲۵۶

محل قرار گرفتن Cache اصلي سرويس دهنده Squid ، نوع و اندازه آن

maximum_object_size  ۴۰۹۶  KB

حداكثر اندازه Object كه ميتواند روي Cache ذخيره شود

access_log  /var/log/squid/access.log

cache_log  /var/log/squid/cache.log

cache_store_log  /var/log/squid/store.log

محل قرار گرفتن فايلهاي ثبت رخدادهاي سرويس دهنده Squid را نشان ميدهد

سطوح دسترسي

http_access (allow | deny ) [!] aclname

http_access allow mylan

   allow safe_port

 deny dwnlod

 deny all

كنترل دسترسي يا Access Controls

مـهـمـتـرين بخـش فـايل پيكربندي Squid مي باشد. با توجه به اينكه Squid بـعنوان يك رابط بين سرويس دهنده وب و سـرويـس گيرنده ها عمل مـيـكـند، ميتوان با پياده سازي يك سـيـسـتم مناسب دستيابي، كنترلهاي مورد نياز را ايجاد كرد. براي اين منظور بايد :

۱- ايجاد Access Control List هاي مورد نياز از عناصري كه بايد كنترل شوند

۲- ايجاد Access Control Rule مناسب جهت انجام عمل مورد نظر روي ACL ها

چند مثال :

acl  mynetwork  src  ۱۹۲٫۱۶۸٫۰٫۰/۲۵۵٫۲۵۵٫۲۵۵٫۰

http_access  allow  mynetwork

ايجاد گروهي بنام mynetwork براي شبكه محلي ۱۹۲٫۱۶۸٫۰٫۰/۲۴ و اجازه دادن به Client هاي موجود در مــحدوده مورد نظر جهت دسترسي به وب ايـنـتـرنـت با استـفاده از سرويس دهنده پراكسي Squid

acl  myblock  dstdomain  .mysurf.com  .beach.com

http_access  deny  myblock

محدوديت در دسترسي به سايتها و ميزبانهاي دامنه هاي yahoo.com و google.com

acl  mynet  src  ۱۹۲٫۱۶۸٫۰٫۰/۲۴

acl  all  src  ۰٫۰٫۰٫۰/۰٫۰٫۰٫۰

http_access  allow  mynet

http_access  deny  all

دسترسي به وب اينترنت براي كاربران شبكه محلي در محدوده آدرس تعريف شده و مسدود نمودن ساير درخواست هاي دسترسي

سه نوع پيكربندي متداول Squid

۱- Direct Proxy : به صورت پيش فرض Squid در اينMode پيكربندي شده است و براي كار با آن علاوه بر دادن مجوز دسـترسـي به وب ايـنـتـرنت براي كاربران شبكه محلي مورد نظر (اضافه كردن ACL و Rule مناسب در فايل squid.conf)، ميبايستي مرورگر وب كاربران مورد نظر تنطيم گردد.

براي اين منظور در بخش تنظيمات Proxy Server مرورگر، بايد آدرس پراكسي سرور و Port مربوطه را تنظيم نمود.

۲- Transparent Proxy : در اين حالت نيازي به تـنـظـيـم مرورگرهاي وب كـاربـران نيست و بدون اينكه آنها متوجه شوند ميتوانند از سرويس پراكسي اسـتـفاده كنند. بنابراين بايد دو كار انجام دهيم، اول بايد با اضافه كردن يك قانون به Firewall سيستم، ترافيك عبوري شبكه كه مربوط به درخواست ديدن صـفـحات وب ميباشد را به پراكسي سرور ارسال كنيم

# iptables  -t  nat  -A  PREROUTING  -i  eth0  -p  tcp  –dport    ۸۰  -j  REDIRECT  –to-port  ۳۱۲۸

iptables

در مرحله بعدي تنظيم و پيکربندي، بايد اشتراک اينترنت و تنظيمات iptables را براي transparent proxy انجام دهيم. براي اين کار ميتوان از يک اسکريپت ساده مانند زير استفاده کرد:

#!/bin/sh

IPTABLES=/sbin/iptables

$IPTABLES -F

$IPTABLES -t nat -A PREROUTING -i lan1 -p tcp –dport 80 -j REDIRECT –to-port 8080

$IPTABLES -A POSTROUTING -t nat -o ppp0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

echo Starting Internet Connection Sharing…

کافي است اين اسکريپت را در شاخه /etc/init.d با نامي مانند ics ذخيره کرده و آنرا با chmod +x اجرايي کنيد. سپس براي اينکه در هنگام بوت اجرا شود، از دستور زير استفاده نماييد:

# ln -s /etc/init. d/ics /etc/rc2. d/S99ics

از اين پس هنگام بوت سيستم (سطح اجرايي ۲ در دبيان) اسکريپت ics اجرا خواهد شد

دوم علاوه بر اضافه كردن ACL و Rule مناسب در فايل squid.conf بايد گزينه هاي زير در فايل پيكربندي مذكور تنظيم گردد

httpd_accel_host  virtual

httpd_accel_port  ۸۰

httpd_accel_with_proxy  on

httpd_accel_uses_host_header  on

۳- Reverse Proxy : براي كاهش ترافـيـك و Load روي يك سرويـس دهنده وب و افزايش سرعت آن استـفـاده ميشود. براي اين منظور بايد گزينه هاي زير در فايل پيكربندي Squid تنظيم گردد

httpd_port  ۸۰     ,     httpd_accel_port  ۸۰

httpd_accel_host  Hostname of Web Server

httpd_accel_single_host  on

httpd_accel_with_proxy  on

ساير كاربردهاي Squid

۱- Squid قابليت استفاده از سيـستـمهاي Authentication مختلف را دارد. برنامه هاي سـيـسـتـمـهاي احراز هويتي كه Squid ميتواند با آنها كار كند در مسير /usr/lib/squid قرار دارند نظير PAM و LDAP و SMB

۲- امكان گزارشـگـيـري نـمـوداري به شكل گراف از وضـعـيت تـرافـيـكي سرويس دهنده Squid با استفاده از ابزارهاي MRTG  و SNMP

۳- استفاده از ويژگي Delay Pools جهت كنترل مصرف پهناي باند اينترنتي با استفاده از گزينه هاي delay_pools و تعريف كلاسهاي مورد نظر در فايل پيكربندي Squid

۴- پـشـتـيـبـاني از پـروتـكـل (Internet Cache Protocol) ICP براي ارتـبــاط با Cache Server هاي ديگر از نوع Squid و يا حتي Microsoft

يك مثال ساده از squid.conf

http_port 3128

cache_mem 16 MB

maximum_object_size 4096 KB

maximum_object_size_in_memory 8 KB

cache_dir ufs /var/spool/squid 100 16 256

access_log /var/log/squid/access.log squid

cache_log /var/log/squid/cache.log

cache_store_log /var/log/squid/store.log

acl mylan src 200.0.0.0/24

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 to_localhost dst 127.0.0.0/8

acl Safe_ports port 80          # http

acl Safe_ports port 21          # ftp

acl Safe_ports port 443         # https

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 SSL_ports port 443

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 mylan

http_access allow localhost

http_access deny all

http_reply_access allow all

مزاياي squid در چيست؟

Proxy Cache

Open source

High performance

Support ftp, gopher, http

Support SSL

Support non-blocking DNS lookup

Full logging

Works on variety of platforms

Run as a single, non-blocking, i/o driven process

Can be arranged in hierarchy or mesh structure

Squid : نحوه کار

به دو روش مي‌تواند در پهناي باند صرفه جويي نمايد:

—نخست از طريق حفظ صفحات، تصاوير و ساير اقلام دريافت شده بر روي حافظه يا فضاي ديسک. بنابراين در صورتي که کاربران تقاضاي دريافت مجدد يک صفحه تکراري را نمايند، اين صفحه از روي اينترنت دريافت نخواهد شد.

—در کنار سيستم caching معمولي، داراي قابليت ديگري به نام delay pool است که از طريق آن مي‌توانيد ترافيک اينترنت را بطور معقولانه اي کنترل نماييد. اين کار از طريق تعريف کلمات کليدي موجود در آدرسهاي url انجام مي‌گردد؛ براي مثال مي‌توانيد کلماتي مانند mp3، mpg، exe و. . . را بعنوان کلمات کليدي تعريف نماييد، با استفاده از اين کلمات کليدي، مي‌توانيم به squid بگوئيم تا آنها را حداکثر با سرعت خاصي دريافت نمايد، مي‌توان پهناي باقيمانده را براي سرويسهاي ديگر مانند مرور وب، پست الکترونيکي و. . . باقي گذاشت و يا حتي آنرا نيز محدود کرد.

 

اين سرويس يك فايل تنظيمات روي مسير /etc/squid/squid. conf ايجاد مي‌کند.

log استاندارد اين سرويس روي مسير/var/log/squid/قرار دارد.

—Log files on squid

—Access log : تمامي فعاليت كاربران در اين مسير قرار ميگيرد.

—اگر كاربران با user , password به squid وصل شوند فعاليتشان بر اساس كلمه كاربري ذخيره ميشود. از اينرو گزارشهائي بر اساس اينكه كدام كاربر بيشترين استفاده را از شبكه داشته يا كدام سايت بيشترين بازديد را داشته و. . . را مي‌توان استخراج نمود.

—Cache. log : براي اين است كه ببينيم سرويس ما الان چه كار ميكند. كدام obj را ذخيره كرده كدام را پاك كرده و در كل خطاها و وقايع داخلي سرويس در اين جاست.

—Store. log : در واقع بانك اطلاعاتي براي index هاي سرويس است. بايد مواظب بود تا اين بانك بهم نريزد كه در اين صورت cache اي در كار نيست.

زماني كه squid در حال كار است index ها در حافظه قرار دارد حال اگر سرويس بهر نحو reset شد بايد اين index را دوباره بسازد که در اين حالت از اين فايل‌ها استفاده ميكند.

Spool

—Squid نمي تواند يك page را كامل ذخيره كند.
page مزبور را به obj هايي شكسته و با تكنيك Btree ذخيره ميكند. جايي كه اين obj ها در آن ذخيره مي‌شود spool  ناميده مي‌شود و در مسير /var/spool/squid قرر دارد

این مطالب رو هم پیشنهاد می‌کنیم ببینید

درباره نویسنده: mrz.rst

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *