การเซ็ตอัพ Proxy server

(Squid with squidGuard and user authentication)


การเซ็ตอัพ
Proxy Server คืออะไร

คือเครื่องเซิร์ฟเวอร์ สำหรับใช้เก็บข้อมูลชั่วคราวของข้อมูลที่ถูกเรียกใช้บ่อยครั้ง ของผู้ใช้อินเทอร์เน็ต ในกลุ่มบริเวณเดียวกัน นอกจากนั้นยังจัดการอื่นๆอีกเช่นจัดการหาข้อมูลมาเก็บไว้เพื่อให้เครื่องผู้ใช้บริการได้นำไปใช้ เป็นต้น กล่าวโดยสรุปว่าเป็นเครื่องแม่ข่าย ที่ทำหน้าที่เป็นเสมือน ที่เก็บข้อมูลของเครื่องเว็บเซิร์ฟเวอร์ต้นฉบับจริง เพื่อให้เครื่องผู้ใช้บริการได้เข้าถึงข้อมูลได้เร็วขึ้น โดยผู้ใช้บริการต้องกำหนดค่าใน เว็บเบราว์เซอร์ส (Web browsers ) ให้ใช้บริการผ่านเครื่อง proxy server นี้
    โดยแท้จริงแล้ว Proxy server จะเป็นเพียงแค่ เครื่องที่ทำหน้าที่เป็นตัวจัดหาข้อมูลที่เครื่องผู้ใช้บริการต้องการใช้ มาให้ และ Cache server เป็นเครื่องที่ทำหน้าที่จัดเก็บข้อมูลที่เครื่องลูกหรือเครื่องผู้ใช้บริการ เรียกใช้ไว้เพื่อใช้ในครั่งต่อไป แต่ในที่นี้จะใช้คำว่า Proxy server แทน Proxy/Cache Server ดังกล่าวมาแล้วข้างต้น

หลักการทำงานของ Proxy Server

เมื่อผู้ใช้บริการอินเทอร์เน็ตเรียกดูขัอมูลจากเวบไซต์ โดยผ่าน Proxy Server  สมมติว่า ผู้ใช้บริการอินเทอร์เน็ต เรียกดูข้อมูลเป็นครั้งแรก Proxy Server จะทำการตรวจสอบว่า มีข้อมูลดังกล่าวได้มีเก็บไว้ที่ตัวมันแล้วหรือไม่
• ถ้าไม่มีข้อมูลดังกล่าว เครื่อง Proxy Server จะทำการติดต่อไปยัง เครื่องเซิร์ฟเวอร์ปลายทาง ต้นฉบับจริงเพื่อเรียกข้อมูลดังกล่าวมา และจะนำส่งไปให้ผู้ใช้บริการ ในขณะที่ยังเก็บข้อมูลนั้นไว้ที่ตัวเพื่อเอาไว้ใช้ในครั้งต่อไป
• ถ้ามีข้อมูลอยู่แล้ว เครื่อง Proxy Server จะทำการตรวจสอบว่าข้อมูลที่มีอยู่แล้วนั้น เป็นข้อมูลที่มีอยู่ตรงกับที่มีอยู่ที่เครื่องเซิร์ฟเวอร์ปลายทางต้นฉบับหรือไม่
• ถ้ามีข้อมูลตรงกัน Proxy Server จะส่งข้อมูลที่เก็บไว้แล้วนั้นไปให้ผู้ใช้บริการทันที
• แต่ถ้าข้อมูลไม่ตรงกัน เครื่อง Proxy Server ก็จะทำการติดต่อไปยังเครื่องเซิร์ฟเวอร์ปลายทาง เพื่อนำข้อมูลมาใหม่และส่งไปให้ผู้ใช้บริการ พร้อมทั้งเก็บไว้ใช้ในครั้งต่อไปด้วย

ข้อดีของ Proxy Server
• เครื่องไคล์เอ็นท์สามารถเรียกดูข้อมูลจากเว็บไซต์ได้รวดเร็วขึ้น เพราะข้อมูลบางส่วนจะดึงจากเครื่อง Proxy Server แทนที่การดึงจากเครื่องเซิร์ฟเวอร์ปลายทางต้นฉบับโดยตรง
• ประหยัดเวลาในการท่องอินเทอร์เน็ต เนื่องจากเครื่อง Proxy Server สามารถที่จะจัดเก็บข้อมูลเว็บไซต์ได้มากจึงเหมือนกับท่องอินเทอร์เน็ต ดูเว็บไซต์จากภายนอก
• ลดความหนาแน่น (Bandwidth) ในการติดต่ออินเทอร์เน็ตของผู้ใช้บริการ เพราะผู้ใช้บริการที่เรียกใช้ข้อมูลที่ซ้ำๆ กันจำนวนมาก จะดึงข้อมูลจากเครื่อง Proxy Server โดยไม่ต้องติดต่อกับเครื่องเซิร์ฟเวอร์ปลายทาง พร้อมกันจำนวนมาก
• เครื่องผู้ใช้บริการไม่จำเป็นต้องมี IP จริง ทั้งนี้เพราะการติดต่อกับเครื่องเซิร์ฟเวอร์ปลายทางโดยตรงที่อยู่บนอินเตอร์เน็ต จำเป็นที่เครื่องผู้ใช้บริการจะต้องมี IP จริงด้วยเช่นกัน

การเซตอัพ Proxy Server
การคอนฟิกต่อไปนี้ ได้ตั้งสมมุติฐานว่าเครื่องลูกข่ายหรือเครื่องไคลเอ็นท์ที่จะต่อเข้ามาใช้ proxy server ที่เรากำลังคอนฟิกอยู่นี้ มีไอพีอยู่ในวง 172.16.0.1/22 นั่นคือมีไอพีตั้งแต่ 172.16.0.1 ถึง 172.16.3.254 มี subnetmask เป็น 255.255.252.0

จะมีการติดตั้งได้หลายวิธี แต่จะใช้วิธีที่ง่ายและใช้งานได้เต็มที่ มีขั้นตอนการเซ็ตอัพประกอบด้วย 2 ขั้นตอน ดังนี้ 
          1. ตรวจสอบโปรแกรม Squid
          2. กำหนดค่าต่าง ๆ ที่จำเป็นใน Squid.conf

โดยในระบบยังไม่ได้มีการติดตั้งโปรแกรม squid เอาไว้ก่อน ให้ทำการติดตั้งใช้คำสั่ง
sut@localhost:~$ sudo apt-get install squid3
ระบบจะทำการดาวน์โหลดโปรแกรมและทำการติดตั้ง เมื่อระบบติดตั้งโปรแกรม squid เรียบร้อยแล้วให้แก้ไขแฟ้ม /etc/squid3/squid.conf โดยใช้คำสั่ง
sut@localhost:~$ sudo gedit /etc/squid3/squid.conf
จากนั้นโปรแกรมแก้ไขข้อความ gedit จะรันขึ้นมาพร้อมกับ code ของ squid ให้ทำการแก้ไขค่าต่าง ๆ ของระบบ ดังนี้

    * ค้นหาตัวแปร http_port เพื่อตั้งค่าใหม่
      ค่า default คือ http_port เป็น  3128 อยู่แล้ว ไม่ต้องทำอะไรอีก
      หากใช้ port อื่นเช่น 8080 ก็เปลี่ยนให้เป็น http_port 8080
    
    * ค้นหาตัวแปร http_access เพื่อตั้งค่าใหม่
      ตัวอย่างต้นฉบับเดิมคือ #http_access allow localnet
      แก้ไขใหม่เอาเครื่องหมาย #
    * ค้นหาบรรทัด #acl localnet src 192.168.1.0/24
       นำเครื่องหมาย # ออก และกำหนด src เป็น 172.16.0.0/22 แทน
       *(172.16.0.0/22) หาได้จากการใช้คำสั่งดังนี้ $ ipcalc 172.16.0.1 255.255.252.0

start squid ใช้คำสั่งดังนี้
sut@localhost:~$ sudo /etc/init.d/squid3 start
Starting Squid HTTP proxy: squid.
ถ้าไม่สามารถ start ได้ให้ลองใช้คำสั่ง
sut@localhost:~$ sudo /etc/init.d/squid3 stop
ดูก่อน เพราะว่า service อาจจะทำงานอยู่ทำให้ไม่สามารถ start อีกครั้งได้


วิธีการ block เว็บไม่พึงประสงค์ด้วย Squid  มี 2 วิธีคือ กำหนดที่ Squid acl และการติดตั้ง Squid Guard

-------------------- Squid acl ---------------------

วิธีการ block เว็บที่ไม่พึงประสงค์ทั้งหมดด้วย acl ทำได้ดังนี้

1. พิมพ์บัญชีดำ รายชื่อเว็บที่ไม่ต้องการให้เข้าไปไฟล์ (ในที่นี้สมมติ) block.txt มีข้อความ
#<=================>
http://www.sexy.com/
http://linux.sut.ac.th
http://......................ฯลฯ
<=================>
แล้วเก็บไว้ที่ /etc/squid3/

2. แก้ไขไฟล์ squid.conf ในหัวส่วนต่อไปนี้ acl และ http_access
#<==================>
acl lockschool url_regex '/etc/squid3/block.txt' ( บรรทัดนี้ เอาไว้บนสุดของ acl ...... เลยนะครับ)
http_access deny lockschool ( บรรทัดนี้เอาไว้บนสุดของ http_access.........)
<====================>

3. เครื่องลูกข่ายทุกเครื่องให้ fix IP คือกำหนดไอพีตายตัวไว้ เพราะจะทำให้ง่ายต่อการตรวจสอบภายหลัง

หมายเหตุ
'lockschool' เป็นการตั้งชื่อ acl (ตั้งเป็นชื่ออะไรก็ได้ตามถนัด) แต่เวลาอ้างใน http_access deny ก็ต้องอ้างตามชื่อที่เราตั้งไว้
บัญชีรายชื่อเวบไม่พึงประสงค์เพิ่มลงไนไฟล์ block.txt ได้ตลอดเวลา


------------------------  Squid Guard --------------------

สำหรับ SquidGuard ตัวนี้เป็นนำฐานข้อมูล .db มาใช้เก็บเว็บที่ไม่ต้องการและ สามารถเรียกตรวจสอบเว็บที่มีอยู่ในฐานข้อมูลอย่างรวดเร็ว ซึ่งจะแตกต่างจากการใช้การ block เก็บในไฟล์ ทั้งนี้เพราะถ้ามีรายชื่อจำนวนมากการตรวจสอบจะใช้เวลานานมากขึ้น มาดูกันว่าการลงแบบนี้มีขั้นตอนอย่างไร

1. ติดตั้ง squidGuard

sut@localhost:~$ sudo apt-get install squidguard


2. แก้ไขไฟล์ squid.conf

sut@localhost:~$ sudo gedit /etc/squid3/squid.conf

เพิ่มบรรทัดต่อไปนี้
url_rewrite_program /usr/bin/squidGuard –c /etc/squid/squidGuard.conf

3.แก้ไขไฟล์ /etc/squid/squidGuard.conf ให้มีข้อมูลดังนี้

dbhome /var/lib/squidguard/db
logdir /var/log/squid
 
time workhours {
    weekly mtwhfa 08:00-12:00
    weekly mtwhfa 13:00-16:30
}
 
src admin {
}
 
dest streaming {
    domainlist      streaming/domains
    urllist         streaming/urls
    log             streaming.log
    within          workhours

 
acl {
    admin {
            pass     any
    }
 
    default {
            pass            !streaming  any
            redirect        http://www.google.com/
    }
}

4. สร้างไดเรคทอรีที่กำหนดไว้

    sudo mkdir /var/lib/squidguard/db/streaming

5. สร้างไฟล์ที่เก็บ url ของเว็บที่ต้องการ block
    sudo gedit /var/lib/squidguard/db/streaming/domains

    www.youtube.com
    radio.sanook.com
    www.youdumv.com

6. กำหนดสิทธิ์ให้กับไฟล์ที่สร้าง
sudo chown -R proxy:proxy /var/lib/squidguard/db

7. ทำการ rebuild ฐานข้อมูล
sudo squidGuard -C all

8. สั่งให้ squid เริ่มทำงานใหม่
sudo /etc/init.d/squid3 restart

หมายเหตุ ทุกครั้งที่ทำการแก้ไข config ไฟล์ ควรจะต้องมีการ รัน service ใหม่ทุกครั้ง


วิธีการกำหนดรายชื่อผู้ใช้และรหัสผ่าน


1. สร้าง username และ password โดยใช้คำสั่งนี้

# sudo htpasswd -c /etc/squid3/passwd username

New password:
Re-type new password:
Adding password for user user1

 และกำหนดให้ squid สามารถอ่านไฟล์ passwd ได้โดยใช้คำสั่งดังนี้

# sudo chmod o+r /etc/squid3/passwd

  2. แก้ไขไฟล์ /etc/squid3/squid.conf ให้เปิดระบบการใช้งานการใช้รหัสผ่านด้วย nsca_auth

# sudo gedit /etc/squid3/squid.conf

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd

แก้ไขและเพิ่มส่วนของ ACL ดังนี้

acl ncsa_users proxy_auth REQUIRED

http_access allow ncsa_users

เริ่มทำงาน squid ใหม่โดยใช้คำสั่งดังนี้

# sudo /etc/init.d/squid3 restart

สามารถดู logs ไฟล์ได้ที่ /var/log/squid/access.log (ภายในไฟล์สามารถดูได้ว่ารายชื่อผู้ใช้ได้เข้ามาใช้งานเวลาใดได้)