วิธีควบคุมการรับส่งข้อมูลเว็บโดยใช้ Squid Cache และ Cisco Router ใน Linux
งานที่สำคัญอย่างหนึ่งในเครือข่ายคือการควบคุมและจัดการการรับส่งข้อมูลการท่องเว็บของพนักงาน มีวิธีแก้ไขปัญหามากมายที่สามารถจัดการปัญหานี้ได้ หนึ่งในวิธีแก้ปัญหาที่ดีที่สุดคือการใช้แคชปลาหมึกบนเครื่อง Linux Squid สามารถตรวจสอบ จำกัด และแคชการรับส่งข้อมูลเว็บจากเครือข่ายหนึ่งไปยังอีกเครือข่ายหนึ่ง เช่น จาก LAN ไปยังอินเทอร์เน็ต
มีหลายวิธีในการเปลี่ยนเส้นทางคำขอเว็บของลูกค้าไปยังเครื่อง squid ในบทความนี้ เราจะแสดงวิธีเปลี่ยนเส้นทางการรับส่งข้อมูลเว็บจากเราเตอร์ CISCO ไปยังเครื่อง Squid Cache โดยใช้โปรโตคอล WCCP
รูปภาพด้านล่างเป็นตัวอย่างของสถานการณ์พื้นฐาน
ดังที่คุณเห็นในภาพด้านบน การรับส่งข้อมูลเว็บของลูกค้าทั้งหมดไปที่ Cisco Router (นั่นคือเกตเวย์เริ่มต้น) จากนั้นเราเตอร์จะเปลี่ยนเส้นทางแพ็กเก็ตไปยังเครื่อง squid โดยไม่ต้องแจ้งให้ทราบ ตอนนี้ squid สามารถเล่นตามบทบาทของมันได้ บทบาทหลักคือ การแคชเนื้อหาเว็บ, จำกัดการเข้าถึงตามโดเมน, ช่วงเวลา, ที่อยู่ IP, ขนาดของไฟล์ ฯลฯ
เราตรวจสอบการกำหนดค่าของสถานการณ์นี้ในสองขั้นตอนหลัก ขั้นแรกเราควรติดตั้งและกำหนดค่า squid และ Linux จากนั้นกำหนดค่าเราเตอร์ให้เปลี่ยนเส้นทางแพ็กเก็ตการรับส่งข้อมูลเว็บไปยัง squid โดยใช้โปรโตคอล WCCP
สภาพแวดล้อมการทดสอบ
ในสถานการณ์นี้ ฉันใช้ CENTOS 6.5 เป็นเซิร์ฟเวอร์ LINUX ของฉัน และ Cisco 2691 เป็นระบบเราเตอร์ของฉัน
Operating System: CENTOS 6.5
Application: Squid
Router: Cisco 2691
ขั้นตอนที่ 1: การติดตั้ง Squid Cache
Squid พร้อมใช้งานบนพื้นที่เก็บข้อมูลเริ่มต้นของ CENTOS ก่อนอื่นเราจะติดตั้งโดยใช้คำสั่ง yum ที่น่ารัก จากนั้นจึงเริ่มบริการ และสุดท้ายก็ตั้งค่าการเริ่มบริการ squid โดยอัตโนมัติ
yum -y install squid
service squid start
chkconfig squid on
ขั้นตอนที่ 2: เตรียมแคชปลาหมึก
ตอนนี้เราต้องเปลี่ยนพฤติกรรมเริ่มต้นบางอย่างของระบบปฏิบัติการ Centos เราต้องเปิดใช้งานการส่งต่อแพ็กเก็ตและปิดใช้งานตัวกรองเส้นทางย้อนกลับ (RPF) เราเปิดใช้งานการส่งต่อแพ็กเก็ตเพื่อให้ CentOS ทำหน้าที่เป็นตัวส่งต่อที่โปร่งใส (เช่น เราเตอร์)
ให้ฉันอธิบายในรายละเอียดเพิ่มเติม เมื่อการรับส่งข้อมูลเข้าสู่ centos จะมีที่อยู่ต้นทางและปลายทาง ตัวอย่างเช่น เมื่อไคลเอนต์เข้าสู่ www.example.com บนเบราว์เซอร์ของเขา/เธอ แพ็กเก็ตคำขอ http สร้างขึ้นและ มีที่อยู่ IP ต้นทางของเครื่องไคลเอนต์ (เช่น 192.168.1.20) และที่อยู่ IP ปลายทางของเซิร์ฟเวอร์ example.com (เช่น 2.2.2.2)
ดังนั้นเมื่อ centos ได้รับแพ็กเก็ต มันจะตรวจพบว่าเป็นแพ็กเก็ตที่ไม่ถูกต้องเนื่องจากที่อยู่ IP ของ centos ไม่ใช่ที่อยู่ปลายทางของแพ็กเก็ต ด้วยเหตุผลด้านความปลอดภัย centos จะทิ้งแพ็กเก็ต แต่เราต้องการจาก squid ให้ทำงานในโหมดโปร่งใส เราแจ้งสถานการณ์นี้ให้ centos ทราบโดยเปิดใช้งานยาการส่งต่อแพ็กเก็ต
ต่อไปเราควรปิดการใช้งานการกรองเส้นทางย้อนกลับเพื่อให้ centos ยอมรับแพ็กเก็ตที่ไม่สามารถเข้าถึงได้โดยเครื่องปลาหมึกหรือแพ็กเก็ตที่ไม่มีที่อยู่ IP ในเครือข่ายย่อยเดียวกันของเครื่องปลาหมึก
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1 #set to 1 for enable the packet forwarding feature
net.ipv4.conf.default.rp_filter = 0 # set to 0 for disable the reverse path filter behavior
ต่อไปเราต้องสร้างอินเทอร์เฟซ GRE บนเครื่อง CENTOS เพื่ออะไร?? ให้ฉันอธิบายเพิ่มเติม โปรโตคอล WCCP ทำงานผ่านอุโมงค์ GRE ซึ่งหมายความว่าภาษาระหว่างเราเตอร์และ Squid คือ GRE ดังนั้น centos จำเป็นต้องมีอินเทอร์เฟซ GRE สำหรับ De- ห่อหุ้มแพ็กเก็ต GRE
เราควรสร้างไฟล์การกำหนดค่าสำหรับอินเทอร์เฟซ GRE ในเส้นทาง “/etc/sysconfig/network-script/ifcfg-gre0 ”
ป้อนรหัสด้านล่างในไฟล์การกำหนดค่า ifcfg-gre0
DEVICE=gre0
BOOTPROTO=static
IPADDR=10.0.0.2 #unused ip address in your network
NETMASK=255.255.255.252
ONBOOT=yes
IPV6INIT=no
หลังจากสร้างอินเทอร์เฟซ GRE แล้ว เราจำเป็นต้องรีสตาร์ทบริการเครือข่าย
service network restart
ขั้นตอนที่ 3: การกำหนดค่า Squid Cache
เราต้องบอกให้ squid ยอมรับแพ็กเก็ต WCCP จากเราเตอร์ ป้อนรหัสด้านล่างในไฟล์ /etc/squid/squid.conf
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
บันทึกไฟล์การกำหนดค่าและเริ่มบริการ squid ใหม่
service squid restart
Squid ฟังแพ็กเก็ตในพอร์ต 3128 แต่หมายเลขพอร์ตปลายทางของแพ็กเก็ตของเราคือ 80 ดังนั้นสำหรับการเปลี่ยนพอร์ตปลายทาง 80 เป็น 3128< เราต้องสร้างกฎ NAT บนไฟร์วอลล์ที่รวม CENTOS (ซึ่งมีชื่อว่า iptable)
iptables -t nat -A PREROUTING -i gre0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -j MASQUERADE
ขั้นตอนที่ 4: การกำหนดค่าเราเตอร์ของ Cisco
อันดับแรก เราควรเปิดใช้งาน WCCP บนเราเตอร์ Cisco
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
ต่อไปเราจะกำหนดรายการเข้าถึงอื่นสำหรับวัตถุประสงค์ที่แตกต่างกันสองประการ อันดับแรกเราควรยกเว้นการรับส่งข้อมูล SQUID จากการเปลี่ยนเส้นทางโดยโปรโตคอล WCCP (หากไม่เราตกอยู่ในวงวนไม่มีที่สิ้นสุด!!) ประการที่สองเรากำหนด การรับส่งข้อมูล LAN ใดที่เราต้องการส่งผ่าน WCCP และ SQUID
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
หลังจากสร้างรายการเข้าถึงแล้ว เราจะต้องกำหนดค่าโปรโตคอล WCCP บนเราเตอร์
R1(config)# ip wccp web-cache redirect-list LAN-TRAFFIC group-list SQUID-MACHINE
ทุกสิ่งพร้อมสำหรับขั้นตอนสุดท้ายแล้ว เราต้องบอกเราเตอร์ว่าอินเทอร์เฟซ/อินเทอร์เฟซใดที่ต้องเปลี่ยนเส้นทางการรับส่งข้อมูลโดยใช้การกำหนดค่า WCCP
R1(config)#interface fastEthernet 0/0
R1((config-if)# ip wccp web-cache redirect in
สรุป
ถึงเวลาสรุปคำสั่งและข้อความทั้งหมดเป็นสองสามบรรทัดเพื่อความเข้าใจที่ดีขึ้น ตามสถานการณ์ที่เราเปลี่ยนเส้นทางแพ็กเก็ตการท่องเว็บของพนักงาน (ซึ่งอยู่บนพอร์ต TCP 80) จาก ROUTER (ซึ่งเป็นเกตเวย์เริ่มต้นของ ลูกค้า) ไปยังเครื่องแคชปลาหมึกโดยใช้โปรโตคอล WCCP
กระบวนการทั้งหมดนี้เกิดขึ้นอย่างเงียบๆ และไม่มีการกำหนดค่าเพิ่มเติมในฝั่งไคลเอ็นต์ เราจึงสามารถควบคุมและกำหนดนโยบายการเข้าชมเว็บในระบบ LAN ได้ ตัวอย่างเช่น เราสามารถเข้าถึงการท่องเว็บได้ในเวลาจำกัด จำกัดขนาดการดาวน์โหลดสูงสุด กำหนดบัญชีดำและบัญชีขาวที่กำหนดเองของเรา สร้างรายงานการใช้กิจกรรมอินเทอร์เน็ตฉบับเต็ม และอื่นๆ
ข้อเท็จจริงที่น่าสนใจประการหนึ่งในสถานการณ์นี้คือเมื่อเครื่องปลาหมึกหยุดทำงานเราเตอร์ตรวจพบปัญหานี้และหยุดการเปลี่ยนเส้นทางแพ็คเก็ตไปหามัน เพื่อให้คุณสามารถเพลิดเพลินกับการหยุดทำงานเป็นศูนย์ในเครือข่ายของคุณ
หากคุณมีคำถามใด ๆ เกี่ยวกับบทความนี้ โปรดตอบกลับผ่านช่องแสดงความคิดเห็นด้านล่าง