جامعترین آموزش Squid Proxy | آموزش راه اندازی کش سرور لینوکس | از Squid چیست تا ACL های Cache Proxy و ... همگی در قالب یک آموزش متنی نصب و راه اندازی کش سرور لینوکس برای شما آماده شده است . در این مقاله فوق العاده جامع شما از ماهیت کش سرور اسکوئید در لینوکس شروع به یادگیری می کنید ، آموزش نصب Squid را یاد می گیرید ، بصورت عملیاتی از Squid در شبکه استفاده خواهید کرد.
خوب یکی از بدبختی هایی که در شرکت هایی که تعداد کاربراشون زیاد هست اینه که حجم اینترنت خیلی سریع تموم میشه و کلی کاربر هستن که صبح تا شب کلی وب سایت رو زیر رو رو می کنن و طبیعتا فرصتی برای کار کردن ندارن ! بالاخره وبگردی و ویدیو دیدن و عکس بازی و ... زمانشون رو میگیره تو سازمان ها دیگه وقتی برای کار کردن نمیمونه اما خوب آیا راه حلی هست که بشه حجم مصرفی اینترنت رو بهینه کرد ؟
خوب ممکنه در روز صدها نفر همگی از یک وب سایت مشهور بازدید کنن ، نمیشه یه بار این وب سایت رو اول صبح دانلود کرد و بصورت شبکه داخلی بدون استفاده از حجم اینترنت برای کاربر جدید ارسال کرد ؟ جوابش مثبت هست ، شما می تونید اینکار رو با استفاده از راه اندازی کش سرور انجام بدید .
کش سرور در واقع یک نوع پروکسی سرور هست ، پروکسی سرور رو حتما آشنایی دارید باهاش ، اگر ندارید کافیه تو سایت توسینسو بگردید مطالب زیادی در موردش میاد ، به زبون ساده یک واسط هست بین شما و مقصد که کارهای زیادی انجام میده ، مثلا می تونه شما رو مخفی نگه داره .
امنیت شما رو بالا ببره ، سرعت Load شدن صفحات وب رو بالا ببره ، ترافیک مزاحم رو فیلتر کنه ، فعالیت کاربران رو ثبت و ضبط کنه که بتونید به راحتی فضولی کنید و مدیریت پهنای باند و کلی کوفت و زهر مار دیگه هم داره که مهمترین کاربردش در Squid همین کش کردن هست که ما ازش استفاده می کنیم.
Cache Proxy به زبون زیادی ساده مکانیزم کاریش این هست که اولین درخواست وقتی برای وب سایتی ارسال میشه ، میره محتویات وب سایتی که قابل دانلود هستن رو روی RAM یا Hard Disk خودش دانلود می کنه و توی درخواست بعدی به جای اینکه از اینترنت دانلود کنه از شبکه داخلی و هارد دیسکش محتوا رو برای کاربر Load می کنه که دیگه خودتون می تونید حدس بزنید چه اتفاقی قرار هست بیوفته. طبیعتا برای اینکه بتونید از Cache Proxy استفاده کنید باید آدرسش رو توی قسمت Proxy Server مرورگر یا سیستم اضافه کنید .
Squid یک Cache Server لینوکسی و Open Source هست که به عنوان محبوب ترین Cache Server یا Web Proxy Cache در دنیا شناخته میشه ، در بسیاری از سازمان های بزرگ هم استفاده میشه و جالب هست بدونید که اکثر مودم ها و روترها و هات اسپات هایی که روی خودشون Cache سرور دارن در واقع دارن از Squid برای اینکار استفاده می کنن . در ادامه نحوه نصب کردن این کش سرور رو به شما آموزش میدیم تا برسیم سراغ فایل های پیکربندی و حداقل موارد تنظیمات رو با هم انجام بدیم .
توجه کنید که هدف اصلی این سری مطلب اینه که شما یک Cache سرور ساده راه اندازی کنید و مفاهیم اصلیش رو یاد بگیرید و طبیعتا خود Squid پیکربندیش می تونه خیلی پیچیده بشه ، امروز روی سیستم عامل لینوکس CentOS نسخه 7 با دستورات زیر شروع به نصب Cache Server اسکوئید می کنیم .
خوب برای اینکار اول توجه داشته باشید که حداقل منابع لازم رو برای نصب کش سرور داشته باشید ، میزان RAM و Disk و البته CPU ای که شما برای این سرور نیاز دارید بسته به میزان درخواست کاربراتون متغیر هست ولی کلیات این هست که معمولا با منابع کم هم این سرویس به خوبی کار می کنه ، قبل از اقدام به نصب هر بسته ای در لینوکس دستور زیر رو برای به روز رسانی بکنیم :
[root@tosinso-centos7 ~]# yum -y update
خوب حالا که به روز رسانی انجام شد کافیه سه دستور زیر رو به ترتیب برای نصب کردن Squid ، استارت کردن سرویس و البته فعال کردنش بزنید :
[root@tosinso-centos7 ~]# yum -y install squid [root@tosinso-centos7 ~]# systemctl start squid [root@tosinso-centos7 ~]# systemctl enable squid
خوب حالا هم Squid رو نصب کردید و هم فعالش کردید ! چقدر سادست نه ! زرشک ! هنوز اول کاره ، برای اینکه مطمئن بشید سرویس به درستی نصب شده و وضعیتش رو بدونید دستور زیر رو هم بزنید تا بریم تازه سراغ مراحل اولیه :
[root@tosinso-centos7 ~]# systemctl status squid
با زدن دستور بالا وضعیت سرویس به شما نشون داده میشه که خروجیش شبیه زیر هست ، دقت کنید که حتما سرویس در حالت running باشه :
squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-01-26 08:29:23 EST; 1min 44s ago Main PID: 63361 (squid) CGroup: /system.slice/squid.service ├─63361 /usr/sbin/squid -f /etc/squid/squid.conf ├─63363 (squid-1) -f /etc/squid/squid.conf └─63372 (logfile-daemon) /var/log/squid/access.log Jan 26 08:29:23 tosinso-centos7 systemd[1]: Starting Squid caching proxy... Jan 26 08:29:23 tosinso-centos7 squid[63360]: 2019/01/26 08:29:23| WARNING.... Jan 26 08:29:23 tosinso-centos7 squid[63360]: 2019/01/26 08:29:23| WARNING.... Jan 26 08:29:23 tosinso-centos7 squid[63360]: 2019/01/26 08:29:23| WARNING.... Jan 26 08:29:23 tosinso-centos7 squid[63361]: Squid Parent: will start 1 kids Jan 26 08:29:23 tosinso-centos7 squid[63361]: Squid Parent: (squid-1) proc...d Jan 26 08:29:23 tosinso-centos7 systemd[1]: Started Squid caching proxy. Hint: Some lines were ellipsized, use -l to show in full.
خوب الان مطمئن هستید که Squid نصب شده و در حالت running هست ، شما باید مطمئن بشید که سه فایل اصلی زیر ( البته مهمترینش همون squid.conf هست ) در مسیرهای زیر وجود دارند وگرنه کارتون به مشکل میخوره :
خوب حالا که مطمئن شدید این نرم افزار چی هست و چجوری کار می کنه و چجوری نصب پیشفرض میشه عجله نکنید تا در قسمت دوم محتویات فایل squid.conf رو بررسی می کنیم و به شما میگیم که چه چیزهایی رو باید داخل این فایل بررسی کنید و ازشون استفاده کنید
خوب تو قسمت قبلی از این سری مطالب دیدید که چجوری Squid رو نصب می کنیم و چجوری بررسی می کنیم که درست نصب شده یا خیر ، خوب گفتیم که مهمترین فایل تنظیمات این کش سرور squid.conf هست ! خوب اگر نگفتیم الان میگیم چه اشکالی داره نه ؟ ببینید ساختار کلی محتویات اصلی این فایل به شکل زیر هست یه نگاهی بهش بندازید تا من تقریبا خط به خط توضیح بدم که چی به چی هست و بعد بریم سراغ تنظیمات اولیه :
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 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 http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all http_port 3128 coredump_dir /var/spool/squid 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
گیج نخورید !! قرار نیست همه چیز رو الان بدونید فقط یه نگاه کلی به این قسمت بندازید که چند تا کلمه کلیدی داره که باید بدونید تا براتون شفاف بشه چجوری تنظیمات این فایل انجام میشه ، دقت کنید این فایل خیلی خیلی حجیم هست از نظر تعداد خطوط و ممکنه داخلش گیج بخورید پس مهمترین قسمت ها رو یاد بگیرید .
هر جا دیدید نوشته acl مخفف Access Control List هست که برای تعریف کردن سطح دسترسی هست توی این کش سرور و جلوش یه سری پارامتر قرار می گیره مثلا کلمه localnet وقتی بعد acl میاد یعنی میخاد بگه که یک آدرس شبکه میخام برات تعریف کنم ، اگه در ادامش کلمه src اومد مخفف Source هست یعنی میخاد مبدا رو تعریف کنه پس به زبون ساده جمله زیر یعنی تعریف کردن محدوده آدرس IP شبکه داخلی یا Local Network من ، فقط نکته اینکه بچه ها قسمت دوم اسم هست فقط !!!
یعنی الزامی نیست شما حتما اسمش رو بزارید localnet می تونید اسم دیگه ای هم بزارید پس 5 خط اول این تنظیمات یعنی تعریف کردن محدوده آدرس شبکه داخلی ، هر کسی با این مبدا ( src) درخواستی ارسال کرد توی این acl قرار میگیره ، خوب اینکار برای ساده تر شدن دسترسی به این مورد هست توی تعاریف بعدی همین فایل ، به زبون خیلی خیلی ساده مثل تعریف ثابت یا Constant هست که تو برنامه نویسی انجام میشه .
اول کار تعریف می کنی یه ثابت به یه اسم تا آخر برنامه فراخوانیش می کنی اوکی ؟ این از مفهوم اول ... خوب براتون جا افتاد ؟ بعدا مفصل در مورد این صحبت می کنیم که ما کلا دو قسمت اصلی داریم که به یکیش میگیم Access List و به یکی دیگش میگیم Access element که الان تو مثال های بالا چیزهایی مثل src و port رو بهشون میگن element و چیزهایی مثل acl و https_access و http_port و refresh_pattern رو هم بهشون میگن Access List ... بگذریم بریم ادامه ماجرا !!!
توی مثال بالا می بینید که یه سری acl به نام Safe_ports تعریف شده که شماره پورت تعریف کرده ! جلوشون نوشته port و یه شماره و یه اسم Safe_ports هم دائما تکرار شده با شماره های مختلف ! در واقع هر موقع شما Safe_ports رو فراخوانی کنید همه این پورت هایی که براش تعریف شدن مد نظر گرفته میشن
از خط 7 تا 17 اگر اشتباه نکنم و درست شمرده باشم تعریف کردن پورت های مجاز برای دسترسی امن به اینترنت هستن و پروتکل های مجاز برای عبور !! اگه دقت کنید کمی پایینتر یه جا Access Element ای به نام http_access داریم که در مورد Safe_ports نوشته که به اینترنت دسترسی داشته باشه اما تعریف کردنش مثل عملیات NOT در Anding باینتری هست !
یعنی هر جا علامت تعجب دیدید به معنی معکوس قضیه هست ! حالا براتون میخونمش که میگه هر جا دیدید پورت هایی به غیر از پورت های موجود در Safe_ports هست اجازه دسترسی به اینترنت رو بهشون نده ... تا همینجا بسته تا بریم سراغ ادامه ماجرا فقط فراموش نکنید که پورت پیشفرض پروکسی سرور Squid که باید تو مرورگرها وارد بشه شماره 3128 هست که دیگه مشخصه چجوری تعریف میشه !! خوب بریم سراغ ادامه ماجرا و موضوع بعدی که انجام تنظیمات HTTP Proxy هست که در مطلب بعدی براتون توضیح میدیم . امیدوارم تا ایجا براتون مفید باشه .
خوب رسیدیم بالاخره به قسمت تنظیمات Squid و شما الان باید کلیات فایل تنظیمات Squid رو درک کرده باشید ! والا ... این همه توضیحات دادم تو مطلب قبلی اگه یاد نگرفتید واقعا به خدا دیگه چی بگم ... خخ خوب شما برای اینکه احراز هویت کاربر رو بتونید انجام بدید داخل فایل پیکربندی باید محدوده آدرس شبکه ای که قرار هست توش از Squid استفاده کنید برای کاربراتون رو وارد کنید .
یعنی به زبون ساده آدرس IP هایی که حق عبور از پروکسی سرور رو دارن رو باید توی این لیست قرار بدید خوب چجوری اضافه میشه ؟ کاری نداره که توضیح دادیم شما باید یه خط acl وارد کنید به شکلی که اعلام می کنیم ، اول فایل squid.conf رو که در مسیر زیر هست باز کنید ترجیحا با nano :
[root@tosinso-centos7 ~]# nano /etc/squid/squid.conf
خوب حالا توی فایل خط زیر رو اضافه کنید ترجیحا بالای فایل اضافه کنید جایی که Acl های دیگه رو هم می تونید ببینید :
acl localnet src 192.168.0.0/24
خوب طبیعی هست که شما باید به جای محدوده آدرسی که من گذاشتم محدوده آدرس IP خودتون تو شبکه داخلی رو وارد کنید ، می تونید اگر چند تا محدوده دارید به ترتیب همین خط رو اضافه کنید با همین نام و محدوده آدرس رو تغییر بدید .
اول فایل تقریبا این قسمت مشخص هست ، بهتره که جلوش با علامت هشتگ توضیحات هم بنویسید که بدونید منظورتون چی بوده از این نحوه تعریف Acl و ... خوب حالا که تغییراتتون رو اعمال کردید قطعا باید سرویس Squid رو Restart کنید که مجبور می شید دستور زیر رو وارد کنید :
[root@tosinso-centos7 ~]# systemctl restart squid
خوب قسمت بعدی قضیه این هست که اگر شماره پورت خاصی رو مد نظر دارید که روی اسکوئید باز باشه باید حتما تعریفش کنید ، مثلا خیلی اوقات پیش میاد برخی وب سایت ها با پورت خاصی باز میشن که باید تعریف کنید ، قبلا گفتیم می تونید یه خط اضافه کنید مثل خط های قبلیش به نام Safe_ports و توی قسمت پورت ، پورت جدید رو وارد کنید که میخاین اجازه عبور از Squid رو داشته باشه مثال زیر باز کردن پورت 3389 ریموت دسکتاپ هست روی Squid که به شکل زیر انجام میشه :
acl Safe_ports port 3389
حالا شما هر پورتی رو میخاین باز کنید به جاش جایگزین کنید همین ! باز هم برای اعمال شدن هر چیزی فراموش نکنید سرویس Restart میشه برای بار شونصدم عرض کردم ! خوب شما شبکه داخلی رو تعریف کردید برای Squid و پورت های مجاز رو هم تعریف کردید نوبتی هم باشه میرسیم به بحث احراز هویت سمت کاربر در Squid که در قسمت بعدی میریم سراغش !!
توی قسمت بعدی شما احراز هویت و مسدود کردن آدرس های URL رو یاد می گیرید و بعد تمومش می کنیم فقط حواستون باید باشه که این فقط راه اندازی اولیه هست و کلی پارامتر میمونه که باید خودتون بر حسب نیاز بهش بخورید .
خوب شما هم می تونید بصورت کیلویی و فله ای اجازه استفاده اینترنت به کاربراتون رو بدید و هم می تونید براشون احراز هویت بزارید و بدونید کی کجا میره و مدیریت منظمی روی اینترنتتون داشته باشید ، شما در ساده ترین حالت ممکن می تونید از قابلیت Basic Authentication یا احراز هویت ساده Squid استفاده کنید و سریع اینکار رو انجام بدید.
فراموش نکنید که ما کلی روش های احراز هویت داریم که ساده ترینش رو داریم براتون توضیح میدیم ، خوب برای اینکار اول شما باید یک سری ابزار به نام httpd_tools رو نصب کنید ، اگه یادتون باشه که قطعا نیست ( والا به خدا ) همین ابزارها رو برای احراز هویت در آپاچی هم میشد استفاده کرد به شکل زیر دستور رو در CentOS وارد می کنیم :
[root@tosinso-centos7 ~]# yum -y install httpd-tools
خوب حالا که ابزارها رو نصب کردید باید یک فایل درست کنید که بتونه اطلاعات نام کاربری و بعضا رمز عبور کاربرها رو ایجاد کنه که این فایل رو داخل دایرکتوری squid به شکل زیر ایجاد می کنیم و بعدش باید به کاربر squid که کاربر پیشفرض ساخته شده در squid هست هم دسترسی ها رو بدیم که بتونه مالکیت فایل مورد نظر رو بگیره پس دو تا دستور زیر رو هم وارد کنید پشت سر هم و به ترتیب :
[root@tosinso-centos7 ~]# touch /etc/squid/passwd [root@tosinso-centos7 ~]# chown squid: /etc/squid/passwd
بعد از اینکار نوبت به ایجاد کردن user میرسه که ما اسم کاربرمون رو گذاشتیم unity برای ایجاد کاربر کافیه دستور زیر رو وارد کنید و در ادامش هم خودکار پسورد کاربر ازتون پرسیده میشه و توی فایلی که ساختید بصورت Hash شده نگهداری میشه :
[root@tosinso-centos7 ~]# htpasswd /etc/squid/passwd unity New password: Re-type new password: Adding password for user unity
خوب حالا که کاربر و پسوردش رو ساختیم باید فایل تنظیمات squid رو مجددا باز کنیم اینبار نحوه احراز هویت رو داخل فایل تعریف کنیم برای اینکار دستور زیر رو بزنید و فایل رو باز کنید :
[root@tosinso-centos7 ~]# nano /etc/squid/squid.conf
خوب حالا بعد از قسمت ports ترجیحا موارد زیر رو وارد کنید توجه کنید که دقیقا به شکل زیر وارد بشه ، ببینید نمیخایم ریز وارد پارامترها بشیم این یه تیکه رو کپی کنید لطفا :
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 2 hours acl auth_users proxy_auth REQUIRED http_access allow auth_users
حالا با دستور زیر سرویس رو Restart کنید :
[root@tosinso-centos7 ~]# systemctl restart squid
تبریک میگم ! الان وقتی میخاین وارد وب سایتی بشید از شما نام کاربری و رمز عبور خواسته میشه و تا اونهایی که درست کردیم رو وارد نکنید اجازه ورود ندارید ، اما خوب قسمت بعدی ماجرا این هست که چجوری یه وب سایت رو داخل Squid مسدود یا Block کنیم که این هم به عنوان حسن ختام ماجرا اول باید یک فایل درست کنیم که داخلش لیست وب سایت هایی باشد که میخایم تو لیست سیاه باشن و با دستور زیر براحتی ایجادش می کنیم :
[root@tosinso-centos7 ~]# touch /etc/squid/blacklisted_sites.acl
خوب فایل رو باز کنید و داخلش لیست وب سایت هایی که میخاین Block باشن رو به ترتیب زیر وارد کنید :
.tosinso.com .tosinso.com .6i9.co
خوب لیست وب سایت های ممنوعه رو وارد کردید ؟ واقعا ؟ خیلی بی معرفتین که ما رو بلاک می کنید ! به هر حال سلیقه هست دیگه ! خطوط بالا داره میگه هر چیزی که در ادامه دامنه های بالا رو داشت بلاک کن یه جورایی نقطه یعنی همون ستاره توی جستجو که هر چی اولش بود رو حساب کن یعنی الان مثلا www.tosinso.com و network.tosinso.com و ... همش بلاک میشن ... حالا فایل تنظیمات squid رو باز کنید ، دیگه نیازی نیست بگم چجوری طبیعتا و در قسمت port ها ( بعد از Ports ) عین دو خط زیر رو وارد کنید :
acl bad_urls dstdomain "/etc/squid/blacklisted_sites.acl" http_access deny bad_urls
حالا سرویس رو Restart کنید که دیگه بلد هستید و همه چیز الان اوکی هست می تونید توی پروکسی سمت کلاینت شماره پورت و IP پروکسی کش رو وارد کنید و تست بگیرید که درست شده یا نه ، امیدورام مورد توجه شما قرار گرفته باشه ، راه اندازی کنید و لذت ببرید ، هر چند فعال سازی میزان فضای RAM و Hard Disk پیشفرض رو تغییر ندادیم چون نیازی نبود و همین اندازه پیشفرض هم کلی کار مار رو راه میندازه .
خوب قبلا خیلی خودمونی و راحت در مورد نصب و راه اندازی اولیه کش سرور Squid در توسینسو ( جزیره لینوکس و متن باز ) صحبت کردیم و امروز قصد دارم یعنی نیت کردم ( خخ ) که یه سری آموزشی در مورد یکی از چیزهایی که خیلی در موردش ابهام هست یعنی کنترل های دسترسی یا Access Control List ها در این کش سرور صحبت کنم ! اصل مطلب اینه که پیکربندی ACL ها در Squid خداییش یه مقدار مبهمه و تا قشنگ این موضوع برای شما جا نیوفته نمی تونید درست این تنظیمات رو پیاده سازی کنید .
اما من میخام ساده توضیح بدم تا راحت متوجه بشید ، ببینید جوجوهای وب سایت ( دیدم کاربران عزیز وب سایت تکراری شده ... ) کلا ما وقتی در مورد ACL در Squid صحبت می کنیم شما باید درک کنید که دو قسمت اصلی در ACL های این ابزار وجود داره که باید خوب تفاوتشون رو درک کنید ، قسمت اول رو بهش میگن ACL Element و قسمت دوم رو بهش میگن Access List !!!
باور کنید من نمیدونم چرا مثل آدمیزاد نامگذاری نکردن که مثلا ACL خوب مخفف Access Control List هست دیگه چه مرضیه یه اسم گذاری بهتر پیدا می کردید !! ولی خوب تا اینجاش همینو بدونید که شما باید این دو قسمت رو درک کنید و بدونید هر چیزی که توی هر خطی از تنظیمات فایل squid.conf قرار می دید چه معنی داره .
ساختار پیکربندی این ACL ها اینجوری هست که همیشه اول یک خط که میخایم ACL بنویسیم قسمت Access List ما نوشته میشه ، در ادامه میگیم چه Access List هایی داریم اما مثلا فرض کنید http__access یک access list هست که برای مدیریت دسترسی به پروتکل http هست !!
حالا این Access List دو تا عمل می تونه انجام بده که Allow و Deny هست و در ادامش ACL Element ها میان که کلی پارامتر دارن مثل src که مبدا رو مشخص می کند یا dst که مقصد رو مشخص می کنه و ... در نهایت کل این خط تبدیل به یک Access Control List برای Squid میشه که خط به خط خونده میشه و اجرا میشه !
شما باید حواستون به این قالب باشه تا یاد بگیرید ، ببینید ساختار کاری Squid یه جورایی شبیه به برنامه نویسی هست ! یعنی میشه مثلا یه اسم تعریف کردن که مشخص کننده زمان هست در فایل و توی فایل در جای دیگه استفاده کرد ! مثلا فرض کنید ما یک Element داریم به نام time که زمان رو مشخص می کنه اسمش رو میزاریم Shanbe !!
خوب در ادامه میخایم توی یک ACL دیگه بگیم مثلا شنبه ها دسترسی به اینترنت با پروتکل http به فلان وب سایت فعال باشه یا نه ! خوب اینکار رو براحتی میشه با فراخوانی Shanbe به جای نوشتن مجدد زمان انجام داد !! برای مثال یه ACL به شکل زیر و خیلی ساده هست که می بینید میخایم قالبش رو بدونید که بریم سراغ معرفی ACL Element ها و Access List ها :
http_access allow accesses_during_lunchtime
خوب ببینید ACL ما ساختارش مثل بالا هست ، مثلا ما access list ای به نام http__access داری که Action ای که داره allow هست برای دسترسی به منابع وب در زمان نهار ( که قبلا در یک Acl دیگه که پارامتر time داشته و الان فراخوانی شده تعریف شده ) اجازه دسترسی به اینترنت رو میده مثلا !! اوکی ؟ خوب حالا با این تفاسیر شما باید یه سری از این ACL Element ها رو بشناسید که به ترتیب موارد زیر هست :
خوب این همه که گفتیم از Element های ACL های Squid هستن ، دقت کنید که قطعا و بدون شک یه سری چیزهایی که من نوشتم در بالا برای شما باید مبهم باشه مگر اینکه واقعا حرفه ای باشید توی لینوکس و البته برنامه نویسی ! شما باید بیشتر اینها رو از طریق سناریوهای مختلفی که براشون قابل تعریف هست استفاده کنید تا معنی پیدا کنه اما بصورت ساده توجه کنید که ما از واژه های Regular Expressions زیاد استفاده کردیم که باید بدونید چی هست !
ببینید وقتی میگیم Regular Expressions یا عبارات با قاعده شما همون نحوه جستجو کردن تو ویندوز رو یادتون بیاد ! مثلا ستاره نقطه ستاره یعنی همه فایل ها با هر پسوندی ! اینجوری درکشون ساده میشه ، اما خوب یه سری موارد دیگه رو هم در مورد Element ها باید بگم که در مقاله بعدی هم بیشتر تشریحشون می کنیم .
دقت کنید که همه ACL Element ها با همه Access List هایی که در ادامه در مقاله بعدی معرفی می کنیم قرار نیست کار بکنن و هر کدومشون رو باید با نوع access list ای که باهاش تطبیق داره باید استفاده کرد. برای مثال شما نمی تونید snmp__community رو برای دسترسی وب مثلا استفاده کنید و فقط باید برای دسترسی به پروتکل snmp استفاده کنید . یا مثلا element هایی مثل src__as و dst__as فقط برای استفاده کردن در access list ای به نام cache__peer__access قابل استفاده هست .
یا مثال دیگه که حتی نسخه Squid هم براش مهم هست Element ای به نام arp هست که باید قبلش مثلا فعال سازی arp رو داشته باشید در squid تا بتونید ازش استفاده کنید. یک نکته مهم که معمولا در تنظیمات Squid دوستان فراموش می کنن این هست که یه سری از element ها نیاز به process زیادی داره و به همین دلیل در پاسخگویی به کلاینت تاخیر ایجاد میشه ، برای مثال srcdomain و srcdom__regex از جمله این element ها هستن که چون عملیات معکوس کردن و تست کردن کلاینت از بابت DNS رو هم باید انجام بدن تاخیر ممکنه در پاسخ دادن داشته باشن .
هر ACL Element ای که شما در Squid تعریف کنید برای خودش یک اسم منحصر به فردا داره ، هر ACL Element ای که تعریف بشه و اسم داشته باشد شامل یک سری مقادیر یا Value ها هست . اگر شما یک Value با همون اسم داشته باشید فقط همون Value چک میشه اما اگر برای یک اسم Element مثلا سه تا یا چهار تا Value داشته باشید سیستم بصورت OR عمل می کنه یعنی اگر این نشد اون ! این یا اون ! به زبان دیگه توی هر خطی که یک Element باشه و براش مقدار تعریف شده باشه اجرا میشه !
شما نمی تونید یک ACL Element با یک اسم رو با مقادیر مختلف و اسامی مختلف تعریف کنید . برای شما Syntax Error از جانب Squid صادر میشه پس حواستون باید باشه ، اما در خطوط مختلف می تونید برای یک ACL Element مقادیر مختلف رو قرار بدید . خوب در مقاله بعدی به بررسی Access List ها در Squid می پردازیم . امیدوارم با اینکه یه مقدار گنگ هست ولی به هر حال کلیات رو درست باز کرده باشم
خوب توی قسمت قبلی در خصوص Element ها صحبت کردیم در Squid حالا نوبت به Access List ها میوفته که معرفیشون کنم و در ادامه یه سری نکته و سناریو بهتون میگم که تیکه تیکه انجام بدید تا دستتون راه بیوفته ! حالا جالبه بدونید من تا سن 17 سالگی وقتی به فارسی میدیدم روی مغازه ها نوشته شده المنت !!!
فکر می کنم منظورش ال منت هست ! یعنی یه واژه عربیه که ال اولش گذاشتن ! خدایا شکرت انگلیسی یاد گرفتم فهمیدم منظورش Element بوده ! یه عمر در تباهی زندگی کردیم ! اوکی خوب به ترتیب اسامی access list هایی که در squid.conf وجود داره رو با هم بررسی می کنیم :
اینها رو میگم و این بحث رو جمع می کنم تا در ادمه با مثالهای عملی تر اینها رو براتون باز کنم ، باز هم تکرار می کنم ( سیاسی نکنید قضیه رو فقط ) هر Access List یک قانون یا Rule هست که شامل دو تا کلمه کلیدی allow و dely هست ، در ادامش ACL Element ها میان که اسامی رو برای فایل و تنظیمات ما تعریف می کنن که بیخودی هر سری یه چیزی رو تعریف نکنیم .
یک Access List شامل یک یا بیشتر از یک لیست قوانین یا Rule هم می تونه باشه ، نحوه اجرای ACL ها در فایل تنظیمات بصورت خط به خط هست ، هر خطی اجرا شد به ترتیب خط بعدی و به ترتیب دسترسی ها چک میشن ، هر خطی که بالاتر باشه زودتر اجرا میشه و سطح اجراییش یا همون زورش بیشتر از خط پایینی هست
یه حالتی مثل فایروال داره و Rule هاش . اگه توی Rule های نوشته شده تضادی وجود داشته باشه Rule بالاسری اجرا میشه ، مثلا میگن AND انجام میشه یعنی اگه هر دوتا درست بود اجرا میشه یکیش غلط بود یا مثال نقض بود اونی که بالاتره درست هست .
بنابراین شما می تونید Rule هایی بنویسید که هیچوقت اجرا نشن ! برای مثال هیچوقت یک درخواست همزمان نمی تونه روی دو تا پورت ارسال بشه ! مثلا درخواست های 80 و 8000 نمیشه همزمان ارسال بشه ، خوب امیدوارم کمی آماد شده باشید ، توی مطالب بعدی دیگه قسمت قسمت کارهای عملی انجام میدیم .
خوب پسرای گلم رسیدیم به قسمت های عملیاتی ( آخه دخترا هم مگه Squid کانفیگ می کنن ؟ ) امروز می خوایم دو تا acl کاربردی بهتون معرفی کنیم ، فرض کنید که قرار هست به کاربراتون اجازه بدید که بتونن از Cache استفاده کنن ، در واقع اگر اینکار رو نکنید عملا گفتید که Cache سرور غیرفعال باشه
برای اینکار شما اول باید محدوده آدرس IP کلاینت ها رو تعریف کنید با acl و element ای به شکل Src که قبلا گفتیم و بعدش هم با access list معروف http_access بهشون دسترسی Allow بدید ، خوب پس فایل squid.conf رو باز می کنید ، دیگه قسمت های فایل مشخص هست کجا باید وارد کنید اول خط زیر رو برای تعریف کردن محدوده آدرس IP کاربرها اضافه کنید :
acl dummyclients src 192.168.1.0/24
دستور بالا داره میگه که برای محدوده آدرس IP ای که با این Subnetmask تعریف شده یه اسم بزار به نام dummyclients که بعدا بتونیم براش Access list بنویسیم و از این اسم استفاده کنیم ، حالا برای دسترسی دادن به اینترنت کار خاصی نیاز نیست کافیه فقط بگید پروتکل http رو برای dummyclients باز بزار ! اجازه بده برن بیرون از Cache درخواست بفرستن و بیان استفاده کنن بعدش که به شکل زیر هست :
http_access allow dummyclients
خوب حالا هر کسی که جزو این محدوده آدرس IP باشه بهش اجازه دسترسی داده میشه به وب ، اما خوب شاید شما دوست نداشته باشید یه سری چیزها یا یه سری وب سایت ها اصلا Cache بشن که قبلا دلایلش رو گفتیم چرا ، مثلا نمیخاین وب سایت توسینسو برای شما سرورش و اطلاعاتش Cache بشه برای اینکار کافیه اول Tosinso.com رو به عنوان یک element معرفی کنید و بهش اسم بدید و بعدش با deny کردن cache راحت دیگه اجازه Cache شدن رو بگیرید ازش خوب تعریف رو ببینید :
acl dontcache dstdomain .tosinso.com
خوب بالا ما تعریف کردیم که هر چیزی با پسوند Tosinso.com رو به عنوان dontcache در نظر بگیر اما الان فقط یک اسم بردیم ، خوب حالا باید با access list دیگه ای که گفتیم Cache هست اسمش بگیم که deny کن اگر درخواستی برای این سری آدرس اومد cache نکن که این شکلی تعریف میشه :
cache deny dontcache
خوب اینها رو که نوشتید ، فایل رو ذخیره کنید با تغییراتی که دادید و سرویس Squid رو restart کنید تا تغییرات اعمال بشه .
خوب بریم سراغ یکی دیگه از کارهای عملی مربوط به Squid ، فکر کنید رئیستون به شما گفته که هر کسی خواست بره داخل یک وب سایت با موضوع مثلا Book و Learning این اجازه رو بهش نده ! چون کلا از درس خوندن و یادگیری کارکنانش خوشش نمیاد !
خوب اولین راهکارش اینه که دونه دونه لیست وب سایت هایی که با این محتوا وجود دارن رو لیست کنید و برید برای هر کدوم از URL هایی که داره یک Rule بنویسید و مسدودش کنید که عقلانی نیست و کلی زمانبر هست و اگه سایت جدیدی هم بیاد باز زمان می بره تا شناسایی بشه و مسدود بشه .
اما شما می تونید از Regular Expressions استفاده کنید ! یعنی چی ؟ یعنی بگید هر آدرس URL ای که دیدی داخلش کلمه Book یا Learning بود رو اجازه دسترسی بهش نده که خیلی راحت خطوط پیکربندی زیر رو باید در فایل تنظیمات وارد کنید :
acl book1 url_regex book acl learning1 url_regex learning acl clients src 172.16.5.0/24 http_access deny book1 http_access deny learning1 http_access allow clients http_access deny all
خوب به مثال بالا دقت کنید ! خیلی ساده اومدیم اول یه acl درست کردیم که توش کلمه book وجود داشت و بعدش یکی دیگه درست کردیم که کلمه learning توش بود و در ادامه کلاینت هامون رو در شبکه داخلی تعریف کردیم و بعدش هم گفتیم هر جا دیدید روی URL کلمه هایی که تعریف کردیم در این acl ها وجود داشتن همه رو deny کن درسته ؟
این access list به خوبی کار می کنه اما یه نکته مشکل ساز داره !! این نوع تعریف کردن Regular Expressions حالت Case Sensitive داره یعنی چی ؟ یعنی به حروف بزرگ و کوچیک حساس هست ، اگه توی URL شما به جای book مثلا Book باشه مشکلی از نظر این access list وجود نداره ! به همین راحتی !
خوب یکی دیگه از روش های مسدود کردن ، مسدود کردن دسترسی به یک آدرس دومین یا URL خاص هست که شما می دونید محتوای مناسبی نداره برای مجموعتون ! مثلا من میخام دسترسی به محتوای آموزشی وب سایت توسینسو رو برای کاربرام مسدود کنم کافیه خطوط زیر رو در فایل تنظیمات Squid وارد کنم :
acl Learning2 dstdomain www.tosinso.com http_access deny Learning2 http_access allow all
خوب بزارید براتون ترجمه کنم خطوط بالا رو ، توی خط اول یک acl تعریف کردیم که اسمش رو گذاشتیم Learning2 و در آدرس دومین مقصد با استفاده از dstdomain گفتیم که آدرس وب سایت www.tosinso.com رو داشته باشه ، به زبان ساده هر جا گفتیم Learning2 یعنی www.tosinso.com ... توی خط دوم گفتیم که کلیه دسترسی با پروتکل http به Learning2 رو مسدود کن ، یعنی هیچکس نتونه به www.tosinso.com دسترسی داشته باشه و این یعنی مسدود باشه !
به همین سادگی . در ادامه هم گفتیم هر چیز دیگه ای در پروتکل http رو اجازه عبور بشه بده . نکته مهمی که در نحوه نوشتن این acl ها باید حواستون بهش باشه بحث آدرس IP هست ، بعضی از وب سایت ها رو میشه با آدرس IP باز کرد اگر فقط یک وب سایت روی سرور و اون آدرس IP وجود داشته باشن
حالا اگر کاربر به جای وارد کردن آدرس www.tosinso.com آدرس IP وب سایت رو وارد کرد Squid اول نگاه می کنه ببینه که اسم تو acl برابر هست یا خیر ، اگر نبود از FQDN Cache خودش یا همون DNS Cache خودش نگاه می کنه که آیا آدرس IP یکی هست یا نه ...
اگر یکی بود اجازه عبور نمیده ، اگر باز هم نتونست پیدا کنه یک فرآیند Reverse Lookup انجام میده تا بتونه آدرس URL و Domain آیپی درخواستی رو پیدا کنه و مجددا چک کنه که برابر هست یا نه . این فرآیند چون ممکنه زمانبر و طولانی باشه از نظر سرعت وب ، به اینجور acl ها اصطلاحا slow acl میگن یعنی کند عمل می کنن چون عملیات معکوس دارند . اگر میخاین عملیات Reverse Lookup انجام نشه برای این Acl کافیه که از Option یا به شکل –n استفاده کنید تا این عملیات غیرفعال بشه .
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات
محمد نصیری هستم ، بنیانگذار انجمن تخصصی فناوری اطلاعات ایران و مجموعه توسینسو ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 80 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر و ناظر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود