ติดตั้ง squid 2.6.xx เพื่อทำ Proxy server

 Network 

 

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 ที่เราตั้งไว้

บันทึกนี้เขียนที่ GotoKnow โดย 

 คำสำคัญ: network proxy squid km uruscience 
 หมายเลขบันทึก: 150458
 เขียน:  
 อ่าน: คลิก 
 สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ
 แจ้งลบ
 
 แจ้งลบ
บันทึกก่อนนี้
บันทึกใหม่กว่า

ความเห็น

 อนุญาตให้แสดงความเห็นได้เฉพาะสมาชิก
 ไม่อนุญาตให้แสดงความเห็น
{{ kv.current_user.preferred_name }} - เพิ่มความเห็นเพิ่มความเห็น
 ใส่รูปหรือไฟล์