คอนฟิก Squid Proxy Server ให้ผู้ใช้ใส่ user, password ก่อนเข้าเว็บ

บทความนี้อธิบายวิธีการคอนฟิก Squid Proxy Server เพื่อให้ผู้ใช้งานต้องใส่ user, password ก่อนถึงจะใช้งานอินเตอร์เน็ตได้

โดยจะตรวจสอบ user, password กับ Local Password หรือไฟล์ /etc/passwd, /etc/shadow ผ่าน Linux PAM ที่อยู่บนเครื่อง Proxy Server เอง

ทดสอบบน Fedora 16 ติดตั้ง squid-3.2.0.12-1

ติดตั้งไฟล์ rpm จากแผ่นดีวีดีติดตั้ง

[root@fc16-64a ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@fc16-64a ~]# cd /mnt/cdrom/Packages/
[root@fc16-64a Packages]# rpm -i squid-3.2.0.12-1.fc16.x86_64.rpm

มีหลายวิธีที่คอนฟิกให้ถาม user, password ก่อนใช้ proxy ได้ วิธีหนึ่งคือเพิ่มคอนฟิกออปชั่น auth_param basic มี 3 ขั้นตอนดังนี้

  1. ตั้งค่าคอนฟิกของ auth_param basic มีอยู่หลายค่า บรรทัดสำคัญคือ program ในที่นี้จะเลือกเป็น basic_pam_auth เพื่อให้ตรวจสอบกับ Linux PAM
  2. สร้าง acl เป็นชนิด proxy_auth ในตัวอย่างนี้ ตั้งชื่อ acl เป็น user_pam_auth
  3. สุดท้ายนำ acl ที่สร้างขึ้นไปผูกเงื่อนไขใน http_access เช่นในที่นี้ ยังคงอนุญาตให้เครื่องที่อยู่ใน localnet ใช้ proxy ได้ แต่ต้องใส่ user, password ก่อน

ตัวอย่างแก้ไขไฟล์ /etc/squid/squid.conf (แสดงเฉพาะส่วนที่แก้ไขจากดีฟอลต์คอนฟิกเท่านั้น)

[root@fc16-64a ~]# cat /etc/squid/squid.conf
....
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
auth_param basic children 5
auth_param basic realm Proxy Authentication
auth_param basic credentialsttl 12 hours
auth_param basic program /usr/lib64/squid/basic_pam_auth
acl user_pam_auth proxy_auth REQUIRED
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet user_pam_auth
...

 

ใช้คำสั่ง service หรือ systemctl เพื่อ start หรือ reload เซอร์วิส squid

[root@fc16-64a ~]# systemctl reload squid.service

ใช้คำสั่ง useradd เพิ่ม user สำหรับทดสอบ

[root@fc16-64a ~]# useradd -g users user1
[root@fc16-64a ~]# passwd user1
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

ทดสอบจาก Browser

คอนฟิก Browser ของเครื่องผู้ใช้ ให้ชี้มาที่ proxy แล้วลองเข้าเว็บดู จะมีหน้าจอให้ใส่ user, password ลองใส่ user ที่เพิ่งสร้างขึ้น

 

แม้จะพยายามใส่ user, password อย่างไร ก็ไม่สำเร็จ

 

ที่เป็นเช่นนี้เนื่องจาก basic_pam_auth ไ่ม่สามารถอ่านไฟล์ /etc/shadow ได้ จำเป็นต้องแก้ไขไฟล์นี้ให้เป็น setuid root

ใช้คำสั่ง chmod เพื่อแก้ไขไฟล์ให้เป็น setuid root

[root@fc16-64a ~]# ls -l /usr/lib64/squid/basic_pam_auth
-rwxr-xr-x. 1 root root 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# chmod u+s /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# ls -l /usr/lib64/squid/basic_pam_auth
-rwsr-xr-x. 1 root root 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth

 

แต่การใช้ setuid root แบบนี้ ค่อนข้างอันตราย user ทั่วไป บนเครื่องเซิร์ฟเวอร์ สามารถรันโปรแกรมนี้แล้วตรวจสอบไฟล์ /etc/shadow ได้

วิธีที่จะพอป้องกันได้ คือให้เฉพาะ squid รันไฟล์นี้ได้เท่านั่้น ตัวอย่างเช่น

[root@fc16-64a ~]# chmod 750 /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# chgrp squid /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# ls -l /usr/lib64/squid/basic_pam_auth
-rwxr-x---. 1 root squid 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# chmod u+s /usr/lib64/squid/basic_pam_auth
[root@fc16-64a ~]# ls -l /usr/lib64/squid/basic_pam_auth
-rwsr-x---. 1 root squid 15416 Sep 20 15:36 /usr/lib64/squid/basic_pam_auth

รีโหลดเซอร์วิสหลังแก้ไข

[root@fc16-64a ~]# systemctl reload squid.service

ลองใส่ user, password อีกครั้ง บน browser น่าจะใช้งานได้แล้ว

 

ข้อมูลอ้างอิง

 

 

Leave a Reply

Your email address will not be published.