แสดงบทความที่มีป้ายกำกับ Squid แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Squid แสดงบทความทั้งหมด

วันศุกร์ที่ 9 กรกฎาคม พ.ศ. 2553

เทคนิค Squid 3.0 อนุญาตเฉพาะ mac address ที่ลงทะเบียน

ความเป็นมาคือ ให้นักเรียนใช้ระบบ Authetication ผ่าน Radius ส่วนครูและบุคลากรทางการศึกษาใช้แบบอิสระ(ไม่ต้องใส่รหัส) อยูบนเครือข่ายเดียวกัน วันดีคืนดี ก็มีคน(นักเรียน)มา Fix IP ใช้เน็ต เลยหาทางแก้ไข ถ้า Block IP เขาก็เปลี่ยนไปใช้ตัวอื่นอีก เลยคิดว่าน่าจะลงทะเบียนเครื่องแล้วเก็บ Mac Address ไว้ แล้วอนุมัติให้เฉพาะ Mac Address เหล่านี้เท่านั้นที่ใช้เน็ตได้ ที่เหลือให้ปฏิเสธ หาอยู่นานจนได้อย่างนี้

acl Member arp "/etc/memberlist.lst" # กำหนด acl ชื่อ Member โดย List ของ Mac Address อยู่ที่ไฟล์ใน /etc/memberlist.lst
http_access deny !Member #ให้ปฏิเสธการเชื่อมต่อของ Mac Address ที่ไม่ตรงกับ acl Member

ก็ได้ผลเป็นที่น่าพอใจ ลองใช้เครื่องอื่น ๆ Fix IP มา ปรากฎว่าเชื่อมต่อได้ แต่เมื่อเปิดเว็บ โช๊ะเด๊ะ ติด Squid ซะงั้น เฮ้อ โล่งอกไปที หลังจากหาวิธีป้องกันคนนอกมาใช้เครือข่ายตั้งนาน

อาจจะมีนักเรียนที่เก่ง(น้อยมากแต่ป้องกันไว้ก่อน) แอบใช้ซอร์ฟแวร์บางชนิดเพื่อทะลุ block ของ squid ที่นิยมใช้คือ ultrasurf อันนี้ก็แก้ไขได้ ดูในส่วนของ security แล้วกัน คุณ yim แนะนำไว้ เจ๋งมากๆ

วันพฤหัสบดีที่ 6 สิงหาคม พ.ศ. 2552

Squid Dealy Pools

ไม่ว่างได้แวะเวียนเข้ามาเสียนาน เพราะงานและเรียนที่ยุ่งเหมือนใยแมงมุม เลย วันนี้มีปัญหากับ Delay Pools ที่เข้าใจยากเหลือเกิน งมความรู้ใน CyberSpace อยู่นาน เจอบทความนี้ เลยบันทึกไว้ก่อน..กันลืม ขอบคุณ คุณ shadows00 จาก Board Thaiadmin กระทู้ http://www.linuxthai.org/forum/index.php?topic=472.0 เป็นอย่างสูง


acl all src 0.0.0.0/0.0.0.0 #กำหนดทุก ip และทุก network ก็คือทุกเครื่องนั่นเอง
acl bitclient src 192.168.1.101 # กำหนดให้ใช้เครื่องไหนในร้านเพื่อให้โหลดบิตได้ (เครื่องเดียว)
acl GAMESERVER dstdom_regex patch asiasoft asianet audition cabal fsonline ghostonline ini3\. maplestory playarcade playpark ragnarok tsonline yulgang hipstreet lunaonline pangya ran.in.th raycity sa.in.th sf.gg suddenattack talesrunner winner\. #กำหนด regular expression สำหรับ domain เกมส์ออนไลน์ ซึ่ง acl นี้จะกำหนด กลุ่มคำที่ระบุถึงเกมส์ออนไลน์ทุกเกมส์
acl UNLIMITTIME time SMTWHFA 00:00-07:00 # กำหนดช่วงเวลาเพื่อกำหนดใน delay pools
acl magic_words1 urlpath_regex \.3gp$ \.aac$ \.ac3$ \.act$ \.aiff?$ \.amr$ \.asf$ \.au$ \.avi$ \.b5t$ \.bin$ \.bwt$ \.cab$ \.ccd$ \.cdi$ \.cue$ \.dat$ \.dct$ \.divx?$ \.dss$ \.exe$ \.flac$ \.fli$ \.flv$ \.gho$ \.gsm$ \.gz$ \.ifo$ \.img$ \.iso$ \.m4a$ \.mp[2-4]$ \.mov$ \.mpe$ \.mpga?$ \.mpeg$ \.mds$ \.nrg$ \.ogg$ \.pdi$ \.qt$ \.ram?$ \.ra[rw]$ \.rcd$ \.rec$ \.rmvb$ \.rmj?$ \.rpm$ \.sea$ \.shn$ \.sri$ \.swf$ \.tar$ \.tgz$ \.vo[bx]$ \.vqf$ \.wav$ \.wm[av]$ \.zip$ # กำหนดประเภทไฟล์ที่จะบีบความเร็ว ใน delay pools
acl bitword urlpath_regex passkey \.torrent # กำหนดคำ ที่จะใช้ตรวจสอบการดาวน์โหลด bitterrent
acl QUERY url_regex -i cgi-bin [^pxz]\? photos[1-9] \.D$ \.ini$ \.dll$ \.inf$ \.Xt \.xtp Loader\.exe 1st$ update.cfg\? urlinfo\.ini$ updatelist patch_lv1 notice_popup ProjectG.exe.zip$ start/ucg UCG\.DAT$ UCGA?\.exe$ version\.cfg$ # กำหนดกลุ่มคำ ที่อยู่ใน url เพื่อไม่ให้ใช้ข้อมูลใน cache และไม่ให้เก็บ cache ไฟล์ซึ่งมี url เป็นคำเหล่านี้
http_access allow bitclient bitword # อนุญาติให้เครื่อง ip ที่กำหนดใช้บิตได้
http_access deny bitword # นอกนั้นใช้บิตไม่ได้
http_access allow all # นอกนั้นให้ใช้งาน squid ได้หมด

# DELAY_POOLS
# ---------------------------------------------------------
delay_pools 1 #กำหนดให้มี delay pools จำนวน 1 pool
delay_class 1 2 # กำหนดให้ pools ที่ 1 ใช้งานแบบ class 2 คือ จำกัดความเร็วแบบรวม และ แบบแยกรายเครื่อง(ip)
delay_parameters 1 750000/750000 200000/200000 # จำกัดความเร็วของ pool ที่ 1 ไว้ที่ 750000 kbyte/sec หรือ 750Kbyte/sec และจำกัดความเร็วรายเครื่องไว้ที่ 200 Kbyte/sec
delay_access 1 allow magic_words1 !GAMESERVER !UNLIMITTIME #เงื่อนไขที่ไฟล์ใดๆ จะตกลงสู่ delay pools นี้เป็นดังนี้
เป็นไฟล์ที่มีนามสกุลตาม acl magig_word1 และ ไม่ใช่มีชื่อ domain ตามคำใน acl GAMESERVER และ ไม่ใช่อยู่ในช่วงเวลาตาม acl UNLIMITIME เราใช้ AND นะครับ นั่นคือ 3 พจน์ต้องเป็นจริง ไฟล์ที่ถูกตรวจสอบนั้นจึงจะตกเข้าไปใน delay pools นี้ เพื่อบีบความเร็ว
ดังนั้น ถ้าเป็น GAMESERVER จะไม่ตกเข้าไป รวมทั้ง ถ้าในเวลาที่ไม่จำกัดความเร็ว ก็ไม่ตกเข้าไป
delay_access 1 deny all # ส่วนไฟล์อื่น ๆ นอกจากเงื่อนไขข้างบนนั้น ไม่ให้ตกเข้าไปใน delay pools ที่ 1 นี้
# DNS OPTIONS
#----------------------------------------------------------
ipcache_size 3072 # สร้างที่เก็บค่า domain name <--> IP ไว้ 3072 ปกติ 1024

# MEMORY CACHE OPTIONS
# ---------------------------------------------------------
cache_mem 1024 MB # ใช้หน่วยความจำมาทำ cache เพื่อให้ทำงานได้เร็ว ประมาณ ครึ่งหนึ่งของ RAM ที่มี
maximum_object_size_in_memory 8 MB # ขนาดของไฟล์ที่จะ cache ในหน่วยความจำ
memory_replacement_policy heap LFUDA # กำหนดนโยบายของการแทนที่
ipcache_high 98 # เมื่อเก็บ ipcache เต็มถึง 98% จะต้องล้างออก
ipcache_low 93 # โดยล้างออกให้เหลือ 93% การล้าง cache นั้นทำงานแบบอัตโนมัติแบบ Quantum คือเอาออกเป็นก้อนครั้งเดียว
# DISK CACHE OPTIONS
# --------------------------------------------------------
cache_dir aufs /home/spool/squid 4096 16 256 # กำหนด dir ที่เก็บ cache และขนาดที่ใช้ 4GB
maximum_object_size 32 MB # ไฟล์ที่ใหญ่ที่สุดไม่เกิน 32MB
cache_replacement_policy heap LFUDA
store_dir_select_algorithm round-robin
cache_swap_high 98 # เมื่อเก็บ cache ถึง 98% ของจำนวนสูงสุดที่ระบุไว้ (4GB) ให้เริ่มล้าง cache อัตโนมัติ
cache_swap_low 93 # โดยล้าง cache ให้เหลือเพียง 93% ซึ่งการล้างออกจะล้างออกแบบ Quantum เป็นก้อนเดียวครั้งเดียวแล้วจึงเริ่มสะสมใหม่ ดังนั้นการล้างจะล้างcache ที่เก่าแล้วออก 5% โดยอัตโนมัติ หรือประมาณ 5x4000/100 = 200 MB จังหวะนี้ CPU จึงขึ้นไปถึง 100%ได้ กรณีเครื่อง CC ที่ช้าๆ
# HTTP OPTIONS
#-----------------------------------------------------------
ie_refresh on
vary_ignore_expire on

# LOGFILE OPTIONS
# ----------------------------------------------------------
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
logfile_rotate 90
pid_filename /var/run/squid.pid
buffered_logs off
strip_query_terms off

# MISCELLANEOUS
# ----------------------------------------------------------
pipeline_prefetch on

# OPTIONS FOR FTP GATEWAYING
#-----------------------------------------------------------
ftp_passive on
ftp_sanitycheck on

# OPTIONS FOR TUNING THE CACHE
# -----------------------------------------------------------
cache deny QUERY # ไม่ให้เก็บ cache
quick_abort_min 0 KB # ไม่เก็บไฟล์ที่เสียหายหรือไม่ครบ มีการยกเลิกก่อนจะโหลดครบ
quick_abort_max 0 KB # ไม่เก็บไฟล์ที่เสียหาย หรือไม่ครบ มีการยกเลิกก่อนจะโหลดครบ
# ต่อไปนี้คือการทำ refresh pattern เพื่อกำหนดเวลาที่จะ refresh หรือ ให้ตรวจสอบหรือดึงมาใหม่ ของประเภทไฟล์ที่ไม่ได้กำหนดวันหมดอายุมา
# ตรงนี้สำคัญมาก ที่จะทำให้เกมส์ เก็บแพทหรือไม่ อยู่ตรงนี้ ให้ไปอ่านเรื่อง refresh_pattern ที่มีผู้บรรยายไว้แล้ว ผมจะไม่กล่าวซ้ำอีกrefresh_pattern -i \.(htmlhtm/)$ 60 20% 720
refresh_pattern -i \.(asp\?aspx\?php\?) 0 20% 720
refresh_pattern -i \.(aspaspxphp)$ 0 20% 720
refresh_pattern -i \.(jpggifjpegpngcssjsbmptiftiffxbmpngswf)$ 0 100% 14400
refresh_pattern -i \.(exezipgzarjlhalzhrartgztarZ)$ 4320 80% 43200 override-lastmod reload-into-ims ignore-reload
refresh_pattern ^http://patch.sf.* 4320 100% 43200 ignore-reload override-lastmod reload-into-ims
refresh_pattern ^http://update.cabal.* 4320 100% 43200 ignore-reload override-lastmod reload-into-ims
refresh_pattern ^http://download.cabal.* 4320 100% 43200 ignore-reload override-lastmod reload-into-ims
refresh_pattern ^ftp: 0 20% 4320
refresh_pattern . 0 20% 4320

# OPTIONS INFLUENCING REQUEST FORWARDING
#------------------------------------------------------------
prefer_direct on

# TIMEOUTS
# -----------------------------------------------------------
half_closed_clients off

# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------
cache_mgr wecareyou2002@hotmail.com
visible_hostname www.wecareyou.com


ศึกษาดูนะครับพอเป็นแนวๆได้ครับ

วันศุกร์ที่ 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

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

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