Archive for January, 2009

0052 | squid 2.6 as reverse transparent proxy

Tuesday, January 13th, 2009 Posted in Linux | 4 Comments »

ของเก่าครับ ไปเจอมาจาก icafezone แต่ตัวเองเขียนเองเนี่ยแหละ
แล้วไม่รู้ว่าต้นฉบับหายไปอยู่ไหนต่อไหนแล้ว
ก๊อปมาจาก icafezone อีกที lol

.

.

ติดตั้ง + ตั้งค่า squid เน้นนะครับ ต้อง squid 2.6 นะครับ
สำหรับ CentOS 5 , fc7 ขึ้นไปนะครับ สั่ง
# yum -y install squid
debian 4.0 สั่ง
# apt-get install squid
ส่วน ที่รุ่นต่ำกว่านั้น สั่ง
# mkdir /usr/local/rpm
# cd /usr/local/rpm
# wget 0000ff;">ftp://fr2.rpmfind.net/linux/fedora/updates/7/SRPMS/squid-2.6.STABLE13-1.fc7.src.rpm
# rpmbuild –rebuild squid-2.6.STABLE13-1.fc7.src.rpm

* มี error ขาด dependencies อะไรใช้ yum สั่งติดตั้งเอาได้เลยครับ มันเป็น base repository อยู่แล้ว
ผ่านแล้วก็สั่ง
# rpm -Uvh /usr/src/redhat/RPMS/i386/squid-2.6.STABLE13-1.fc7.i386.rpm

เสร็จแล้วก็แก้ไข config ของ squid
# vi /etc/squid/squid.conf
จุดหลักที่ต้องตั้งนะครับ * [edit] หมายถึงแก้ที่มีอยู่แล้ว [add] หมายถึงเพิ่มนะครับ
1. [edit] http_port 8080 transparent
2. ลงมาหา acl QUERY urlpath_regex cgi-bin \? แถวๆ บรรทัดที่ 700 [add] ต่อจากบรรทัดนี้นะครับ

Quote:
acl nc_post method POST
acl nc_script urlpath_regex -i \.htm \.php /$
cache deny nc_post
cache deny nc_script

3. [edit] cache_mem 256 MB * ตั้งค่าตาม memory ประมาณ 10% ของเครื่อง เช่นมี แรม 1gb ให้ใส่ประมาณ 128 MB เป็นอย่างมาก
4. [edit] maximum_object_size 8192 KB * ไม่ควรเกิน 8 MB แต่ไม่ควรต่ำกว่า 2 MB
5. [edit] minimum_object_size 0 KB * (จริงๆ ไม่ต้องแก้ก็ได้ครับ)
6. [edit] maximum_object_size_in_memory 64 KB * ไม่ควรตั้งเกิน 128 KB ไม่ว่ากรณีไหนทั้งสิ้น
7. [edit] cache_replacement_policy heap LFUDA * เนื่องจากเป็นเว็บที่ให้ download file สมควรใช้ byte hit ให้ได้สูงๆ
8. [edit] memory_replacement_policy heap GDSF * เนื่องจาก memory ไว้เก็บไฟล์เล็กๆ อยู่แล้ว ใช้ option นี้จะให้ file hit rate สูง
9. [edit] cache_dir aufs /var/spool/squid 1024 16 256 * ตัวแรก เดิมจะเป็น ufs แก้เป็น aufs จะให้ประสิทธิภาพดีกว่า ส่วนตัวที่สอง ตามนี้เลยครับ
10. [uncomment] logformat combined %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %h” “%{User-Agent}>h” %Ss:%Sh * แถวๆ บรรทัดที่ 1090
11. [edit] access_log /var/log/squid/access.log combined * ให้เก็บ log แบบเดียวกับ apache log เวลาค้นหาอะไรจะได้ง่าย
11.2. [edit] cache_store_log none * ตรงนี้ให้แก้เป็น none จะได้ประหยัดเนื้อที่เก็บ log ลงไปอีกครับ
12. [edit] dns_nameservers 127.0.0.1 203.146.129.182 * แก้ตัวแดงเป็น ip ของเครื่อง server คุณเองครับ
13. [add] แถวๆ บรรทัดที่ 2440 หา acl CONNECT method CONNECT เอาไอ้ด้านล่างนี่ต่อไปเลยครับ

Quote:
acl to_httpd dst 203.146.129.182
acl to_httpdport port 80
acl to_httpdport port 3080
http_access allow to_httpd to_httpdport

14. [edit] visible_hostname your.hostname.here.com

ถึงตอนนี้ squid น่าจะ start ผ่านแล้วนะครับ สั่ง
# service squid restart
# chkconfig –level 235 squid on
ได้เลยครับ

จากนั้นก็ทดสอบดูว่า squid ทำงานมั้ย ด้วยการใส่ proxy ครับ ใส่เป็น ip ของ server port 8080
ลองเข้าให้หมดทุกเว็บเลยที่อยู่ในเครื่อง แล้วก็เว็บทั่วไปด้วย
เว็บที่อยู่ในเครื่อง ควรจะเข้าได้ปกติ ในขณะที่เว็บทั่วไป ควรขึ้น access denied

หลังจากผ่านแล้ว ตั้งค่า iptables ให้เข้า squid นะครับ
# iptables -t nat -A PREROUTING -d 123.123.123.123 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080
# service iptables save
แก้ตัวแดงเป็น ip server ด้วยนะครับ