วันศุกร์ที่ 5 กันยายน พ.ศ. 2551

Squid authentication using MySQL

การติดตั้ง Squid ให้รองรับการ Authen user จาก mysql

หลังจากที่เราติดตั้ง FreeBSD + Apache + MySQL + PHP + NAT เรียบร้อยแล้ว ลองทดสอบว่า ลูกข่าย

ออกเน็ทได้หรือเปล่า เมื่อเป็นไปตามที่คาดหมาย ดำเนินการต่อไปเลยครับ


ทำการติดตั้ง package นี้

# cd /usr/ports/databases/p5-DBI
# make install clean


เสร็จแล้ว ตามด้วย package นี้

# cd /usr/ports/databases/p5-DBD-mysql50
# make install clean


จากนั้นถึงคราวของพระเอกของเรา Squid
1. เตรียมโปรแกรม squid-2.7.STABLE4.tar.gz โดยดาวโหลดจากอินเตอร์ได้เลย
# cd /tmp
# fetch http://www.squid-cache.org/Versions/v2/2.7/squid-2.7.STABLE4.tar.gz

2. แตกไฟล์ tar.gz ด้วยคำสั่ง
# tar xvfz squid-2.7กดปุ่มแท็บ 1 ครั้ง จะได้เป็น tar xvfz squid-2.7.STABLE4.tar.gz
# cd squid-2.7 กดปุ่มแท็บ 1 ครั้ง

3. ติดตั้ง squid-2.7.STABLE4 (option delaypools = ทำให้เวลา download ของลูกข่ายช้าลง หรือจำกัด bandwidth arp = เอาไว้ log เครื่อง โดยล็อกได้ถึงระดับ mac address ของ การ์ดแลนด์เลยแหละ และตัวสุดท้ายคือ basic auth helper=DB ตัวนี้แหละเป็น Authentication โดย อาศัยเจ้า MySQL)
# ./configure --prefix=/usr/local/squid --enable-delay-pools --enable-arp-acl --enable-basic-auth-helpers=DB
# make all; make install

ทำการแก้ไขไฟล์ squid.conf ทีละบรรทัด
# pico /usr/local/squid/etc/squid.conf


// ค้นหาข้อความกดปุ่ม Ctrl +w แล้วพิมพ์ข้อความที่ต้องการค้นหา เพื่อความสะดวกและรวดเร็วครับ
http_port 8080


cache_dir ufs /var/cache 2500 16 256 // ตำแหน่งเก็บ cache ไฟล์ต่าง ๆ


access_log /var/log/access.log squid // เปลี่ยนตำแหน่งเก็บ log file ไว้ที่ /var/log


cache_log /var/log/cache.log


cache_store_log /var/log/store.log


เพิ่ม


acl mynetwork src 192.168.xxx.0/24 // เลขไอพีภายในที่ต้องการกำหนด LAN ใบที่ 2 ครับ mynetwork เปลี่ยนชื่อ acl ได้ตามต้องการ


# ส่วนนี้จะอยู่ประมาณต้นๆ ของ squid.conf ทางที่ดี ssh เข้าเครื่อง แล้ว copy ไปวางเลย ชัวร์กว่า


auth_param basic program /usr/local/squid/libexec/squid_db_auth --user squid --password passwd --plaintext --persist


auth_param basic children 5


auth_param basic realm ตั้งชื่อตามที่ต้องการจะปรากฎเวลาให้ใส่รหัส เช่น ICT Center


auth_param basic credentialsttl 1 minute


auth_param basic casesensitive off



authenticate_ttl 1 hour


authenticate_ip_ttl 60 seconds


ค้นหาคำว่า acl CONNECT method CONNECT


แล้วเพิ่มบรรทัดด้านล่างต่อไปดังนี้ สองบรรทัดนี้ กำหนดให้ใช้ 1 user 1 ip เท่านั้น


acl onlyonce max_user_ip -s 1


http_access deny onlyonce


acl mynetwork src 192.168.200.0/24  //เปลี่ยน ค่า  network เป็นของตัวเอง

acl auth_user  proxy_auth REQUIRED     //auth_user เปลี่ยนชื่อได้
้http_access allow auth_user

http_access allow mynetwork

#บันทึก

แก้ไขเสร็จแล้วบันทึกไฟล์  squid.conf   และออกจากการแก้ไขไฟล์  squid.conf

5. สร้างฐานข้อมูล  squid  และเพิ่มผู้ใช้ชื่อ  squid  รหัสผ่าน  passwd   ดังนี้

# mysql -u root -p''พิมพ์รหัสผ่าน root mysql''

mysql> show databases squid;      //  แสดงฐานข้อมูล  squid  ว่าโปรแกรมสร้างให้หรือยัง  ถ้ายังสร้างใหม่ด้วยคำสั่ง   create database squid;

mysql>  grant all on squid.* to squid@localhost identified by ''passwd'';

เพิ่มสิทธิผู้ใช้ชื่อ  squid  รหัสผ่าน  passwd   ให้ใช้งานฐานข้อมูล  squid  ได้

mysql> use squid;    // เรียกใช้ฐานข้อมูล  squid

คัดลอกคำสั่งสร้างตารางต่อไปนี้ไปวางได้เลยครับ

CREATE TABLE passwd (
  id int(5) NOT NULL auto_increment,
  `user` varchar(30) NOT NULL default '''',
  `password` varchar(35) NOT NULL default '''',
  enabled tinyint(1) NOT NULL default ''1'',
  fullname varchar(60) default NULL,
  `comment` varchar(60) default NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM  DEFAULT CHARSET=tis620 AUTO_INCREMENT=0 ;

คัดลอกต่อไปนี้ไปวางได้เลยครับ

insert into passwd values(''testuser'',''test'',1,''Test User'',''for testing purpose'');


ทดสอบว่า squid ติดต่อ mysql ได้หรือยัง # /usr/local/squid/libexec/squid_db_auth --user squid --password passwd --plaintext --persist
พิมพ์ testuser test
OK แสดงว่า squid ติดต่อกับ mysql ได้แล้วครับ
6. สร้างห้องเก็บ Cache และ log file ต่าง ๆ
# mkdir /var/log/

# cd /var/log

# touch /var/log/access.log

# touch /var/log/cache.log

# touch /var/log/store.log

# chmod 777 *

# mkdir /var/cache

# chmod 777 /var/cache

# chown nobody:nogroup /var/cache

# /usr/local/squid/sbin/squid -z

จะพบข้อความประมาณนี้ แสดงว่า สร้างห้อง cache สำเร็จครับ

2008/06/09 20:54:23| Creating Swap Directories

# /usr/local/squid/Bin/RunCache & // สั่ง Run Squid

# ps -ax|grep squid

9378 ?? Is 0:00.01 /usr/local/squid/sbin/squid

9380 ?? S 0:03.84 (squid) (squid)

9381 ?? Is 0:00.37 /usr/bin/perl /usr/local/squid/libexec/squid_db_auth

9382 ?? Is 0:00.37 /usr/bin/perl /usr/local/squid/libexec/squid_db_auth

9383 ?? Is 0:00.37 /usr/bin/perl /usr/local/squid/libexec/squid_db_auth

9384 ?? Is 0:00.37 /usr/bin/perl /usr/local/squid/libexec/squid_db_auth

9385 ?? Is 0:00.36 /usr/bin/perl /usr/local/squid/libexec/squid_db_auth

# netstat -an |grep 8080 tcp4 0 0 *.8080 *.* LISTEN แสดงว่า squid ทำงานสมบูรณ์แล้ว

ลองทดสอบตั้งค่า Proxy Server ที่เครื่องลูกข่าย จากนั้นก่อนจะเข้าใช้งานอินเตอร์เน็ตทุกครั้งจะพบกรอบวินโดว์ให้ป้อนข้อมูลผู้ใช้งานก่อน จึงจะอนุญาตให้ใช้อินเตอร์เน็ตได้

การตั้งค่า Proxy server ไปที่เมนู Tools => Internet Options ... => คลิกแท็บ Connections => คลิกปุ่ม LAN Settings ... แล้วตั้งค่า proxy เป็น 192.168.100.1 คือ เลขไอพีการ์ดแลนวงในครับ (LAN ใบที่ 2) port 8080 น๊ะ


#ตัวสุดท้าย กลับไปที่ FreeBSD น๊ะ

ใช้ ipfw เพื่อบังคับให้ user ที่อยู่ในวง Lan ของเรา ต้องผ่าน proxy เท่านั้น ดังนี้

#pico /etc/rc.local

แล้วพิมพ์ตามนี้ (ไอพีไฟล์วอล ที่ 1100 ส่งมาที่ 192.168.xxx.1 port 8080 ถ้ามีการร้องขอ)

ipfw add 1100 fwd 192.168.xxx.1:8080 tcp from 192.168.xxx.0/24 to any 80

1 ความคิดเห็น:

มะขาม กล่าวว่า...

ขอบคุณที่แวะไปเยี่ยม ไปชม และถึงขั้นทำ links มาให้
ดีครับ งานที่ทำมา ดีแล้ว ทำออกมาเถอะ

มะขาม ฅินเดินดน
มะไฟ ฅนเหลิงฟ้า

ที่เป็นตัวฉัน

รูปภาพของฉัน
เรียนภาษาอังกฤษมา แต่ชีวิตผกผันให้ต้องมาเป็น admin ซะนี่ เล่นเอาซะมึน และงงตามลำดับ คิดอย่างเดียวว่า เป็นอะไรเป็นได้ถ้าใจอยากเป็น อุปสรรคคือแบบฝึกหัด ท้อแต่ไม่เคยถอย คิดไว้เสมอ ความพยายามอยู่ที่ไหน ความสำเร็จอยู่ที่นั่น ถ้าพยายามก่อน ก็ชนะแล้ว 50% อีก 50 % ใช้ความสามารถเอาเอง