Squid โปรแกรม Proxy Server ที่มีประสิทธิภาพสูง มีคุณสมบัติน่าสนใจมากมาย สามารถช่วยให้การใช้แบนด์วิธของเครือข่ายเป็นไปอย่างคุ้มค่า เรื่องราวของ Squid ยังมีสิ่งที่ต้องศึกษาอีกมากมาย
นับตั้งแต่ระบบเครือข่ายอินเทอร์เน็ต ได้เริ่มเข้ามามีบทบาทในการสื่อสาร เป็นเสมือนแหล่งข้อมูลจำนวนมหาศาล และช่องทางการดำเนินกิจกรรมต่าง ๆ มากมาย ความต้องการที่จะเข้าสู่อินเทอร์เน็ต และใช้บริการจากเว็บไซต์จึงเป็นสิ่งที่องค์กร และหน่วยงานต่าง ๆ มีความจำเป็นต้องจัดวางระบบเครือข่ายของตนเองให้สามารถบริการนี้แก่ผู้ใช้งานภายในองค์กรอย่างมีประสิทธิภาพ การใช้อินเทอร์เน็ตร่วมกันด้วยคอรเน็คชันเดียว ด้วยเทคนิคต่าง ๆ จึงถูกนำมาใช้ ไม่ว่าจะเป็นเทคนิคการ NAT (Network Address Translation) หรือเทคนิคการทำ Proxy Service ทั้งนี้ด้วยความต้องการที่จะลดค่าใช้จ่ายเกี่ยวกับค่าบริการอินเทอร์เน็ต และค่าใช้จ่ายในการเชื่อมต่อสัญญาณนั่นเอง
รูปแบบการแชร์อินเทอร์เน็ตดังกล่าว สามารถกระทำได้หลายวิธี
ทั้งนี้ขึ้นอยู่กับชนิดของระบบสื่อสารที่เลือกใช้ การลงทุนด้านอุปกรณ์
ลักษณะการใช้งาน และประสิทธิภาพที่ต้องการ เช่น
หากเป็นองค์กรขนาดใหญ่ที่จำเป็นต้องใช้ IP Address จริง
และมีการเชื่อมต่อแบบถาวร ก็น่าจะลงทุนเช่าสาย Leased Line
และใช้เราเตอร์เป็นอุปกรณ์เชื่อมต่อ
แต่ถ้าเป็นร้านบริการอินเทอร์เน็ตขนาดเล็กก็อาจจะใช้โมเด็มแบบ Dial up
หรือบริการ ADSL และแชร์อินเทอร์เน็ตด้วยอุปกรณ์ประเภท IP Sharer
ก็เพียงพอแล้ว
อย่างไรก็ตามความเร็วของการใช้งานอินเทอร์เน็ตร่วมกันเช่นนี้ จะขึ้นอยู่กับจำนวนผู้ใช้งาน และประเภทของบริการที่เรียกใช้เข้าสู่อินเทอร์เน็ต เนื่องจากแบนด์วิธของช่องสัญญาณมีจำกัดนั่นเอง ยิ่งมีจำนวนการใช้งานมากเท่าไหร่ก็ยิ่งทำให้ความเร็วเฉลี่ยที่ผู้ใช้งานแต่ละคนได้รับก็ยิ่งลดลงเท่านั้น จึงจำเป็นต้องหาวิธีการที่จะประหยัดการใช้งานช่องทางสื่อสารให้มากที่สุด วิธีการหนึ่งที่จะช่วยให้งานบริการประเภท Web Service ได้ก็คือ การใช้งาน Proxy Server
Proxy Server
Proxy Server หมายถึงอุปกรณ์ในระบบเครือข่ายที่รับเอาการร้องขอใช้บริการ ( request ) จากเครื่องลูกข่าย ได้แก่ โปรแกรมเว็บบราวเซอร์ หรือ โปรแกรม FTP Client แล้วส่งผ่านการร้องขอนั้นไปยังเซิร์ฟเวอร์ปลายทางในเครือข่ายอินเทอร์เน็ต ดังนั้น Proxy Server จึงเปรียบเสมือนตัวแทนของเครื่องลูกข่ายที่อยู่ภายในระบบและเป็นตัวกลางระหว่างเครือข่ายภายในกับเครือข่ายภายนอก โดยมีภาระหน้าที่ที่ถูกกำหนดให้รับผิดชอบแตกต่างกันออกไปตามความต้องการของผู้ออกแบบระบบ เช่น Firewall Proxy ทำหน้าที่รักษาความปลอดภัยให้แก่ระบบ เป็นต้น
Squid
ระบบปฏิบัติการลีนุกซ์ มีโปรแกรม Proxy Server ที่มีประสิทธิภาพสูงมาก คือ Squid ซึ่งเป็นโปรแกรมประเภท Proxy Caching Server สำหรับการให้บริการ Web Caching Service คือ จะคอยรับคำร้องขอบริการจากเครื่องลูกข่าย และส่งผ่านไปยังเซิร์ฟเวอร์ปลายทางที่เหมาะสม ข้อมูลต่าง ๆ ที่ผ่านเข้ามาจะถูกสำเนาเก็บไว้ในหน่วยความจำแคช และดิสก์ ดังนั้นเมื่อมีการร้องขอข้อมูลซ้ำอีกในครั้งต่อมาจะสามารถนำข้อมูลในแคชมาให้บริการได้รวดเร็วกว่าการติดต่อไปยังเซิร์ฟเวอร์โดยตรง ช่วยให้ลดการใช้ช่องทางสื่อสารข้อมูลลงได้ นอกจากนี้ Squid ยังมีคุณสมบัติเป็น Firewall Proxy อีกด้วย
อย่างไรก็ตาม Squid เป็นเพียง Web Only Cache หมายถึง จะทำงานกับโปรโตคอล HTTP โดยเฉพาะเท่านั้น จะไม่สามารถแคชข้อมูลจากโปรโตคอลอื่น ๆ เช่น RealAudio หรือ FTP ได้ ยกเว้นกรณีที่ FTP นั้นทำงานโดยโปรโตคอล HTTP ซึ่งมีเพียงส่วนน้อย และสำหรับโปรโตคอล SSL แล้ว Squid สามารถทำการแคชการบริการได้ การใช้งานที่ต้องเข้าสู่เว็บไซต์ที่ใช้ SSL เช่น เว็บไซต์บริการอีเมล์ฟรีต่าง ๆ จึงไม่มีปัญหาแต่อย่างใด
การคอนฟิกและติดตั้ง squid
1. ขั้นติดตั้ง
cd /usr/local/src
wget
http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE6.tar.bz2
tar jxvf squid-2.6.STABLE6.tar.bz2
cd squid-2.6.STABLE6
CFLAGS="-O2 -march=i486 -mcpu=i686"
./configure --prefix=/usr --localstatedir=/var/squid
--datadir=/usr/share/squid --mandir=/usr/share/man
--sysconfdir=/etc/squid --enable-referer-log
make
make install
groupadd proxy
useradd -g proxy -s /dev/null proxy >/dev/null 2>&1
mkdir -p /var/squid/cache
mkdir -p /var/squid/logs
chown -R proxy.proxy /var/squid/cache /var/squid/logs
2. ขั้นคอนฟิก
แก้ไขไฟล์ squid.conf
pico /etc/squid/squid.conf
http_port 8080 ; คือหมายเลข Port ที่ Squid ใช้งานปกติจะเป็น 3129
แต่ผมใช้ Port 8080
icp_port 3130
acl QUERY urlpath_regex cgi-bin ?
no_cache deny QUERY
cache_mem 32 MB ; หน่วยความจำที่ใช้เก็บ cache ประมาฯ 1/4 ของ Ram
ของเครื่อง
cache_swap_low 90
cache_swap_high 95
cache_dir diskd /var/squid/cache 1000 32 256 ;
กำหนดตำแหน่งไดเร็กทอรี่เก็บข้อมูลของ Cache ได้แบ่ง partition
ไว้แล้วตอนติดตั้ง Linux
cache_access_log /var/squid/logs/access.log ; ที่เก็บ Lod File
ได้แบ่ง partition ไว้แล้วตอนติดตั้ง Linux
cache_log /var/squid/logs/cache.log ; ที่เก็บ Lod File ได้แบ่ง
partition ไว้แล้วตอนติดตั้ง Linux
cache_store_log /var/squid/logs/store.log ; ที่เก็บ Lod File
ได้แบ่ง partition ไว้แล้วตอนติดตั้ง Linux
acl all src 0.0.0.0/0.0.0.0
acl localnet src 192.168.1.0/24 ; หมายเลข IP
เครื่องลูกที่อนุญาตให้ใช้ Cache ได้
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
http_access allow localhost ; อนุญาตให้ใช้ Cache ได้
http_access allow manager localhost
http_access allow localnet
http_access deny all ; ไม่อนุญาตบุคคลภายนอกให้ใช้ Cache
cache_mgr root
cache_effective_user squid
cache_effective_group squid
ถ้าต้องการทำ Transparent Proxy สำหรับ squid 2.4.xx
ให้แก้ไข ไฟล์ squid.conf
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
สำหรับ squid เวอร์ชั่น 2.6 การทำ Transparent Proxy แบบเก่าๆ
ไม่สามารถใช้งานได้ครับ มีการเปลี่ยน statement ใน config file
ซึ่งจะมีผลต่อเซิร์ฟเวอร์ที่ตั้งเป็น transparent proxy
จากเดิมที่กำหนดทำนองนี้:
http_port
8080
httpd_accel_host
virtual
httpd_accel_port
80
httpd_accel_with_proxy
on
httpd_accel_uses_host_header on
ก็ลดเหลือแค่นี้:
http_port 3128
แก้เป็น
http_port 8080 transparent
โดยคำหลัก httpd_accel ทั้งหลายแหล่ จะเลิกใช้
สร้างที่เก็บ Cache ของ squid
squid -zD
ทำ Nat เพื่อให้เครื่องลูกข่ายสามารถออกอินเทอร์เน็ตได้
chmod 755 /etc/rc.d/rc.ip_forward
pico /etc/rc.d/rc.nat
เพิ่มคำสั่งนี้ลงไป
#!/bin/bash
IFINT="192.168.1.0/24"
#Flush
iptables -F
iptables -X
iptables -t nat -F
#NAT
iptables -t nat -A POSTROUTING -d ! $IFINT -j MASQUERADE
iptables -A FORWARD -s $IFINT -j ACCEPT
iptables -A FORWARD -d $IFINT -j ACCEPT
iptables -A FORWARD -j DROP
#Transparent Proxy
iptables -t nat -A PREROUTING -p tcp -s $IFINT --dport 80 -j
REDIRECT --to-port 8080
แก้ไขไฟล์ rc.local ให้ทำงานทุกครั้งที่เปิดเครื่อง
pico /etc/rc.d/rc.local
เพิ่มคำสั่งนี้ลงไป
#Start NAT
NAT=/etc/rc.d
if [ -f $NAT/rc.nat ]
then
echo "NAT Server Start
>>>"
$NAT/rc.nat
fi
#Start Squid 2.6
SQ=/usr/sbin
if [ -f $SQ/squid ]
then
echo "Squid 2.6 Server
Start >>>"
$SQ/squid
fi
กำหนดค่าของไฟล์ให้สามารถทำงานได้
chmod 755 /etc/rc.d/rc.nat
สั่งให้ squid และ Nat ทำงาน
/etc/rc.d/rc.ip_forward start
squid &
ทดสอบว่า squid ทำงานหรือเปล่าโดยใช้คำสั่ง
ps aux | grep squid
root 9938 0.0
0.2 3824 1160
? Ss
Nov08 0:00 squid
proxy 9940 0.0 2.6 15088
13328 ?
S Nov08 0:19 (squid)
root 27076 0.0 0.1
1772 584 pts/0 D+
14:59 0:00 grep squid
ถ้ามี Proccesses แสดงว่า squid ทำงานแล้วครับ
เช็คว่า เครื่องลูกเข้าเว็บไซต์ว่าผ่าน proxy server
ที่เราสร้างไว้หรือเปล่าใช้คำสั่งนี้ครับ
tail -f /var/squid/logs/access.log
1166688048.528 38 192.168.16.68
TCP_MISS/200 829 GET http://hits.truehits.in.th/data/a0000020.js
- DIRECT/164.115.2.134 application/x-javascript
1166688048.992 1053 192.168.16.145 TCP_MISS/502 1428
POST http://208.66.194.215/login.php
- DIRECT/208.66.194.215 text/html
1166688049.003 14243 192.168.16.204 TCP_MISS/200 2126 GET
http://nprotect.pangya.in.th/nProtect/GameGuard/Pangya/RealServer/update.cfg?
- DIRECT/203.195.98.22
1166688049.444 18413 192.168.16.115 TCP_MISS/200 90152 GET
http://skyscraperpage.com/diagrams/images/12111.gif
- DIRECT/66.36.242.113 image/gif
1166688049.492 2274 192.168.16.115 TCP_MISS/200 15753
GET http://skyscraperpage.com/diagrams/images/3569.gif
- DIRECT/66.36.242.113 image/gif
1166688049.532 842 192.168.16.61 TCP_MISS/200 878
GET http://rad.msn.com/ADSAdClient31.dll?
- DIRECT/207.68.178.16 text/html
1166688049.713 1260 192.168.16.177 TCP_MISS/200 376
POST http://207.46.107.55/gateway/gateway.dll?
- DIRECT/207.46.107.55 application/x-msn-messenger
1166688049.792 11621 192.168.16.115 TCP_MISS/200 44077 GET
http://skyscraperpage.com/diagrams/images/34199.gif
- DIRECT/66.36.242.113 image/gif
ถ้าแสดงหรือมีการเคลือนไหวของ access log
ตามที่มีเครื่องลูกเข้าเว็บไซต์
แสดงว่าเครื่องลูกเข้าอินเทอร์เน็ตโดยผ่าน Proxy ที่เราตั้งไว้
ไม่มีความเห็น