หลังจากติดตั้งและคอนฟิกซ์ pfSense เรียบร้อยแล้ว ทำการเพิ่ม add-on ที่จำเป็น ในที่นี้คือ proxy server ที่มีความสามารถสูง คือ Squid และโปรแกรมเสริมสำหรับ Squid ในการกรองเนื้อหาที่ไม่พึงประสงค์ (content filter) คือ squidGuard ที่ช่วยให้การบล็อกเว็บทำได้ง่ายขึ้นเยอะเลย
การเพิ่ม package ของ Squid และ squidGuard ให้เข้าไปที่เมนู System -> Packages แล้วติดตั้งทั้ง 2 โปรแกรม แล้วทำการคอนฟิกซ์ สำหรับกรณีของผมทำดังนี้
1.Squid ไปที่เมนู Service -> Proxy Server
Proxy server: General settings
Proxy Interface : LAN
Allow user on interface : check
Transparent proxy : check
Do NOT proxy Private Address Space (RFC 1918) : check
Enabled logging : check (โปรแกรมจะเลือกที่เก็บ log ให้ คือ /var/squid/log)
Proxy port : 3128 (หรือ 8080 ก็ได้)
(นอกนั้นว่างไว้...)
กด Save
Proxy server: Cache management
Hard disk cache size : 10000 MB. (ตอนแรกโปรแกรมกำหนดให้ 100 MB. ทั้งนี้ผมเพียงทดสอบเท่านั้น)
Hard disk cache location : โปรแกรมตั้งให้เป็น /var/squid/cache
Memory cache size : 180 (RAM 512 / 3 = 170.66 ผมเลือก 180 อิๆ...)
(นอกนั้นว่างไว้...)
กด Save
2.squidGuard ไปที่เมนู Service -> Proxy Content Filter
Proxy Content filter SquidGuard: General settings
Enable : check กด Aply
Blacklist : check (เป็นการเรียกใช้ไฟล์ blacklist ที่บรรจุเว็บที่ต้องการบล็อกไว้ ซึ่งจะเก็บไว้ที่ /var/db/squidGuard/)
(นอกนั้นว่างไว้...)
กด Save
Proxy Content filter SquidGuard: Default
Default destination : เลือก deni เป็นบางอัน...หรือจะทั้งหมดก็ได้ แต่อันสุดท้ายต้องเป็น Allow
Not to allow IP addresses in URL : check
Enable log : check (ไม่ check ก็ได้ เป็นการบันทึก log)
แค่นี้เองเหรอ...ทำไมมันง่ายจังหว่า..???
หมายเหตุ // work around
เราสามารถเก็บสถิติการใช้งานโดยเพิ่ม lightsquid เข้าไป โดยเมื่อได้ลองใช้ดูแล้วพบว่ามีบันทึกที่ค่อนข้างใช้ได้ และมีข้อสังเกตุดังนี้
- หากเราไปตั้งค่าให้ rotate squid log มันจะเพิ่มคำสั่งใน crontab อัตโนมัติ...
สำหรับผมได้ตั้งค่าให้ rotate ทุกวันศุกร์ ปรากฎว่าใน crontab จะมีบรรทัดเพิ่้มเข้ามาดังนี้...0 0 * * */1 root /usr/local/sbin/squid -k rotate > /dev/null
รูปแบบ
#minute hour mday month wday who command
ผลคือ lightsquid ไม่ยอมทำงานในวันถัดไป ต้องกด refresh ในหน้า lightsquid แฮะ.... ลองแก้ crontab ให้แบ็คอัพ access.log (ใช้คำสั่ง cp /var/squid/log/access.log /home/shared/$DATE-access.log
แต่ในการบู๊ตเครื่องครั้งต่อไป pfsense จะลบบรรทัดที่เราเพิ่มใน crontab ทิ้งไป ตอนนี้ยังหาวิธีการอยู่- ลองเอาคำสั่ง rotate จาก lightsquid ออก และกำลังรอดูผล...ปรากฎว่า ต้องกด refresh เหมือนเดิม...(ถ้าไม่ถึงชั่วโมง lightsquid จะไม่บันทึกผล โดยกรนีนี้ตั้งค่าให้เก็บ log ทุก 1 ชั่วโมง ผลคือ หากมีคำสั่ง rotate พอเปิดเครื่อง จะไม่เก็บ access.log แต่พอเอาคำสั่ง rotate ออก มันเริ่มเก็บทันที ...ยังแปลกใจอยู่...)
- ลองเอาคำสั่ง cache_swap_low 90, cache_swap_high 95 ออก (cache_swap_low 90 เริ่มเก็บ cache เมื่อพื้นที่ 90 % ของ disk cache ที่ตั้งไว้, และเก็บจนถึง 95 % ของ disk cache) เดาว่าคำสั่งนี้อาจทำให้ squid ไม่ยอมเก็บ cache เพราะเราตั้ง cache ไว้ที่ 1000 MB. แต่ตอนนี้ใช้พื้นที่ไปเพียง 500 MB. คือ 50 % จึงยังไม่ถึง cache_swap_low ที่ตั้งไว้ 90 %
- รอดูผล...access.log เริ่มเก็บแล้ว....
- การเก็บ log ด้วย lightsquid ต้อง เอา cache_swap, rotate ออก ...???
- เปิดเครื่องแล้ว squid ไม่เก็บ log เลย (access.log) ไม่ update
- พอแก้ไขค่าอะไรซักอย่างใน squid แล้ว save มันก็เริ่มทำงาน....lightsquid เริ่มเก็บ (แปลว่าตัวแปรหลักคือ squid ไม่ใช่ lightsquid
- ข้อสันนิษฐานที่ผ่านมาอาจผิดหมด...ตอนนี้ปัญหาที่ access.log ไม่เก็บนั้น คงมาจาก squid ที่เดียว...
- ศึกษาขั้นตอนการทำงานของระบบ...
ตอนบู๊ตเครื่องนั้นระบบจะเรียก squid จาก /usr/local/etc/rc.d/squid.sh ซึ่งมีรายละเอียดดังนี้
#!/bin/sh
# This file was automatically generated
# by the pfSense service handler.
rc_start() {
if [ -z "`ps auxw | grep "[s]quid -D"|awk '{print $2}'`" ];then
/usr/local/sbin/squid -D
fi
}
rc_stop() {
/usr/local/sbin/squid -k shutdown
# Just to be sure...
sleep 5
killall -9 squid 2>/dev/null
killall pinger 2>/dev/null
}
case $1 in
start)
rc_start
;;
stop)
rc_stop
;;
restart)
rc_stop
rc_start
;;
esac
ระบบมันทำงานอยู่นะ...เอ...มันยังไงหว่า รึว่าเราคิดมากไปเอง...???
26 มิ.ย. 51
ได้ทำ custom error page แล้ว...วิธีการจะมา update วันหลัง....