จำกัดขนาดไฟล์ที่ดาวน์โหลดผ่าน squid 3.0

ไม่ว่าจะเพิ่มความเร็วอินเตอร์เน็ตเป็นเท่าไร ดูเหมือนเน็ตก็ยังช้าอยู่เหมือนเดิม ในบทความนี้จะแนะนำอีกวิธีการหนึ่งเพื่อจำกัดขนาดไฟล์ที่สามารถดาวน์โหลดได้ผ่าน squid proxy server โดยสามารถคอนฟิกได้ทั้งแบบจำกัดทั้งหมดทุกคน หรือสามารถแบ่งกลุ่มตามระดับได้

การคอนฟิกในที่นี้เป็นการจำกัดขนาดไฟล์การดาวน์โหลดต่อครั้ง เพื่อป้องกันไม่ให้ผู้ใช้งานดาวน์โหลดไฟล์ขนาดใหญ่ เช่นไฟล์เพลง หนัง ได้

เว็บเซิร์ฟเวอร์ระบบทดสอบ

สำหรับการทดสอบ ในที่นี้เราจะสร้างไฟล์ขนาดต่างๆ บนเว็บเซิร์ฟเวอร์ เพื่อดูว่าการคอนฟิกของ squid มีผลอย่างไร

[root@web-server test]# cat file-download.html
<a href="file-1M.bin">file-1M.bin</a><br>
<a href="file-2M.bin">file-2M.bin</a><br>
<a href="file-3M.bin">file-3M.bin</a><br>
<a href="file-4M.bin">file-4M.bin</a><br>
[root@web-server test]# dd if=/dev/zero of=file-1M.bin bs=1000000 count=1
[root@web-server test]# dd if=/dev/zero of=file-2M.bin bs=1000000 count=2
[root@web-server test]# dd if=/dev/zero of=file-3M.bin bs=1000000 count=3
[root@web-server test]# dd if=/dev/zero of=file-4M.bin bs=1000000 count=4
[root@web-server test]# ls -l
total 9780
-rw-r--r-- 1 root root 1000000 2009-03-14 12:28 file-1M.bin
-rw-r--r-- 1 root root 2000000 2009-03-14 12:28 file-2M.bin
-rw-r--r-- 1 root root 3000000 2009-03-14 12:28 file-3M.bin
-rw-r--r-- 1 root root 4000000 2009-03-14 12:28 file-4M.bin
-rw-r--r-- 1 root root     168 2009-03-14 12:26 file-download.html

คอนฟิก ip และ port ของ squid proxy ลงไปใน browser แล้วทดลองเรียกไปที่ web-server (ip: 192.168.1.1) ไฟล์ file-download.html

list_of_test_file

คอนฟิก reply_body_max_size

คอนฟิกของ squid ที่ใช้สำหรับการจำกัดขนาดของไฟล์ดาวน์โหลดคือ reply_body_max_size รูปแบบการคอนฟิกคือ

reply_body_max_size SIZE UNITS [acl ...]

คำอธิบาย

  • SIZE UNITS คือขนาดของไฟล์ที่ต้องการจำกัด
  • acl เป็นออปชั่น ถ้าไม่ใส่ จะเป็นการจำกัดขนาดไฟล์ทุกคนที่ใช้ผ่าน proxy แต่ถ้าต้องการระบุเป็นกลุ่ม เราสามารถสร้าง acl แล้วนำชื่อ acl นั้นมาต่อท้ายบรรทัดนนี้ได้
  • ดีฟอลต์คอนฟิกที่ติดตั้งมา ไม่มีการจำกัด

หมายเหตุ รูปแบบการคอนฟิกค่า reply_body_max_size ของเวอร์ชั่น 3.0 จะแตกต่างจากเวอร์ชั่นก่อนหน้า เช่น 2.6 คือตัดคำว่า allow/deny ออกไป

ตัวอย่างคอนฟิกการจำกัดขนาดไฟล์ดาวน์โหลดได้สูงสุด 2 MBytes สำหรับทุกคน

[root@squid ~]# cat /etc/squid/squid.conf
...
reply_body_max_size 2 MB
...

หลังจากเปลี่ยนคอนฟิก squid.conf แล้ว ต้องรีโหลดเซอร์วิสของ squid ด้วย เพื่อให้คอนฟิกใหม่มีผล

[root@squid ~]# service squid reload

ทดลองใช้ browser กดดาวน์โหลดไฟล์ต่างๆ บนหน้า file-download.html ของเครื่องเว็บเซิร์ฟเวอร์

ข้อความเตือนว่าไม่สามารถดาวน์โหลดไฟล์ได้ เนื่องจากขนาดไฟล์มีขนาดใหญ่เกินไป “The request or reply is too large.”  (มากกว่า reply_body_max_size)

ตัวอย่างข้อความเตือน เมื่อพยายามดาวน์โหลดไฟล์ขนาด 3MB

the_request_or_reply_is_too_large

แบ่งขนาดไฟล์ดาวน์โหลดเป็นกลุ่ม

ถ้าเราต้องการยกเว้นสำหรับบางกลุ่มเช่น บางคนจำเป็นต้องดาวน์โหลดไฟล์ขนาดใหญ่ๆ อยู่เสมอ เราสามารถสร้าง acl ขึ้นมาเพื่อระบุการแบ่งกลุ่ม แล้วคอนฟิกเข้ากับ reply_body_max_size เพื่อจำกัดขนาดไฟล์แยกเป็นกลุ่มๆ ตาม acl ได้

เช่น ต้องการให้เครื่องไคลเอนต์ที่มี ip เป็น 192.168.2.0/24 (net_group1) สามารถดาวน์โหลดไฟล์ขนาดสูงสุดได้ถึง 3MB แต่ถ้าเป็นเครื่องไคลเอนต์ที่มี ip  192.168.3.0/24 (net_group2) ดาวน์โหลดไฟล์ขนาดสูงสุดได้แค่ 1 MB สามารถคอนฟิกได้ดังนี้

[root@squid ~]# cat /etc/squid/squid.conf
...
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#-------------------------------------------------------------------------------
acl net_group1 src 192.168.2.0/24
acl net_group2 src 192.168.3.0/24
reply_body_max_size 3 MB net_group1
reply_body_max_size 1 MB net_group2
#-------------------------------------------
...

หลังจากเปลี่ยนคอนฟิก squid.conf แล้ว ต้องรีโหลดเซอร์วิสของ squid ด้วย เพื่อให้คอนฟิกใหม่มีผล

[root@squid ~]# service squid reload

ทดลองใช้ browser จากเครื่อง ip ต่างๆ แล้วกดดาวน์โหลดไฟล์ต่างๆ บนหน้า file-download.html ของเครื่องเว็บเซิร์ฟเวอร์

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.