با سلام
آموزش اسکویید  قدم به قدم برای دوستانی که کمتر باهاش کار کردن رو با امید خدا شروع میکنم و سعی میکنم بصورت مداوم کاملش کنم
کارهایی که اسکویید برای ما میکنه در کل:
	کد PHP:
	
cache server
filter access to net
efficient bandwidth usage 
 مرحله اول نصب:
داخل ردهت بیس:
	کد PHP:
	
 yum install squid 
 اگه بسته اسکویید رو دارید :
	کد PHP:
	
 rpm -uhv  /home/nami/squid- 2.7.STABLE7-1u.rpm 
 دبیان بیس (اوبونتو)
	کد PHP:
	
 apt-get install  squid 
 اگه بسته اسکویید رو دارید:
	کد PHP:
	
 dpkg -i  /home/nami/squid- 2.7.STABLE7-1u.deb 
 پیشنهاد می کنم برنامه squidclient  رو هم به روش فوق برای تست اسکویید بگیرید 
بعد از دریافت با یکی از دستورات زیر  نصب شدن رو تست کنید:
	کد PHP:
	
rpm -q  squid
dpkg  -l  squid 
 مسیر دایرکتوری اسکویید:
فایل کانفیگ اصلی اسکویید:
	کد PHP:
	
etc/squid/squid.conf 
 قبل از هر تغییری بهتره ازش کپی بگیریم   cp -r  /etc/squid/squid.conf  /home/nami/Desktop
مسیر لاگ های اسکویید:
دایرکتوری کش :
دستور استارت اسکویید:
	کد PHP:
	
 ردهت:                                                                                           service squid start 
 
	کد PHP:
	
 دبیان:                                                                                       etc/init.d/squid  start/ 
 با دستور زیر می تونید وضیت اسکویید رو توی شبکه ببینید:
	کد PHP:
	
 netstat  -ntlp  |grep squid 
 پورت پیش فرض اسکویید ۳۱۲۸ روی پروتکل tcp  هست
قدم اول تموم شد ؛
لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید:
---------- Post added at 09:38 PM ---------- Previous post was at 09:36 PM ----------
قدم دوم کانفیگ اولیه و تست:
تمامی Document ها در مسیر:
	کد PHP:
	
/usr/share/doc/squid 
 تنظیم اسکویید برای اجازه دسترسی شبکه داخلی به اینترنت:
با یکی از ادیتورها مثل :vim-vi-nano,...... در محیط تکست یا gedit -knote و  .... در محیط گرافیک فایل squid.conf رو باز میکنیم (برای تغییرات دسترسی  رووت لازمه)
در زیر قسمت access control :
یک acl اضافه میکنیم:
	کد PHP:
	
acl  mylan  src  192.168.1.0/24 
 یعنی سورس آدرس شبکه داخلی من 192.168.1.0/24
یک access role  اضافه می کنیم:
	کد PHP:
	
http_access  allow  mylan 
 توجه داشته باشید خطوط قبل از http_acceess deny all باید باشه 
acl نویسی مثل سیسکو از بالا به پایین خونده میشه
در این مرحله با ریستارت اسکویید میتونید اون رو تست کنید:
	کد PHP:
	
service squid restart 
 
	کد PHP:
	
 etc/init.d/squid  restart/ 
   
نکته: در مراحل بعد برای اینکه تغییراتی که دادیم اعمال بشه ولی کانکشن های ما باقی بمون از:
	کد PHP:
	
service squid reload 
 
	کد PHP:
	
 etc/init.d/squid  reload/ 
  استفاده می کنیم
 
برای تست از محیط cli  هم می تونید از squidclient  استفاده کنید به شکل:
	کد PHP:
	
squidclient  -g  5  http://www.yahoo.com 
 که میبینید در 5 بار زمان خواندن سایت چقدر هست
برای دیدن پروسس squid:
ps -ef  |grep  -i squid
پایان قدم دوم;
 
لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید:
---------- Post added at 09:40 PM ---------- Previous post was at 09:38 PM ----------
قدم سوم تنطیمات بیشتر:
میشه روی چند پورت listening داشت:
	کد PHP:
	
http_port 3128 8080 
 
کانفیگ کردن دایرکتوری کش:
	کد PHP:
	
cache_dir ufs /usr/local/squid/var/cache/ 100 16 256 
 
ابن خط داخل squid.conf مشخص میکنه که مسیر مورد نظر با فایل سیسنم ufs هست  که با گنجایش ۱۰۰ مگابایت هست  عدد ۱۶ بیانگر ماکزیمم تعداد فولدر داخل  دایرکتوری و ۲۵۶ مشخص کننده حداکثر ۲۵۶ فایل داخل هر فولدر هست
**نکته: میشه یه تعداد دلخواه مسیر تعریف کرد مثلا  cache_dir  ufs /dev/sda1/1/ 100 16 256
 ** نکته: ضرایب باید حفظ بشه 
** نکته : بالابردن بیش از حد ظرفیت کش performance  رو پایین میآره
** نکته : بهتره از یک هارد دیگه برای کشینگ استفاده بشه که سرعت بالاتری هم داشته باشه
****با دستور df  میشه مقدار فضای خالی پارتیشن ها رو دید
برای جلوگیری از اتصال یک یا چند آی پی خاص به اینترنت قبل از acl mylan:
	کد PHP:
	
acl  bad_user  src  192.168.1.10/24
http_access deny  bad_user 
 
برای ارتباط دادن با کش سرور های دیگه داریم:
	کد PHP:
	
cache_peer cache.omid.com parent 3128 3130 default no-query 
 
اگه بخوایم که اگر توی کش سرور بالا پیدا نکرد سراغ اینترنت نره داریم:
	کد PHP:
	
cache_peer cache.omid.com parent 3128 3130 
  
برای دیدن لاگ دسترسی ها:
	کد PHP:
	
cat  /var/log/squid/access.log 
 
انواع ACL :
-  Source/Destination IP address
 -  Source/Destination Domain
 -  Regular Expression match of requested domain
 -  Words in the requested URL
 -  Words in the source or destination domain
 -  Current day/time
 -  Destination port
 -  Protocol (FTP, HTTP, SSL)
 -  Method (HTTP GET or HTTP POST)
 -  Browser type
 -  Name (according to the Ident protocol)
 -  Autonomous System (AS) number
 -  Username/Password pair
 -  SNMP Community
 
 در مورد اولی توضیح داده بودم
	کد PHP:
	
Source/Destination Domain 
 
	کد PHP:
	
acl myDomain srcdomain .omid.com .squid-cache.org 
 
	کد PHP:
	
 acl allow myDomain 
  فکر کنم نیازی به توضیح نباشه
ادامه در قدم بعدی انشالله
لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید:
  
---------- Post added at 09:43 PM ---------- Previous post was at 09:40 PM ----------
دامه انواع access-list
-  Regular Expression match of requested domain
 
برای ***** کردن url هایی که نمی خواهیم حاوی یک یا چند کلمه باشن:
	کد PHP:
	
acl badUrl url_regex -i nami. 
 i- برای اینه که چون پیش فرض case sensitive هست با این پارامتر insensitive میشه
	کد PHP:
	
acl badUrl url_regex -i \.avi 
 این هم که مشخصه
میشه جفتشون رو یکجا نوشت:
	کد PHP:
	
acl badUrl url_regex -i nami.\*\.avi 
 که در آخر با این دستور ***** میشن: 
	کد PHP:
	
http_access  deny  badUrl 
 
	کد PHP:
	
 acl  filterlist  url_regex  -i  /etc/squid/blacklist 
 داخل این فایل می تونید url های مورد نظر رو بزارید
MIME type
*****ینگ میتونه بر اساس mime type  باشه
	کد PHP:
	
[php]acl  mp3  reg_mime_type   "audio/mp3" 
 [/PHP]
  
Current time/date
 میشه acl رو بر اساس زمان نوشت:
	کد PHP:
	
acl name time [day-list] [start_hour:minute-end_hour:minute 
  
	کد PHP:
	
 S – Sunday, M – Monday,T – Tuesday, W – Wednesday, H – Thursday 
 F – Friday, A – Saturday
مثلا : 
	کد PHP:
	
acl  saate-edari  time   ASMTW 8:00-16:00
http_access  allow saate-edari 
 
Destination port
پورتهای مقصد که کاربران اجازه دسترسی دارند
	کد PHP:
	
acl Safe_ports port 80 21 443 563 70 210 1025-65535 
 و بقیه بلاک میشن با دستور زیر :
	کد PHP:
	
http_access deny !Safe_ports 
 
****نکته:  علامت !  یعنی به جز (کل دستور یعنی همه بسته بجز safe ports
Method
متد get  برای دانلود
متد post  برای آپلود 
متد connect برای ssl
مثال :
	کد PHP:
	
acl connect_method method CONNECT
acl SSL_PORTS port 443 563
http_access deny connect_method !SSL_PORTS 
 یعنی به کانکشن های غیر ssl اجازه دسترسی نمیده
لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید:
 
 
    
 
---------- Post added at 09:47 PM ---------- Previous post was at 09:43 PM ----------
باز هم ادامه انواع access-list
Browser type 
میشه acl  رو بر اساس browser کاربر ها نوشت که مثلا با firefox  بشه با ie نشه
	کد PHP:
	
acl aclname browser MOZILLA 
 ***** خدایی تا کجا هارو فکر کردن  

***********
Username 
	کد PHP:
	
ident_lookup on
acl friends omid mohsen reza morteza
http_access allow friends
http_access deny all 
 میتونید اسمهای مورد نظر رو بدید که از روی دستگاه مقصد auth میشن
***** زیاد در مورد نحوه احراز هویت این مورد اطلاعی ندارم
Autonomous System (AS) Number 
 
Squid is often used by large ISPs. These ISPs want all  of their customers to have access to their caches without having  incredibly long manually-maintained ACL lists (don't forget that such  long lists of IPs generally increase the CPU usage of Squid too). Large  ISP's all have AS (Autonomous System) numbers which are used by  other Internet routers which run the BGP (Border Gateway Protocol)  routing protocol. 
The whois server whois.ra.net keeps a (supposedly authoritive)  list of all the IP ranges that are in each AS. Squid can query this  server and get a list of all IP addresses that the ISP controls,  reducing the number of rules required. The data returned is also stored  in a radix tree, for more cpu-friendly retrieval. 
Sometimes the whois server is updated only sporadically. This could lead  to problems with new networks being denied access incorrectly. It's  probably best to automate the process of adding new IP ranges to the  whois server if you are going to use this function. 
If your region has some sort of local whois server that handles queries in the same way, you can use the as_whois_server Squid config file option to query a different server. 
 **** اینم برای isp دار ها خوشون ترجمه کنن زیاده
Username and Password 
روشهای مختلفی برای ***** کردن یوزرها هست مثلا smb-خواندن از روی فایل و ....
من خودم از ntlm استفاده کردم برای خوندن یوزرهای AD
 Using the NCSA authentication module
اینم روش جالبیه برای خوندن یوزر و پسوردها از روی یک فایل:
داخل squid.conf اضافه میکنیم:
	کد PHP:
	
 authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd 
 فایل passwd رو در مسیر بالا میسازیم و با فرمت زیر یوزر اضافه میکنیم:
	کد PHP:
	
 nami:lKdpxbNzhlo.w 
 Using the RADIUS authentication module 
	کد PHP:
	
acl external_traffic *****_auth REQUIRED
http_access allow external_traffic
auth_param basic program /usr/local/squid/libexec/squid_radius_auth  -f /usr/local/squid/etc/squid_radius_auth.conf
auth_param basic children 5
auth_param basic realm This is the realm
auth_param basic credentialsttl 45 minutes 
   
acl بازهم هست ولی کمتر مورد استفاده قرار میگیره و موردی هست
**** مثالهایی هم که نوشتم فقط نمونه خیلی کوچکی از نحوه syntax نوشتن  اونهاست و میشه هزاران جور دیگه تغییر داد یا ترکیب کرد و اینجا فقط به سر  فصل اشاره شد.
refresh pattern ها
مشخص میکنند که چه چیزهایی باید کش بشن و تا چه مدت و اینکار رو با خوندن  هدری که در html قرار داده میشه میغهمه ولی خیلی سایتها از tag default  استفاده میکنن و زیاد توی سرعت باز شدن اینگونه سایتها تاثیری حاصل نمیشه
نمونه های زیادی از refresh pattern توی اینترنت هست و با یاد***ی روش میشه دستی هم نوشت:
	کد PHP:
	
 [php]refresh_pattern [-i] regex min percent max [options] 
 refresh_pattern -i \.gif$ 1440 20% 10080[/PHP]
نمونه:[PHP]
	کد PHP:
	
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90%  432000 override-expire ignore-no-cache ignore-no-store ignore-private
refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tif   f)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store  ignore-private
refresh_pattern -i \.index.(html|htm)$ 0 40% 10080
refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320
refresh_pattern . 0 40% 40320[/php 
 ]
********مهم
داینامیک content ها رو کش نمیکنه مثلا عکسهای کوچک کد امنیتی:
	کد PHP:
	
 [php]refresh_pattern (/cgi-bin/|\?) 0 0% 0 
 [/PHP]
پایان قدم ۵ ؛
 
 لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید: