Squid Proxy Server

มาทำ Proxy Server ด้วย Squid ใช้กัน 

ก่อนที่จะมาทำ Proxy Server ใช้กัน เรามารู้จักกันก่อนดีกว่าว่า Proxy Server คืออะไร Proxy Server หรือ Web Proxy Server หรือ Web Cache Server ก็คือ Server ที่ทำหน้าที่เก็บข้อมูลต่างๆเช่น รูปภาพ หรือ file ที่ users หรือผู้ใช้บริการร้องขอการใช้จาก WebSite มาเก็บไว้ที่ Proxy Server นั่นเอง เมื่อมีการเพิ่ม Proxy Server เข้าไปในองค์กร และบังคับให้ User ทุกคนใช้งาน Internet ผ่าน Proxy Server จะทำให้ users ดึงข้อมูลหรือ file จาก Proxy Server ได้เลย ไม่ต้องไปดึงจาก Website ใน Internet โดยตรงทำให้เข้า websites ต่างๆ ได้เร็วขึ้นนั่นเอง ดังรูปภาพที่แสดงด้านล่างครับ

ข้อดีหรือประโยชน์ของ Proxy Server นั้นมีมากมาย เช่น
1. ประหยัด Bandwidth ในการเช่า link Internet โดยเฉพาะ การเข้า Website ที่อยู่ต่างประเทศ
2. ใช้ Internet ได้เร็วขึ้นเนื่องจากดึงจาก Proxy Server ภายในองค์กรโดยตรง
3. สามารถเก็บ log ได้ว่า user เข้า web อะไรบ้างเวลาใดตาม พรบ. คอมพิวเตอร์ ปี 2550
4. สามารถจำกัดสิทธิในการเข้า website ของ users ได้เช่นสามารถ block การเข้า website ที่ไม่เหมาะสมได้ และยังกำหนดเวลาการใช้งานได้อีกด้วย
5. แบ่งเบาการทำงานของ Router ทำให้ใช้งาน Router ได้นานยิ่งขึ้น 
6. อื่นๆ

วิธีการติดตั้ง Squid Proxy Server บน Linux CentOS

ในที่นี้จะสอนการติดตั้ง และปรับแต่ง Squid Proxy Server บน Linux CentOS นะครับ โดยใช้ Squid ซึ่ง Squid เป็นโปรแกรม หรือ application ที่นิยมนำมาทำ Proxy Server มากที่สุด สามารถปรับแต่งและประยุกต์ใช้งานได้หลากหลายมากๆ

ก่อนติดตั้งตรวจสอบ version กันก่อนว่าเป็น CentOS version และ kernel อะไร
[root@linux-jodoi ~]# uname -r
2.6.18-164.el5

[root@linux-jodoi ~]# cat /etc/redhat-release
CentOS release 5.6 (Final)
ถ้าไม่ใช่ version ปัจจุบันสามารถ update ได้ด้วย # yum update
อันนี้เป็นข้อดีของ Linux CentOS สามารถ Update ได้โดยไม่ต้องเสียค่าใช้จ่าย

ต่อไปเป็นการตรวจสอบว่ามีการติดตั้ง squid ไว้หรือยัง
[root@linux-jodoi ~]# rpm -q squid
squid-2.6.STABLE21-6.el5

ถ้ายังไม่มีการติดตั้ง squid สามารถติดตั้งได้หลายวิธี เช่นจากแผ่น CD หรือวิธีง่ายสุดถ้า Linux Server ใช้งาน Internet ได้ โดยการใช้ command yum ช่วย คือ # yum -y install squid

เมื่อติดตั้งเสร็จแล้วจะต้องมี file squid.conf ต่อไปเป็นการปรับแต่ง config เพื่อให้สามารถใช้งาน Squid Proxy Server ได้ ดังนี้
[root@linux-jodoi ~]# vi /etc/squid/squid.conf

#http_port 3128 ( ค่า config เดิม port คือ 3128)
http_port 8080
ทำการเปลี่ยน port เป็น 8080 หรือ port ที่ต้องการ

# cache_mem 8 MB ( ค่า memory ที่กันไว้สำหรับ proxy เพื่อเพิ่มความไวในการรับส่งข้อมูล)
cache_mem 256 MB
ทำการเปลี่ยนตามความเหมาะสม ควรจะดูจำนวน memory หรือ RAM ของเครื่องจริงด้วย

# cache_dir ufs /var/spool/squid 100 16 256 ( ตำแหน่งการเก็บข้อมูล รูปแบบการจัดเก็บ พื้นที่และจำนวน directory และ sub directory
cache_dir ufs /var/spool/squid 2000 256 256
จัดเก็บรูปแบบ ufs ไว้ที่ตำแหน่ง /var/spool/squid/ ขนาดพื้นที่ 2000 MB จำนวน 256 directory และ 256 sub directory

access_log /var/log/squid/access.log squid ( ตำแหน่ง log file และรูปแบบที่แสดง )

#acl our_networks src 192.168.1.0/24 192.168.2.0/24 ( network ที่ยอมให้ใช้ Proxy Server ได้ )
acl jodoi_networks src 192.168.1.0/24
#http_access allow our_networks
http_access allow jodoi_networks
เปลี่ยนชื่อตัวแปร เป็น jodoi_networks จะเปลี่ยนหรือไม่ก็ได้ แต่ IP ต้องเป็น IP Network ที่อยู่ใน LAN ทีอนุญาตให้ใช้ Proxy Server

ต่อไปเป็น port ที่ยอมให้ใช้งานผ่าน Proxy Server ได้ เช่นมีการเพิ่ม port 88 เข้าไป
acl Safe_ports port 80 # http
acl Safe_ports port 88 # Website
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http

# TAG: visible_hostname
visible_hostname jodoi-proxyserver.com
กรณีที่มี Proxy Server หลายตัวควรจะเพิ่ม visible_hostname เข้าไปด้วยจะได้ดู error log ได้ง่าย
:wq! ( Save config )

การที่จะ Start Squid ให้ตรวจสอบ directory ที่จะเก็บข้อมูลก่อนดังนี้
[root@linux-jodoi squid]# ls /var/spool/squid/

จะพบว่าไม่มี directory ทำการสร้าง directory ได้ด้วย # squid -z
[root@linux-jodoi squid]# squid -z
2011/08/07 09:02:42| Creating Swap Directories
ตรวจสอบใหม่อีกครั้ง จะพบว่ามีการสร้าง directory ขึ้นมาตามที่กำหนดไว้ใน config
[root@linux-jodoi squid]# ls /var/spool/squid/
00 0B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5 B0 BB C6 D1 DC E7 F2 FD
01 0C 17 22 2D 38 43 4E 59 64 6F 7A 85 90 9B A6 B1 BC C7 D2 DD E8 F3 FE
02 0D 18 23 2E 39 44 4F 5A 65 70 7B 86 91 9C A7 B2 BD C8 D3 DE E9 F4 FF
03 0E 19 24 2F 3A 45 50 5B 66 71 7C 87 92 9D A8 B3 BE C9 D4 DF EA F5
04 0F 1A 25 30 3B 46 51 5C 67 72 7D 88 93 9E A9 B4 BF CA D5 E0 EB F6
05 10 1B 26 31 3C 47 52 5D 68 73 7E 89 94 9F AA B5 C0 CB D6 E1 EC F7
06 11 1C 27 32 3D 48 53 5E 69 74 7F 8A 95 A0 AB B6 C1 CC D7 E2 ED F8
07 12 1D 28 33 3E 49 54 5F 6A 75 80 8B 96 A1 AC B7 C2 CD D8 E3 EE F9
08 13 1E 29 34 3F 4A 55 60 6B 76 81 8C 97 A2 AD B8 C3 CE D9 E4 EF FA
09 14 1F 2A 35 40 4B 56 61 6C 77 82 8D 98 A3 AE B9 C4 CF DA E5 F0 FB
0A 15 20 2B 36 41 4C 57 62 6D 78 83 8E 99 A4 AF BA C5 D0 DB E6 F1 FC

ต่อไปทำการสั่ง start squid
[root@linux-jodoi squid]# service squid start
Starting squid: .. [ OK ]

ตรวจสอบว่า service squid ทำงานอยู่หรือไม่
[root@linux-jodoi squid]# netstat -tanp|grep squid
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 27749/(squid)
[root@linux-jodoi squid]# ps -ef|grep squid
root 27747 1 0 09:07 ? 00:00:00 squid -D
squid 27749 27747 6 09:07 ? 00:00:06 (squid) -D
squid 27751 27749 0 09:07 ? 00:00:00 (unlinkd)
root 27760 2649 2 09:08 pts/0 00:00:00 grep squid

ต่อไปให้ใช้เครื่อง client ทดสอบใช้งานผ่าน Proxy Server ถ้ามีการใช้งานแล้วจะขึ้นดังนี้
[root@linux-jodoi ~]# tail -f /var/log/squid/access.log
1312683250.672 8807 192.168.1.4 TCP_MISS/200 37041 GET http://www.jodoi.com/ - DIRECT/66.7.221.19 text/html
1312683251.031 266 192.168.1.4 TCP_MISS/304 417 GET http://connect.facebook.net/en_GB/all.js - DIRECT/96.17.255.139 application/x-javascript
1312683251.411 378 192.168.1.4 TCP_MISS/304 417 GET http://connect.facebook.net/en_US/all.js - DIRECT/96.17.255.139 application/x-javascript
1312683251.635 83 192.168.1.4 TCP_MISS/304 415 GET http://www.jodoi.com/logo_partner/ciscopartner.gif - DIRECT/66.7.221.19 -
1312683252.286 659 192.168.1.4 TCP_MISS/304 414 GET http://www.jodoi.com/logo_partner/pearsonvue.gif - DIRECT/66.7.221.19 -
1312683252.807 520 192.168.1.4 TCP_MISS/200 479 GET http://www.facebook.com/extern/login_status.php? - DIRECT/69.171.228.40 text/html
1312683254.190 368 192.168.1.4 TCP_MISS/200 1556 GET http://www.youtube.com/v/NItVCEUMhKY? - DIRECT/209.85.175.91 application/x-shockwave-flash
และจะต้องมีข้อมูลวิ่งตลอดเวลา แสดงว่าสามารถใช้งานได้จริงๆ

อันนี้เป็นเพียงการปรับแต่งใช้งาน Squid Proxy Server เบื้องต้นเท่านั้นนะครับ

การ Clear พื้นที่ Harddisk หรือ Clear Cache

ควรตรวจสอบพื้นที่ harddisk อยู่เสมอ Proxy Server มักมีปัญหาเรื่องของพื้นที่ Harddisk เต็มในกรณีที่ต้องการลบพื้นที่หรือ file ทำได้โดย

[root@linux-jodoi ~]# cd /var/spool/squid/
[root@linux-jodoi squid]# rm -f *

หลังจากลบแล้วอย่าลืมสร้าง directory ขึ้นมาใหม่ด้วย # squid –z นะครับ

.เสร็จแล้วสั่ง restart squid ใหม่

#/etc/init.d/squid restart

นอกจากนี้เรายังสามารดใช้ Squid Proxy Server ในการเก็บ Log file ตาม พรบ.คอมพิวเตอร์ ปี 2550 ได้อีกด้วย โดยใช้คู่กับโปรแกรม syslog-ng ก็สามารถทำให้ประหยัดค่าใช้จ่ายได้เป็นอย่างดีครับ

การ Block Web

และถ้าต้องการป้องกันการเข้าถึง Web หรือ ข้อความที่ไม่เหมาะสม เราสามารถกำหนดได้ โดยการเพิ่ม ACL และ http_access ของ Squid ดังนี้

1.ให้ Config Squid เพิ่ม โดยแก้ไข file squid.conf

#vi /etc/squid/squid.conf
ค้นหาคำว่า acl all แล้วเพิ่มข้อความ เช่น blockweb , bawords ลงไปดังตัวอย่างด้านล่าง

acl blockweb dstdom_regex "/etc/blockweb.txt" (เป็นการกำหนดตำแหน่ง file ที่จะใช้ blockweb )

acl badwords urlpath_regex "/etc/blockwords.txt" (เป็นการกำหนดตำแหน่ง file ที่จะใช้ block ข้อความที่ต้องการ)

acl denyfiles urlpath_regex -i \ . exe$ \ . zip$ \ . mpg$ (เป็นการกำหนดให้ block นามสกุลของ file ที่ไม่อนุญาติให้ download )

ค้นหาคำว่า insert your own rules here แล้วแทรก

http_access deny blockweb

http_access deny badwords

http_access deny denyfiles

http_access allow localnet

2.ให้ไป สร้าง file blockweb.txt และ blockwords.txt

โดย blockweb.txt ใส่รายชื่อ web ที่ต้องการ block

รูปแบบการใส่
#vi blockweb.txt
hi5.com
sexy.com
facebook.com

:wq!

และ blockwords.txt ใส่รายชื่อข้อความที่ต้องการ block
#vi blockwords.txt
sex
casino
โป๊
:wq!

3.เสร็จแล้วสั่ง restart squid ใหม่

#/etc/init.d/squid restart

การทำ Transparent Proxy

เป็นการบังคับให้เครื่อง Client ต้องผ่าน Proxy Server โดยที่ไม่ต้องไป set IP ขอบ Proxy Server ที่ตัว Browser ทำโดยการ Config เพิ่ม ดังนี้
1) ที่ file squid.conf ให้เพิ่ม 4 บรรทัด
# vi /etc/squid/squid.conf
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
:wq!
หรือถ้าเป็น Squid version ใหม่ แก้ไขเพียงบรรทัดเดียว คือ ให้ใส่คำว่า transparent ไว้ท้าย http_port
# vi /etc/squid/squid.conf
http_port 8080 transparent

:wq!
หลังจากนั้นให้ทำการ restart service squid

# /etc/init.d/squid restart

2) ที่ iptables ให้ทำการ Config เพิ่ม ในส่วนของการ forward port 80 ไปที่ port ของ Squid

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

หลังจากนั้นให้ทำการ save และ restart iptables
# /etc/init.d/iptables save
# /etc/init.d/iptables restart

หวังว่าบทความนี้คงจะก่อให้เกิดประโยชน์ไม่มากก็น้อยสำหรับผู้ที่ทำงานอยู่ในแวดวงไอทีและใช้ Linux Server อยู่นะครับ

แหล่งข้อมูลอ้างอิง

http://en.wikipedia.org/wiki/Proxy_server
http://www.squid-cache.org/
http://www.jodoi.com

 

ดูตัวอย่างวีดีโอเกี่ยวกับ Proxy Server ได้ตามด้านล่างนะครับ

 

เรียบเรียงโดย อาจารย์เกรียงศักดิ์ นามโคตร ( อาจารย์ดอย ) Mr.Jodoi

More About us

"Jodoi The Best IT in Thailand" ศูนย์ฝึกอบรม Network และ IT เป็นบริษัทที่เป็นศูนย์อบรม และจัดจำหน่ายคอมพิวเตอร์ ระบบ Network และไอทีครบวงจร อันดับ 1 ของเมืองไทย

Jodoi Training Center

Facebook

นายเกรียงศักดิ์ นามโคตร (อาจารย์ดอย) ผู้ก่อตั้งบริษัท โจดอย ไอทีแอนด์เซอร์วิส จำกัด เจ้าของแบนด์โจดอย (JODOI) และเจ้าของสโลแกน " โจดอยทำได้ คุณก็ต้องทำได้ " รูัจัก อาจารย์ดอยมากขึ้น more

 

Contact Us

Mr. Kriangsak namkot
Mobile:081-9165773
E-mail:jodoi@jodoi.com