چگونه Squid را نصب کنیم؟ چگونه Cache سرور راه اندازی کنیم؟ یکی از سرویس هایی که برای مدیران شبکه ضروری میباشد سرویس پروکسی میباشد که این امکان را به مدیران شبکه میدهد که بتوانند مدیریت بهتری روی درخواست های کاربران را داشته باشند . در این آموزش قصد داریم نصب و کانفیگ یکی از محبوبترین و بهترین نرم افزارهایی که میتوان با آن پروکسی سرور راه اندازی کرد به نام Squid را آموزش دهیم .
در توضیح ساده میتوان گفت پروکسی سرور وظیفه دارد درخواست هایی که از سمت کلاینت به آن ارسال میشود را دریافت کرده و تحلیل های لازم را برروی آن انجام داده و به سمت مقصد ارسال کند و اگر مقصد پاسخی برای این درخواست ارسال کرد پس از دریافت پاسخ و تحلیل آن به سمت کلاینت ارسال کند .جهت آشنایی بهتر و بیشتر پروکسی سرور مقاله زیر را مطالعه فرمایید :
ابتدا دستور زیر را وارد کنید تا پکیج Squid نصب شود
sudo yum install squid
جهت کانفیگ کردن Squid باید فایل squid.conf که فایل کانفیگ اصلی squid میباشد را ویرایش کرد ، برای ویرایش دستور زیر را وارد کنید
sudo vim /etc/squid/squid.conf
در ابتدای فایل کانفیگ های زیر را مشاهده خواهید کرد
# Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
خطهایی که با acl شروع شده است جهت تعیین کردن دسترسی ها میباشد که چه آی پی هایی درخواست هایی را که میفرستند پروکسی سرور ما بپذیرد و پردازش انجام دهد که شما میتوانید جهت امنیت بیشتر خطهایی که از پیش نوشته شده را comment کنید و به صورت دستی یک Access list برای شبکه خودتان تعریف کنید
# Recommended minimum configuration: # # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl localnet src 192.168.1.0/24
در اینجا فقط رنج 192.168.1.1 تا 192.168.1.254 میتوانند درخواست خود را به پروکسی سرور ارسال کنند . در اینجا ما متغیر localnet را هم تعریف کرده ایم که در ادامه به آن میپردازیم. به همین صورت میتوانید Access list تعیین کنید .
acl SSL_ports port 443 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 CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports
در اینجا مشخص شده است که درخواست هایی که پورت مقصد آنها پورت های بالا میباشند مورد تحلیل قرار میگیرند . نحوه کار هم به این صورت است که ۲ متغیر تعریف شده به نام های SSLports و Safeports و شماره پورت ها داخل این متغیر ریحته شده است و در دو خط پایین فقط به این پورت ها اجازه دسترسی داده شده .
# Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager
در اینجا مشخص شده است که چه کسانی به Cachemanager دسترسی دارند که به صورت پیش فرض فقط localhost میباشد .Cache Manager : کامپوننتی میباشد در Squid که به ما گزارش ها و آمارهایی در مورد درخواست و کارهای Squid به صورت زنده به ما نمایش میدهد که ۲ ابزار برای اتصال به آن وجود دارد به نام های Cachmgr.cgi و Squidclient .
# from where browsing should be allowed http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access deny all
در اینجا متغیر گفته شده که localhost و رنج آی پی که در متغیر localnet ریخته شده است اجازه دسترسی به پروکسی سرور ما را دارند و در خط آخر هم گفته شده است که کسی به جز اینها نمیتواند وصل شود .
# Squid normally listens to port 3128 http_port 3128
نشان دهنده اینکه Squid با چه پورتی در روی سیستم ما به درخواست ها گوش میکند .
# Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256
مشخص کننده این میباشد که object هایی که Squid میخواهد Cache کند با چه متدی و در کدام دایرکتوری ذخیره شود .که در اینجا گفته شده با متد ufs و در دایرکتوری varspool/squid ذخیره شود و حجم آن ۱۰۰ مگابایت باشد و ابتدا ۱۶ دایرکتوری ساخته شود و در هر دایرکتوری ۲۵۶ دایرکتوری دیگر ساخته شود
و در هر کدام از این فولدرها به ترتیب ذخیره سازی انجام شود .دلیل اینکار هم به این جهت میباشد که Cache Server ما سریعتر کار کند. زیرا اگر به عنوان مثال ۱۰۰۰ فایل داشته باشیم و آنهارا در چند دایرکتوری تقسیم کنیم نسبت به زمانی که در یک دایرکتوری قرار دهیم سریعتر سرچ میشود.
# Leave coredumps in the first cache dir coredump_dir /var/spool/squid
آدرس ذخیره سازی فایل های مربوط به Crash نرم افزار را مشخص میکند.
# Add any of your own refresh_pattern entries above these. # refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
refresh pattern مشخص کننده این میباشد که Object هایی که روی دیسک ذخیره شده و داخل Header خود زمانی جهت تاریخ انقضا تعیین نشده است تا چه مدتی Cache Server ما میتواند از آن استفاده کند . قاعده نوشتاری آن به صورت زیر میباشد
refresh_pattern [-i] regex min percent max [options]
در بخش دوم راه اندازی Squid در حالت Full Proxy به همراه Authentication را خواهیم گفت .
در ادامه آموزش مربوط به squid , راه اندازی پروکسی سرور در حالت Full Proxy و Cache Server را خواهیم گفت .در ابتدا باید راجع به اینکه Full Proxy چیست یک توضیحی بدهیم : حالت Full Proxy به این صورت میباشد که کلاینت درون مرورگر خود یا درون نرم افزارهای Proxy Client آدرس پروکسی سرور را زده و به آن متصل خواهد شد , در این حالت کاربر متوجه خواهد شد که به پروکسی سرور متصل است .
همانطور که از نام اون مشخصه کار Caching را برای ما انجام خواهد داد که Squid این قابلیت را به خوبی پشتیبانی میکند . به این صورت که به عنوان مثال کلاینت سایتی را درخواست میکند پروکسی سرور Object هایی که در وب سایت به عنوان Object های Static معرفی شده است را در دیسک خود ذخیره میکند و اگر کلاینت دیگری همین سایت را درخواست کند پروکسی سرور Object هایی که به صورت Static میباشند و در دیسک خود ذخیره کرده است را دیگر از سرور مقصد نخواهد گرفت و آنها را از Cache خود به کلاینت تحویل میدهد . این کار دو ویژگی مهم دارد :
نصب Squid را در جلسه اول توضیح دادیم .برای راه اندازی در حالت Full Proxy ابتدا فایل کانفیگ را با دستور
Vim /etc/squid/squid.conf
سپس در خطوط ابتدایی خطهایی که Access list جهت رنج شبکه میباشد را Comment کرده و رنج شبکه خود را وارد کنید . به عنوان مثال رنج شبکه من که قرار است از proxy serverاستفاده کنند 192.168.1.0/24 میباشد
# Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl localnet src 192.168.1.0/24
توجه داشته باشید که در اینجا هر آی پی به غیر از این رنج به پروکسی سرور درخواست بفرستد جوابی نخواهد گرفت.گام بعدی مشخص کردن مسیر جهت Cache Server . جهت این کار خط 62 را از uncomment کنید .در اینجا میتوانید پارامتر ها را بسته به نیاز خود تغییر دهید . توضیح پارامتر ها در جلسه اول به صورت کامل گفته شده است.
# Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /var/spool/squid 100 16 256
توجه داشته باشید که اگر این خط را Uncomment نکنید باز هم عملیات Cache صورت خواهد گرفت ولی برروی مموری ذخیره خواهد شد که اینکار معایب خود را دارد و پیشنهاد میشود اگر میخواهید سرورتان عملیات Caching را نیز انجام دهد حتما کانفیگ مورد نظر را انجام دهد و در غیر اینصورت جهت متوقف کردن عملیات Cache دستور زیر را در انتهای فایل کانفیگ اضافه کنید .
cache deny all
مورد بعدی اضافه کردن نام سیستم خود در انتهای فایل کانفیگ میباشد , این نام برای نمایش ارورها و آمارها به کار میاید به خصوص زمانی که شما چندین پروکسی سرور دارید .طبق تجربه شخصی من پیشنهاد میکنم که حتی اگر یک پروکسی سرور هم داشتید حتما این مورد رو اضافه کنید .در اینجا نام سرور من centos7 میباشد.
visible_hostname centos7
خب در اینجا تنظیمات مربوط به Squid ما برروی سرور به اتمام رسید .
firewall-cmd --zone=public --permanent --add-service=squid
در Cent OS7 سرویس جدیدی به نام firewalld معرفی شده است که میتوان گفت جایگزین iptables شده است .تنظیمات مربوط به سرور به اتمام رسیده است و میتوانید با دستور زیر پروکسی سرور خود را راه اندازی کنید .
systemctl restart squid
دستور زیر را هم جهت اینکه squid در زمان بوت به صورت اتومات فعال شود وارد کنید .
systemctl enable squid
جهت استفاده از پروکسی سرور در کلاینت در مرورگر خود تغییرات زیر را اعمال کنید ، مرورگر من در اینجا فایرفاکس میباشد و آی پی سرور من 192.168.1.10 میباشد .ابتدا وارد صفحه تنظیمات شوید که در لینوکس از منوی Edit ---> Preferences و در ویندوز از منوی Tools ----> Option وارد تنظیمات شوید و طبق مراحل زیر جلو بروید
در اینجا فقط فایرفاکس از پروکسی سرور استفاده میکند و مابقی نرم افزارها به صورت عادی از اینترنت استفاده میکنند. جهت اینکه تمامی سیستم شما از پروکسی استفاده کند راه های مختلفی وجود دارد که مثلا در سیستم عامل لینوکس با استفاده از environment ها و در ویندوز نیز با استفاده از نرم افزارهایی مثل proxyfire میتوانید استفاده کنید .
بعد از اعمال کانفیگ ها میتوانید نام سایتی را وارد کرده تا ببینید که پروکسی سرور درست کار میکند یا خیر .
برای دیدن لاگ در پروکسی سرور وارد مسیر زیر شوید
cd /var/log/squid
در اینجا 2 فایل خواهید دید :
access.log cache.log
فایل access.log : این فایل شامل اطلاعات درخواست ها میباشد و میتوان گفت اصلی ترین فایل لاگ در Squid میباشد . Syntax این فایل به صورت زیر میباشد
Timestamp Elapsed Client Action/Code Size Method URI Ident Hierarchy/From Content
در بخش های بعدی راجع به لاگ فایل ها و همچنین شخصی سازی آن بیشتر و با جزییات بیشتر بحث خواهیم کرد.با توجه به طولانی شدن این بخش آموزش احراز هویت را در جلسه بعدی خواهیم گفت .
در بخش سوم آموزش های مربوط به Squid میخواهیم راه اندازی احراز هویت را آموزش بدیم .ابتدا باید پکیج httpd-tools را نصب کنیم که شامل یکسری ابزارهای امنیتی و مدیریتی میباشد که ما در اینجا فقط از htpasswd استفاده خواهیم کرد
sudo yum install httpd-tools
بعد از نصب پکیج باید فایل دیتابیسی که قرار است یوزر و پسورد ها در آن تعریف شود را بسازیم و یوزرها در آن قرار دهیم ... جهت این کار از دستور زیر استفاده میکنیم
touch /etc/squid/.htpasswd htpasswd /etc/squid/.htpasswd test
در اینجا ما فایل دیتابیس را در مسیر etc squid ساختیم و یوزر تست را جهت استفاده از پروکسی سرور ایجاد کردیم . بعد از زدن دستورات یک پسورد هم وارد میکنیم . یوزر و پسورد در فایل htpasswd. ذخیره میشود.
بعد از ساخت دیتابیس به سراغ فایل کانفیگ Squid میرویم و دستورات زیر را وارد میکنیم
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd auth_param basic children 5 auth_param basic realm Authenticate For Access Web auth_param basic credentialsttl 2 hours auth_param basic casesensitive off acl password proxy_auth REQUIRED http_access allow password
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd
در اینجا ما اسکریپتی که قرار است عمل احراز هویت را از روی دیتابیس ما انجام دهد را مشخص میکنیم.
auth_param basic children 5
در اینجا بیشترین پروسس هایی که میتوانند عملیات احراز هویت را انجام دهند را مشخص میکنیم که هر چه تعداد کلاینت ها بیشتر باشد باید تعداد این آیتم نیز بیشتر باشد . توجه داشته باشید که 5 در اینجا منظور این نیست که فقط 5 کلاینت میتوانند متصل شوند .
auth_param basic realm Authenticate For Access Proxy
متنی که در صفحه Prompt یوزرنیم و پسورد نوشته میشود را مشخص میکند .
auth_param basic credentialsttl 2 hours
مدت زمانی میباشد که Squid دیتابیس خود را چک میکند که ااگر پسوردی تغییر کرده بود و یا یوزری حذف و اضافه شده بود تغییرات لازم را انجام دهد . به عنوان مثال اگر کلاینتی با یوزر test به پروکسی متصل شده است و ما یوزر test را حذف کردیم بعد از اینکه مدت زمان مورد نظر رسید و squid دیتابیس خود را چک کرد متوجه میشود که یوزر test حذف شده است و کلاینتی با یوزر test از پروکسی ما استفاده میکند و به این ترتیب ارتباط کلاینت را از پروکسی قطع خواهد کرد و دوباره یوزر و پسورد از کلاینت خواهد پرسید.
auth_param basic casesensitive off
حساسیت به حروف بزرگ و کوچک در مورد username
acl password proxy_auth REQUIRED http_access allow password
Access List ها جهت اتصال به پروکسی . بعد از اعمال تنظیمات و ریستارت کردن سرویس squid از این پس هر کلاینتی بخواهد به پروکسی متصل شود از او یوزر و پسورد پرسیده خواهد شد .
از این به بعد در لاگ ها نیز Username ثبت خواهد شد .
tail -f /var/log/squid/access.log
در این جلسه از آموزش Squid میخواهیم راه اندازی در حالت Transparent رو آموزش بدیم .اگر جلسه های قبلی رو مشاهده کرده باشید متوجه شدید که برای اینکه بتونیم از Proxy استفاده کنیم باید روی مرورگر کاربر آدرس و پورت پروکسی را وارد کنیم تا بتوان از اون استفاده کرد اما در حالت Transparent نیازی به این کار نخواهد بود .
البته این حالت معایبی هم دارد به عنوان مثال روی پورت ۴۴۳ یا HTTPS به خوبی کار نخواهد کرد و دلیل آن هم امنیت و احراز هویت در SSL میباشد که در اینجا به ما اجازه استفاده از این مورد را نخواهد داد . البته راه هایی برای این مورد وجود دارد که به موقع آن ها را نیز توضیح و آموزش خواهیم داد .جهت راه اندازی در حالت Transparent ما نیاز به یک روتر هم داریم که برروی آن بتوانیم Port Forwarding انجام دهیم که ما در اینجا از خود لینوکس استفاده میکنیم و ان را تبدیل به روتر میکنیم.
در شبکه های واقعی شما میتوانید Port Forwarding خود را روی Gateway شبکه خود انجام دهید که میتواند روتر میکروتیک و یا سیسکو و یا هر دیوایس دیگه باشه . توجه داشته باشید که در سرور لینوکس من ۲ کارت شبکه وجود دارد یکی برای اتصال به شبکه اینترنت و دیگری اتصال به شبکه داحلی که رنج آنها به صورت زیر میباشد
WAN Interface Name : enp0s3 IP : 192.168.1.10 Network : 192.168.1.0/24 LAN Interface Name : enp0s8 IP : 192.168.10.10 Network : 192.168.10.0/24
برای راه اندازی روتر برروی لینوکس ابتدا باید قابلیت فوروارد کردن IP را درسرورمان فعال کنیم .
echo 1 > /proc/sys/net/ipv4/ip_forward
البته این تنظیم بعد از ریستارت پاک خواهد شد و برای دائمی شدن باید در فایل etc//sysctl.conf اضافه کرد .
net.ipv4.ip_forward = 1
بعد از تغییرات بالا نیاز میباشد که NAT را در روتر سرور خودمان با استفاده از فایروال سرورمان راه اندازی کنیم جهت این کار کانفیگ های زیر را انجام دهید ؛
firewall-cmd --zone=external --change-interface=enp0s3 --permanent firewall-cmd --zone=external --add-masquerade --permanent
این کانفیگ ها مربوط به مباحث firewalld میباشد که سرویس جدیدی میباشد که از Centos7 جایگزین iptables شده است. در نظر داشته باشید که ما تا این مرحله یک روتر لینوکسی راه اندازی کرده ایم که اگر در کلاینتی آی پی سرور لینوکسی خود را یعنی 192.168.10.10 را به عنوان Gateway به بدهیم کلاینت ما میتواند از اینترنت استفاده کند . در مرحله بعدی باید بگوییم که درخواست هایی که به سمت پورت ۸۰ سرور ما می آیند به پورت ۳۱۲۸ که پورت Squid میباشد Forward شوند .
firewall-cmd add-forward-port=port=80:proto=tcp:toport=3128:toaddr=192.168.10.10 --permanent
مرحله بعدی کانفیگ کردن خود Squid میباشد که برای اینکار وارد فایل کانفیگ Squid میشویم و در انتهای خطی که کانفیگ http_port 3128 وجود دارد کلمه transparent را وارد میکنیم .
بعد از این کار Squid را Reload کنید .
برای کانفیگ کلاینت نیز فقط کافیست Gateway را سرور لینوکس خود قرار دهید .
"Linux SysAdmin"
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود