squid - دستور مربوط به پروکسی سرور اسکویید

دستور squid برای کنترل پروسس پروکسی سرور squid  (مثلا فرستادن سیگنال های مختلف به آن) و انجام بعضی تغییرات در تنظیمات اون استفاده میشود .

من برای نوشتن این اموزش از  squid Version 3.1.19 استفاده میکنم برای همین دستوری  که در طی اموزش استفاده می شود squid3 هستش. اگر از squid نسخه 2 استفاده می کنین دستور squid رو به جایsquid3 استفاده کنین .

اگر هم که squid رو از سورس کامپایل کردین که بدون در نظر گرفتن نسخه کامپایل شده دستور مورد استفاده squid خواهد بود .

 

اپشن های دستور squid

v-: برای دیدن نسخه squid و اپشن هایی که موقع کامپایل کردن اسکویید استفاده شده است.

در زیر قسمتی از خروجی امده :

aliabry@lp:~$ squid3 -v
Squid Cache: Version 3.1.19
configure options:  '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=/usr/share/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--with-cppunit-basedir=/usr' '--enable-inli

 

z-: برای ساخت دایرکتوری کشمون مورد استفاده قرار می گیرد .

در خروجی زیر صفحه اول دایرکتوری کشمون 16 دایرکتوری داشته .

aliabry@lp:~$ sudo squid3 -z
2013/08/02 16:30:49| Creating Swap Directories
2013/08/02 16:30:49| /var/squid-cache exists
2013/08/02 16:30:49| Making directories in /var/squid-cache/00
2013/08/02 16:30:49| Making directories in /var/squid-cache/01
2013/08/02 16:30:49| Making directories in /var/squid-cache/02
2013/08/02 16:30:49| Making directories in /var/squid-cache/03
2013/08/02 16:30:49| Making directories in /var/squid-cache/04
2013/08/02 16:30:49| Making directories in /var/squid-cache/05
2013/08/02 16:30:49| Making directories in /var/squid-cache/06
2013/08/02 16:30:49| Making directories in /var/squid-cache/07
2013/08/02 16:30:49| Making directories in /var/squid-cache/08
2013/08/02 16:30:49| Making directories in /var/squid-cache/09
2013/08/02 16:30:49| Making directories in /var/squid-cache/0A
2013/08/02 16:30:49| Making directories in /var/squid-cache/0B
2013/08/02 16:30:49| Making directories in /var/squid-cache/0C
2013/08/02 16:30:49| Making directories in /var/squid-cache/0D
2013/08/02 16:30:49| Making directories in /var/squid-cache/0E
2013/08/02 16:30:49| Making directories in /var/squid-cache/0F

 

f-: برای تعیین فایل کانفیگی به جز فایل کانفیک پیش فرض squid  :

aliabry@lp:~$ sudo squid3 /etc/squid-test.conf

 

d-:

وقتی از دستور squid3 به تنهایی استفاده میکنیم فقط اخطار ها و ارور هارو بهمون نشون میده . خروجی زیر رو نگاه کنین , در زیر یک اشتباه در فایل کانفیگمون داریم :

aliabry@lp:~$ sudo squid3
2013/08/02 16:42:23| cache_cf.cc(381) parseOneConfigFile: squid.conf:3 unrecognized: 'memory_cache_mode'

اگر بخواهیم ببینیم که اسکویید در موقع اجرا شدن چه عملیات هایی رو انجام میده میتونیم از اپشن d- به همراه یک عدد استفاده کنیم که هرچه عدد بزرگتر مقدار خروجی هم بیشتر میشود (مقدار debug افزایش پیدا میکند). (در تستایی که خودم انجام دادم عدده تاثیری تو خروجی نداشت D: )

aliabry@lp:~$ sudo squid3 -d 2
aliabry@lp:~$ 2013/08/02 16:46:26| Starting Squid Cache version 3.1.19 for x86_64-pc-linux-gnu...
2013/08/02 16:46:26| Process ID 5072
2013/08/02 16:46:26| With 1024 file descriptors available
2013/08/02 16:46:26| Initializing IP Cache...
2013/08/02 16:46:26| DNS Socket created at [::], FD 7
2013/08/02 16:46:26| DNS Socket created at 0.0.0.0, FD 8
2013/08/02 16:46:26| Adding nameserver 4.2.2.4 from /etc/resolv.conf
2013/08/02 16:46:26| Adding nameserver 8.8.8.8 from /etc/resolv.conf
2013/08/02 16:46:27| Unlinkd pipe opened on FD 13
2013/08/02 16:46:27| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2013/08/02 16:46:27| Store logging disabled
2013/08/02 16:46:27| Swap maxSize 409600 + 51200 KB, estimated 35446 objects
2013/08/02 16:46:27| Target number of buckets: 1772
2013/08/02 16:46:27| Using 8192 Store buckets
2013/08/02 16:46:27| Max Mem  size: 51200 KB
2013/08/02 16:46:27| Max Swap size: 409600 KB
2013/08/02 16:46:27| Version 1 of swap file with LFS support detected...
2013/08/02 16:46:27| Rebuilding storage in /var/squid-cache (DIRTY)
2013/08/02 16:46:27| Using Least Load store dir selection
2013/08/02 16:46:27| Set Current Directory to /var/spool/squid3
2013/08/02 16:46:27| Loaded Icons.
2013/08/02 16:46:27| Accepting  HTTP connections at [::]:80, FD 18.
2013/08/02 16:46:27| Accepting  HTTP connections at [::]:3128, FD 19.
2013/08/02 16:46:27| HTCP Disabled.
2013/08/02 16:46:27| Squid plugin modules loaded: 0
2013/08/02 16:46:27| Adaptation support is off.
2013/08/02 16:46:27| Ready to serve requests.
2013/08/02 16:46:27| Done reading /var/squid-cache swaplog (0 entries)
2013/08/02 16:46:27| Finished rebuilding storage from disk.
2013/08/02 16:46:27|         0 Entries scanned
2013/08/02 16:46:27|         0 Invalid entries.
2013/08/02 16:46:27|         0 With invalid flags.
2013/08/02 16:46:27|         0 Objects loaded.
2013/08/02 16:46:27|         0 Objects expired.
2013/08/02 16:46:27|         0 Objects cancelled.
2013/08/02 16:46:27|         0 Duplicate URLs purged.
2013/08/02 16:46:27|         0 Swapfile clashes avoided.
2013/08/02 16:46:27|   Took 0.00 seconds (  0.00 objects/sec).
2013/08/02 16:46:27| Beginning Validation Procedure
2013/08/02 16:46:27|   Completed Validation Procedure
2013/08/02 16:46:27|   Validated 25 Entries
2013/08/02 16:46:27|   store_swap_size = 0
2013/08/02 16:46:28| storeLateRelease: released 0 objects

 

X-:  اگر از این اپشن استفاده کنیم squid3 بهمون تمامی عملیات هایی که squid در موقع اجرا شدن در هر مرحله انجام میده رو نشون میده . مثلا خروجی زیر رو ببینین :

در زیر قسمتی از خروجی امده :

در خروجی زیر قسمتی که قرمز شده رو در نظر بگیرید , همون طور که میبینین تمام عملیات هایی که squid بعد از خوندن یک اپشن انجام میدهد رو برامون لیست کرده . همین عمل برای acl ها نیز هنجام میشه.

aliabry@lp:~$ sudo squid3 -X
2013/08/02 17:04:42.461| command-line -X overrides: ALL,7
2013/08/02 17:04:42.461| CacheManager::registerAction: registering legacy mem
2013/08/02 17:04:42.461| CacheManager::findAction: looking for action mem
2013/08/02 17:04:42.461| Action not found.
2013/08/02 17:04:42.461| CacheManager::registerAction: registered mem
2013/08/02 17:04:42.461| CacheManager::registerAction: registering legacy diskd
2013/08/02 17:04:42.461| CacheManager::findAction: looking for action diskd
2013/08/02 17:04:42.461| Action not found.
2013/08/02 17:04:42.461| CacheManager::registerAction: registered diskd
2013/08/02 17:04:42.461| CacheManager::registerAction: registering legacy squidaio_counts
2013/08/02 17:04:42.461| CacheManager::findAction: looking for action squidaio_counts
2013/08/02 17:04:42.461| Action not found.
2013/08/02 17:04:42.461| CacheManager::registerAction: registered squidaio_counts
2013/08/02 17:04:42.461| Detected IPv6 hybrid or v4-mapping stack...
2013/08/02 17:04:42.461| IPv6 transport Enabled
2013/08/02 17:04:42.461| cf_parser.cci(2612) free_all:
2013/08/02 17:04:42.461| aclDestroyACLs: invoked
2013/08/02 17:04:42.461| ACL::Prototype::Registered: invoked for type src
2013/08/02 17:04:42.461| ACL::Prototype::Registered:    yes
2013/08/02 17:04:42.461| ACL::FindByName 'all'
2013/08/02 17:04:42.461| ACL::FindByName found no match
2013/08/02 17:04:42.461| aclParseAclLine: Creating ACL 'all'
2013/08/02 17:04:42.462| ACL::Prototype::Factory: cloning an object for type 'src'
2013/08/02 17:04:42.462| aclIpParseIpData: all
2013/08/02 17:04:42.462| aclIpParseIpData: magic 'all' found.
2013/08/02 17:04:42.462| Processing Configuration File: /etc/squid3/squid.conf (depth 0)
2013/08/02 17:04:42.462| Processing: cache_mem 50 MB
2013/08/02 17:04:42.462| Processing: maximum_object_size_in_memory 100 KB
2013/08/02 17:04:42.462| Processing: cache_dir diskd /var/squid-cache 400 16 256 Q1=64 Q2=72
2013/08/02 17:04:42.462| file_map_create: creating space for 16384 files
2013/08/02 17:04:42.462| --> 256 words of 8 bytes each
2013/08/02 17:04:42.462| SwapDir::parseOptions: parsing store option 'Q1'='64'
2013/08/02 17:04:42.462| SwapDir::parseOptions: parsing store option 'Q2'='72'
2013/08/02 17:04:42.462| Processing: minimum_object_size 0 KB
2013/08/02 17:04:42.462| Processing: maximum_object_size 96 MB
2013/08/02 17:04:42.462| Processing: cache_swap_low 90
2013/08/02 17:04:42.462| Processing: cache_swap_high 97
2013/08/02 17:04:42.462| Processing: acl local-cache dst 172.16.134.164
2013/08/02 17:04:42.462| ACL::Prototype::Registered: invoked for type dst
2013/08/02 17:04:42.462| ACL::Prototype::Registered:    yes
2013/08/02 17:04:42.462| ACL::FindByName 'local-cache'
2013/08/02 17:04:42.462| ACL::FindByName found no match
2013/08/02 17:04:42.462| aclParseAclLine: Creating ACL 'local-cache'
2013/08/02 17:04:42.462| ACL::Prototype::Factory: cloning an object for type 'dst'
2013/08/02 17:04:42.462| aclIpParseIpData: 172.16.134.164
2013/08/02 17:04:42.462| aclIpParseIpData: Lookup Host/IP 172.16.134.164
2013/08/02 17:04:42.462| aclIpParseIpData: Located host/IP: '172.16.134.164'
2013/08/02 17:04:42.462| 172.16.134.164 --> 172.16.134.164
2013/08/02 17:04:42.462| aclIpParseIpData: Duplicate host/IP: '172.16.134.164' dropped.
2013/08/02 17:04:42.462| aclIpParseIpData: Duplicate host/IP: '172.16.134.164' dropped.
2013/08/02 17:04:42.462| Processing: cache deny local-cache
2013/08/02 17:04:42.462| aclParseAclList: looking for ACL name 'local-cache'
2013/08/02 17:04:42.463| ACL::FindByName 'local-cache'
2013/08/02 17:04:42.463| Processing: strip_query_terms on
2013/08/02 17:04:42.463| Processing: http_port 80 name=local-nat
2013/08/02 17:04:42.463| http(s)_port: found Listen on Port: 80
2013/08/02 17:04:42.463| http(s)_port: found Listen on wildcard address: *:80
2013/08/02 17:04:42.463| Processing: acl special-local-port myportname local-nat
2013/08/02 17:04:42.463| ACL::Prototype::Registered: invoked for type myportname
2013/08/02 17:04:42.463| ACL::Prototype::Registered:    yes
2013/08/02 17:04:42.463| ACL::FindByName 'special-local-port'
2013/08/02 17:04:42.463| ACL::FindByName found no match
2013/08/02 17:04:42.463| aclParseAclLine: Creating ACL 'special-local-port'
2013/08/02 17:04:42.463| ACL::Prototype::Factory: cloning an object for type 'myportname'
2013/08/02 17:04:42.463| Processing: http_access allow special-local-port
2013/08/02 17:04:42.463| aclParseAclList: looking for ACL name 'special-local-port'
2013/08/02 17:04:42.463| ACL::FindByName 'special-local-port'
2013/08/02 17:04:42.463| Processing: http_access deny all
2013/08/02 17:04:42.463| aclParseAclList: looking for ACL name 'all'

 

N- : بعضی اوقات می خواهیم که squid به عنوان یک سرویس اجرا نشه , بلکه به صورت یک پروسس معمولی اجرا بشه که می تونیم پروسس اون رو با دستور Ctrl+C از بین ببریم.

aliabry@lp:~$ sudo squid3 -N

 

k-: به وسیله این اپشن می تونیم سیگنال های مختلفی رو به پروسس اسکویید بفرستیم و یا عملیات هایی رو رویه فایل کانفیگ اون انجام بدیم .

parse : به وسیله کلمه کلیدی parse به squid3 می گیم که فایل کانفیگمون رو تجزیه کند. هم چنین این اپشن برای اطلاع رسانی از تغییراتی که در نسخه های مختلف squid وقتی که داریم squid مون رو اپدیت یا اپگرید میکنیم هم استفاده می شود.

در زیر اروری در فایل کانفیگمون نداشتیم

aliabry@lp:~$ sudo squid3 -k parse
2013/08/02 17:24:03| Processing Configuration File: /etc/squid3/squid.conf (depth 0)
2013/08/02 17:24:03| Processing: cache_mem 50 MB
2013/08/02 17:24:03| Processing: maximum_object_size_in_memory 100 KB
2013/08/02 17:24:03| Processing: cache_dir diskd /var/squid-cache 400 16 256 Q1=64 Q2=72
2013/08/02 17:24:03| Processing: minimum_object_size 0 KB
2013/08/02 17:24:03| Processing: maximum_object_size 96 MB
2013/08/02 17:24:03| Processing: cache_swap_low 90
2013/08/02 17:24:03| Processing: cache_swap_high 97
2013/08/02 17:24:03| Processing: acl local-cache dst 172.16.134.164
2013/08/02 17:24:03| Processing: cache deny local-cache
2013/08/02 17:24:03| Processing: strip_query_terms on
2013/08/02 17:24:03| Processing: http_port 80 name=local-nat
2013/08/02 17:24:03| Processing: acl special-local-port myportname local-nat
2013/08/02 17:24:03| Processing: http_access allow special-local-port
2013/08/02 17:24:03| Processing: http_access deny all
2013/08/02 17:24:03| Processing: acl manager proto cache_object
2013/08/02 17:24:03| Processing: acl localhost src 127.0.0.1/32 ::1
2013/08/02 17:24:03| Processing: acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
2013/08/02 17:24:03| Processing: acl SSL_ports port 443
2013/08/02 17:24:03| Processing: acl Safe_ports port 80        # http
2013/08/02 17:24:03| Processing: acl Safe_ports port 21        # ftp
2013/08/02 17:24:03| Processing: acl Safe_ports port 443        # https
2013/08/02 17:24:03| Processing: acl Safe_ports port 70        # gopher
2013/08/02 17:24:03| Processing: acl Safe_ports port 210        # wais
2013/08/02 17:24:03| Processing: acl Safe_ports port 1025-65535    # unregistered ports
2013/08/02 17:24:03| Processing: acl Safe_ports port 280        # http-mgmt
2013/08/02 17:24:03| Processing: acl Safe_ports port 488        # gss-http
2013/08/02 17:24:03| Processing: acl Safe_ports port 591        # filemaker
2013/08/02 17:24:03| Processing: acl Safe_ports port 777        # multiling http
2013/08/02 17:24:03| Processing: acl CONNECT method CONNECT
2013/08/02 17:24:03| Processing: http_access allow manager localhost
2013/08/02 17:24:03| Processing: http_access deny manager
2013/08/02 17:24:03| Processing: http_access deny !Safe_ports
2013/08/02 17:24:03| Processing: http_access deny CONNECT !SSL_ports
2013/08/02 17:24:03| Processing: http_access allow localhost
2013/08/02 17:24:03| Processing: http_access deny all
2013/08/02 17:24:03| Processing: http_port 3128
2013/08/02 17:24:03| Processing: coredump_dir /var/spool/squid3
2013/08/02 17:24:03| Processing: refresh_pattern ^ftp:        1440    20%    10080
2013/08/02 17:24:03| Processing: refresh_pattern ^gopher:    1440    0%    1440
2013/08/02 17:24:03| Processing: refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
2013/08/02 17:24:03| Processing: refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
2013/08/02 17:24:03| Processing: refresh_pattern .        0    20%    4320
aliabry@lp:~$

 

reconfigure : با این اپشن به squid می گویم که فایل کانفیگ خودش رو از نو باز خوانی کند. فرض کنین که اسکویید در حال اجرا هست و شما تغییری در فایل کانفیگش انجام دادین و بدون این که squid رو رستارت کنین می خواهین که تنظیمات جدید در اون اعمال بشه خوب به راحتی میتونین از این اپشن استفاده کنین .

aliabry@lp:~$ sudo squid3 -k reconfigure

shutdown : برای از کار انداختن سرویس squid مورد استفاده قرار میگیرد . در این اپشن به تمام پروسس های مربوط به squid اجازه داده میشه تا کار خودشون رو به اتمام برسونن و بعد پروسس مربوطه ازبین رود و اجازه می دهد تا کانکشن ها ارتباط شون به اتمام برسه سپس بسته شوند . اگر تعداد کاربرانی که از پروکسی سرورمون استفاده میکنن زیاد باشن و از این اپشن استفاده کنیم , ممکنه مدت زمان زیادی صرف از کار افتادن اسکویید شود.

aliabry@lp:~$ sudo squid3 -k shutdown
2013/08/02 17:16:01| Preparing for shutdown after 0 requests
2013/08/02 17:16:01| Waiting 30 seconds for active connections to finish
2013/08/02 17:16:01| FD 18 Closing HTTP connection
2013/08/02 17:16:01| FD 19 Closing HTTP connection

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

kill : بلافاصله پروسس اسکویید رو از بین می برد . بیشتر وقتی استفاده میشه که اسکویید توسط shutdown , interrupt از کار نیفته .

check : برای دیدن وضعیت squid استفاده می شود . اگر squid در حال اجرا باشد خروجی نشون نمیدهد ولی اگر در حال اجرا نباشد خروجی شبیه زیر نشون میدهد :

aliabry@lp:~$ sudo squid3 -k check
squid: ERROR: No running copy

debug : از این اپشن برای فرستادن پروسس اسکوید به حالت debug استفاده میشود . خروجی debug در فایل cache.log ذخیره میشود . وقتی اسکویید رو به حالت debug می فرستین مقدار زیادی اطلاعات در فایل cache.log ذخیره میکند که میتواند در مدت زمان کمی حجم زیادی از حافظه مون رو اشغال کند. (متا سفانه روشی برای خارج کردنش از حالت debug بدون این که اسکویید رو از کار بندازیم من نتونستم پیدا کنم)

rotate : از این اپشن برای rotate کردن لوگ ها استفاده میشود .

F-:

نقل از کتاب : اموزش پروکسی سرور اسکویید

پس از هر بار راه اندازی , اسکویید مخزن ذخیره سازی داده ها رو فرا خانی میکند , در صورتی که به هر دلیلی اسکویید نتواند این فرایند را به درستی انجام دهد و همزمان کاربران نیز در خاستهایی را به سوی ان ارسال کنند , اسمکویید فرایند فراخانی مخزن ذخیره سازی پ پاسخ به درخاست کاربران را به طور همزمان انجام می دهد که نتیجه این کار کند شدن عملکرد اسکویید است . برای جلوگیری از این مشکل دستور squid -F اسکویید را مجاب می کند تا زمانی که فرایند فراخانی داده های ذخیره شده به اتمام نرساند درخاستی را از سوی کاربران نپذیرد . این عمل موجب می شود فراخانی اطلاعات با سرعت و به طور صحیح انجام شود . این کار در کش سرور هایی که فضای ذخیره سازی زیادی دارند و ترافیک سنگینی دارند بسیار مهم است .

s-: با اپشن F- تعیین می کنیم که درخاستی رو در حین ساخت مخزن (متادیتا) پاسخ بدهد یا ندهد . اگر بخایم که اسکویید عمل ساخت مخزن رو با دقت بیشتری انجام بدهد می تونیم از اپشن s- استفاده کنیم که باعث می شه تا اسکوید دو مرتبه مخزن رو چک کند و هر شیعی که در مخزن هست رو تایید کند .

 

منابع مفید برای مطالعه بیشتر :

اموزش پروکسی سرور اسکیید

نویسنده و گرداورنده : ‫سید پوریا حسینی

Squid Proxy Server 3.1 Beginner's Guide

نویسنده و گرداورنده : Kulbir Saini