یکی از کارهای مهم در شبکه کنترل و مدیریت ترافیک مصرفی کارمندان می باشد، راه حل های بسیاری وجود دارد که می توان این پروژه را هندل کرد، یکی از بهترین راه حل ها استفاده از squid cache برروی یک سیستم لینوکس می باشد. Squid می تواند ترافیک های وب را از شبکه ای به شبکه دیگر برای مثال از یک lan به اینترنت را بازرسی، محدود و cache کند.
چندین راه برای هدایت درخواست های وب کاربران به ماشین squid وجود دارد، در این مقاله ما نشان خواهیم دادکه شما چگونه باید ترافیک وب را از یک router سیسکو به squid cahe با استفاده از پروتکل wccp هدایت کنید.
تصویر زیر مثالی از یک سناریو ی ابتدایی می باشد.
همانطور که شما می بینید در تصویر بالا ترافیک تمام کلاینت ها ابتدا به روتر سیسکو رفته و سپس روتر پکت ها را به ماشین squid هدایت می کند، حالا می توان نقش آن را بازی کرد، نقش اصلی آن کش کردن محتوای وب است، محدود کردن دسترسی براساس دامین، اینتروال زمان، آدرس آی پی، سایز فایل ها و ... می باشد.
ما پیکربندی این سناریو را در دو گام بزرگ بازبینی می کنیم، ابتدا ما می خوهیم squid را نصب و پیکربندی کنیم، سپس روتر را برای هدایت ترافیک وب به squid با استفاده از پروتکل WCCP پیکربندی نماییم.
آزمایش محیط
در این سناریو من از CentOS 6.5 به عنوان سرور لینوکس و از Cisco 2691 به عنوان روتر استفاده می کنم.
گام 1:نصب Squid Cache
Squid برروی ریپوزیتوری پیش فرض centos قابل دسترسی است، ما ابتدا آنرا با استفاده از دستور yum نصب می کنیم و سپس سرویس های آنها را استارت کرده و سرانجام استارت اتوماتیک سرویس squid را تنظیم می کنیم.
گام 2: آماده سازی squid cache
حالا ما باید برخی رفتارهای سیستم عامل centos را تغییر دهیم، ما نیاز داریم packet forwarding را فعال کرده و reverse Path filter(RFP) را غیرفعال کنیم، ما packet forwarding را برای اینکه centos به عنوان یک forwarder نامرئی همانند روتر عمل کند فعال می کنیم. اجازه بدهید جزئیات بیشتری را توضیح دهیم، هنگامی که ترافیک در centos وارد می شود آدرس های مبدا و مقصد آن مشخص است، برای مثال زمانیکه یک کلاینت در مرورگر خود آدرس www.example.com را وارد می کند ، یک http request ایجاد شده و آدرس آی پی مبدا ماشین کلاینت (مثلا 192.168.1.20) و آدرس آی پی مقصد سرور example.com(مثلا 2.2.2.2) خواهد بود.
بنابراین ، هنگامیکه پکت توسط centos می رسد آن به عنوان یک پکت اشتباه تشخیص داده می شود به دلیل اینکه آدرس آی پی centos به عنوان آدرس آی پی مقصد نمی باشد، به دلایل امنیتی centos پکت را دور میریزد، اما ما از squid می خواهیم که در مد نامرئی کار کند. ما این وضعیت را به centos توسط فعال کردن گزینه ی packet forwarding به centos می گوییم.
سپس ما Reverse Path Filtering را غیرفعال خواهیم کرد برای اینکه به centos اجازه دهیم که پکت های غیرقابل دسترس توسط ماشین squid را قبول کند و یا آن پکت هایی را که آدرس آی پی آنها در همان subnet نیستند.
سپس ما نیاز به ایجاد یک اینترفیس GRE برروی ماشین centos داریم،برای چه؟؟ اجازه دهید بیشتر توضیح دهیم، پروتکل WCCP از طریق یک تانل GRE کار می کند، این به این معنی است که زبان بین squid و روتر، GRE است، بنابراین centos نیاز به یک اینترفیس GRE برای محصور کردن پکت های GRE داریم.
ما فایل پیکربندی ای برای اینترفیس GRE در مسیر /etc/sysconfig/network-script/ifcfg-gre0 ایجاد کرده ایم.
کد های زیر را در فایل پیکربندی ifcfg-gre0 وارد کنید.
بعد از ایجاد یک اینترفیس GRE ما نیاز به restart کردن سرویس شبکه داریم.
گام 3: پیکربندی squid cache
ما نیاز به قبول پکت های WCCP از روتر داریم. کد های زیر را در فایل /etc/squid/squid.conf وارد کنید.
فایل پیکربندی را ذخیره کرده و سرویس squid را ریستارت کنید.
Squid برروی پورت 3128 پکت ها را گوش می کند، اما مقصد پکت ما شماره پورت 80 است، بنابراین برای تعویض پورت 80 به 3128، ما نیاز به ایجاد یک رول NAT برروی Centos داریم. (با استفاده از iptables)
گام 4:پیکربندی روتر سیسکو
ابتدا ما WCCP را برروی روتر فعال می کنیم.
سپس ما لیست دسترسی را برای دو هدف متفاوت تعرف می کنیم که ابتدا ما باید از طریق هدایت توسط پروتکل WCCP ترافیک های squid را جدا کنیم (اگر نه ما در لوپ خواهیم افتاد!!) دوم ما باید ترافیک های LAN را که می خواهیم از طریق WCCP و SQUID عبور کنند را تعریف کنیم.
پس از ایجاد access-list مان ما باید پروتکل WCCP را برروی روتر ایجاد کنیم.
همه چیز برای گام نهایی آماده است، ما باید به روتر بگوییم که هر اینترفیسی که باید ترافیک ها با استفاده از پیکربندی WCCP آنها هدایت کنند.
خلاصه
حال زمان آن است که برای فهم بهتر تمام دستورات و متن ها را خلاصه سازی کنیم، طبق سناریو ما ترافیک وب را را هدایت می کنیم(که برروی پورت 80 TCP ) از روتر (که default gateway کلاینت است) به squid cache با استفاده از پروتکل WCCP می باشد.
تمام این پروسه ها به صورت مسکوت اتفاق افتاده است و هیچ پیکربندی اضافی ای برروی کلاینت مقابل نیاز نمی باشد. بنابراین ما م یتوانیم پالیسی هایی را برروی ترافیک های وب در LAN تنظیم و کنترل کنیم. برای مثال ما می توانیم دسترسی به وب را با محدود کردن زمان، محدود کردن ماکزیمم حجم دانلود، تعریف blacklist و whitelist شخصی مان، ایجاد گزارش های کامل از مصرف اینترنت و ... تعریف کنیم.
یکی از نکات جالب در این سناریو زمانی است که ماشین squid پایین بودن روتر را تشخیص می دهد و هدایت پکت ها را متوقف می کند، بنابراین شما می توانید بدون هیچ downtime ی در شبکه این کار را انجام دهید.
چندین راه برای هدایت درخواست های وب کاربران به ماشین squid وجود دارد، در این مقاله ما نشان خواهیم دادکه شما چگونه باید ترافیک وب را از یک router سیسکو به squid cahe با استفاده از پروتکل wccp هدایت کنید.
تصویر زیر مثالی از یک سناریو ی ابتدایی می باشد.
همانطور که شما می بینید در تصویر بالا ترافیک تمام کلاینت ها ابتدا به روتر سیسکو رفته و سپس روتر پکت ها را به ماشین squid هدایت می کند، حالا می توان نقش آن را بازی کرد، نقش اصلی آن کش کردن محتوای وب است، محدود کردن دسترسی براساس دامین، اینتروال زمان، آدرس آی پی، سایز فایل ها و ... می باشد.
ما پیکربندی این سناریو را در دو گام بزرگ بازبینی می کنیم، ابتدا ما می خوهیم squid را نصب و پیکربندی کنیم، سپس روتر را برای هدایت ترافیک وب به squid با استفاده از پروتکل WCCP پیکربندی نماییم.
آزمایش محیط
در این سناریو من از CentOS 6.5 به عنوان سرور لینوکس و از Cisco 2691 به عنوان روتر استفاده می کنم.
کد:
[B]Operating System[/B]: CENTOS 6.5 [B]Application[/B]: Squid [B]Router[/B]: Cisco 2691
گام 1:نصب Squid Cache
Squid برروی ریپوزیتوری پیش فرض centos قابل دسترسی است، ما ابتدا آنرا با استفاده از دستور yum نصب می کنیم و سپس سرویس های آنها را استارت کرده و سرانجام استارت اتوماتیک سرویس squid را تنظیم می کنیم.
کد:
# yum -y install squid # service squid start # chkconfig squid on
گام 2: آماده سازی squid cache
حالا ما باید برخی رفتارهای سیستم عامل centos را تغییر دهیم، ما نیاز داریم packet forwarding را فعال کرده و reverse Path filter(RFP) را غیرفعال کنیم، ما packet forwarding را برای اینکه centos به عنوان یک forwarder نامرئی همانند روتر عمل کند فعال می کنیم. اجازه بدهید جزئیات بیشتری را توضیح دهیم، هنگامی که ترافیک در centos وارد می شود آدرس های مبدا و مقصد آن مشخص است، برای مثال زمانیکه یک کلاینت در مرورگر خود آدرس www.example.com را وارد می کند ، یک http request ایجاد شده و آدرس آی پی مبدا ماشین کلاینت (مثلا 192.168.1.20) و آدرس آی پی مقصد سرور example.com(مثلا 2.2.2.2) خواهد بود.
بنابراین ، هنگامیکه پکت توسط centos می رسد آن به عنوان یک پکت اشتباه تشخیص داده می شود به دلیل اینکه آدرس آی پی centos به عنوان آدرس آی پی مقصد نمی باشد، به دلایل امنیتی centos پکت را دور میریزد، اما ما از squid می خواهیم که در مد نامرئی کار کند. ما این وضعیت را به centos توسط فعال کردن گزینه ی packet forwarding به centos می گوییم.
سپس ما Reverse Path Filtering را غیرفعال خواهیم کرد برای اینکه به centos اجازه دهیم که پکت های غیرقابل دسترس توسط ماشین squid را قبول کند و یا آن پکت هایی را که آدرس آی پی آنها در همان subnet نیستند.
کد:
[LEFT]# [B]nano [/B]/etc/sysctl.conf [B]net.ipv4.ip_forward = 1[/B] #set to 1 for enable the packet forwarding feature [B]net.ipv4.conf.default.rp_filter = 0[/B] # set to 0 for disable the reverse path filter behavior [/LEFT]
ما فایل پیکربندی ای برای اینترفیس GRE در مسیر /etc/sysconfig/network-script/ifcfg-gre0 ایجاد کرده ایم.
کد های زیر را در فایل پیکربندی ifcfg-gre0 وارد کنید.
کد:
[LEFT]DEVICE=gre0 BOOTPROTO=static IPADDR=10.0.0.2 #unused ip address in your network NETMASK=255.255.255.252 ONBOOT=yes IPV6INIT=no [/LEFT]
کد:
# service network restart
گام 3: پیکربندی squid cache
ما نیاز به قبول پکت های WCCP از روتر داریم. کد های زیر را در فایل /etc/squid/squid.conf وارد کنید.
کد:
[LEFT]http_port 3128 intercept # Define SQUID listening port wccp2_router 192.168.1.254 #ip address of the router wccp2_forwarding_method gre wccp2_return_method gre wccp2_service standard 0 [/LEFT]
کد:
# service squid restart
Squid برروی پورت 3128 پکت ها را گوش می کند، اما مقصد پکت ما شماره پورت 80 است، بنابراین برای تعویض پورت 80 به 3128، ما نیاز به ایجاد یک رول NAT برروی Centos داریم. (با استفاده از iptables)
کد:
[LEFT]# iptables -t nat -A PREROUTING -i gre0 -p tcp --dport 80 -j REDIRECT --to-port 3128 # iptables -t nat -A POSTROUTING -j MASQUERADE [/LEFT]
گام 4:پیکربندی روتر سیسکو
ابتدا ما WCCP را برروی روتر فعال می کنیم.
کد:
[LEFT]R1(config)# ip wccp version 2 Then we must use an ACL for introducing SQUID cache machine to router R1(config)# ip access-list standard SQUID-MACHINE R1(config-std-nacl)# permit host 192.168.1.10 [/LEFT]
کد:
[LEFT]R1(config)#ip access-list LAN-TRAFFICS R1(config-ext-nacl)#deny ip host 192.168.1.10 any #Prevent SQUID to get in loop R1(config-ext-nacl)#permit tcp 192.168.1.0 0.0.0.255 any equal www #define LAN Traffics [/LEFT]
کد:
[LEFT]R1(config)# ip wccp web-cache redirect-list LAN-TRAFFIC group-list SQUID-MACHINE [/LEFT]
کد:
[LEFT]R1(config)#interface fastEthernet 0/0 R1((config-if)# ip wccp web-cache redirect in [/LEFT]
حال زمان آن است که برای فهم بهتر تمام دستورات و متن ها را خلاصه سازی کنیم، طبق سناریو ما ترافیک وب را را هدایت می کنیم(که برروی پورت 80 TCP ) از روتر (که default gateway کلاینت است) به squid cache با استفاده از پروتکل WCCP می باشد.
تمام این پروسه ها به صورت مسکوت اتفاق افتاده است و هیچ پیکربندی اضافی ای برروی کلاینت مقابل نیاز نمی باشد. بنابراین ما م یتوانیم پالیسی هایی را برروی ترافیک های وب در LAN تنظیم و کنترل کنیم. برای مثال ما می توانیم دسترسی به وب را با محدود کردن زمان، محدود کردن ماکزیمم حجم دانلود، تعریف blacklist و whitelist شخصی مان، ایجاد گزارش های کامل از مصرف اینترنت و ... تعریف کنیم.
یکی از نکات جالب در این سناریو زمانی است که ماشین squid پایین بودن روتر را تشخیص می دهد و هدایت پکت ها را متوقف می کند، بنابراین شما می توانید بدون هیچ downtime ی در شبکه این کار را انجام دهید.