با سلام
آموزش اسکویید قدم به قدم برای دوستانی که کمتر باهاش کار کردن رو با امید خدا شروع میکنم و سعی میکنم بصورت مداوم کاملش کنم
کارهایی که اسکویید برای ما میکنه در کل:
کد 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]
پایان قدم ۵ ؛
لطفا توی این تاپیک سوال نپرسید تا انشالله مراحل رو پشت سر هم بریم جلو برای سوال به تاپیک جدید زیر مراجعه کنید: