Author Archive

แก้ปัญหา REMOTE_ADDR ใน Reverse Proxy

Posted by อัทศักดิ์ วงศ์กิตตะ on Thursday, February 19th, 2009

สวัสดีครับ วันนี้จิบเบียร์แล้วก็มานั้งทบทวนเรื่องงานที่ทำ  พอดีมีเรื่องเล็กๆน้่อยๆ ที่ผมเองทำและน่าจะเป็นประโยช์กับเพื่อนๆ  เกี่ยวกับการตั้ง Reverse Proxy กับปัญหา เรื่อง IP ที่ show ใน app ของเรา

ปกติเวลาเราเขียน Apps หรือ พวกฟรี Webboard ทั้งหลายจะมีการ Check IP จาก

$_SERVER['REMOTE_ADDR'] และ $_SERVER['HTTP_X_FORWARDED_FOR']  หากเจอตัวแปล HTTP_X_FORWARDED_FOR   ระบบจะทำการ Record  IP จาก  HTTP_X_FORWARDED_FOR ด้วย   แต่หากว่าบางโปรแกรมที่เขียน จะเก็บแค่   REMOTE_ADDR  ทำให้ IP ที่แสดงในโปรแกรมของเรา  เป็น IP ของ Reverse Proxy แทน
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Reset MySQL Password for FreeBSD

Posted by อัทศักดิ์ วงศ์กิตตะ on Saturday, February 7th, 2009

วันนี้กำลังลง Apps ให้ลูกค้าครับ พอดีเค้าลง MySQL 4.0 ไว้พอถามไปเค้าบอกว่า ลืม Password MySQL สะงั้น ผมเลยต้อง Reset Password MySQL ใหม่ วิธีก็มีหลายหลากครับ แต่ผมเลือกทางง่ายๆ (สำหรับผม) ลองทำตามกันดูนะครับ :)

1. ทำการดูว่า mysql เรา start process ยังไง
ps auxww | grep mysql

mysql 23572 0.0 0.3 1724 1372 p2 S 1:52AM 0:00.01 /bin/sh /usr/local/bin/mysqld_safe –defaults-extra-file=/var/db/mysql/my.cnf –user=mysql –datadir=/var/db/mysql –pid-file=/var/db/mysql/mail.domain.com.pid
mysql 23591 0.0 4.8 57084 24936 p2 S 1:52AM 0:00.31 /usr/local/libexec/mysqld –defaults-extra-file=/var/db/mysql/my.cnf –basedir=/usr/local –datadir=/var/db/mysql –user=mysql –pid-file=/var/db/mysql/mail.domain.com.pid

2. เรารู้แล้วว่า MySQL Start process ยังไงเราก็stop db + start mysql ผ่าน command

/usr/local/bin/mysqld_safe –defaults-extra-file=/var/db/mysql/my.cnf –user=mysql –datadir=/var/db/mysql –pid-file=/var/db/mysql/mail.domain.com.pid –skip-grant-tables

เราใส่ –skip-grant-tables MySQL จะไม่ตรวจสอบ table mysql ทำให้เราสามารถ Login โดยไม่ต้องใส่ Password ได้

shell# mysql
mysq> use mysql
mysql> UPDATE user SET password=password(’secret’) WHERE user=’root’;
mysql> exit;

shell#mysqladmin -p shutdown
ใส่ password ใหม่ที่เราตั้งใหม่ คือ secret

3. start mysql ผ่าน rc.d ปกติและใช้ password ใหม่ได้แล้วครับ : )

PHP – 2 Way Encrypt by PKI

Posted by อัทศักดิ์ วงศ์กิตตะ on Friday, January 16th, 2009

ช่วงนี้ขยันครับกะจะปั่นบาความใหม่ๆสะหน่อย หลังจากไม่ได้เขียนมาสะนาน  วันนี้เอาเรื่องเกี่ยวกับ Developer บ้างผมเองเป็นทั้ง System,  Programing   เลยยกเรื่องการเ้ข้ารหัสข้อมูลที่เป็นแบบ  2 way คือสามารถ เข้ารหัส และถอดกลับมาได้  และมีความปลอดภัยสูง

PKI มาพูดเรื่อง PKI ก่อนนะครับ   ส่วนตัวผมเองไม่ได้เรื่อง IT มาเรื่อง PKI  ผมเองก็ได้แต่อ่านๆจากในเน็ต แล้วก็นำมาเล่าสู่กันฟัง    ท่าสามารถหาข้อมูลที่ลึงมากกว่านี้ได้จาก Link ข้างล่าง    “Public key infrastructure”  คือการเข้ารหัสข้อมูล โดยใช้  กุญแจ 2 ลูกคือ   Public Key และ Private Key       หากเราเข้ารหัสข้อมูลโดยใช้  Private Key     เราก็ต้องถอดรหัสโดยใช้  Public Key     ในทางกลับกัน ถ้าเข้ารหัสด้วย Public Key ก็ต้องใช้ Private Key ถอดรหัสเท่านั้น

ทีนี้มาพูดถึงความปลอดภัย   ตัว PKI เองสามารถเลือก bit การเข้ารหัสได้ตามที่เราต้องการ ตั้งแต่ 512, 1024, 2048  และสามารถเข้ารหัวได้สูงกว่านี้   ทำให้เป็นการยากที่จะถอดรหัสได้    ทุกๆวันนี้เราเองก็ใช้เทคโนโลยีนี้แทบทุกวัน โดยที่เราไม่รู้ตัว  อย่างบัตร SmartCard เองก็ใช้ PKI ในการเข้ารหัส หรือ Card UBC  เองก็ใช้เช่นกัน    อีกตัวอย่างคือ   เวลาเข้าเว็บไซด์ผ่าน https   ระหว่าง Web Server และ Browser ก็จะมีการเข้ารหัสข้อมูล โดยใช้เทคโนโลยี PKI    ในการเข้ารหัสเช่นกัน

คลิกที่นี่เพื่อดูส่วนที่เหลือ »

OpenVPN on Debian

Posted by อัทศักดิ์ วงศ์กิตตะ on Thursday, January 15th, 2009

สวัสดีอีกครั้งครับหลังจากหายหน้าหายตาไปนาน จริงๆก็ไม่ได้ไปไหนแค่หลังๆมางานที่ office ค่อนข้างมากแล้วผมเองก็ไปเที่ยวสะบ่อยๆ เลยไม่ค่อยได้มาเขียนบทความให้อ่านกัน   วันนี้เป็นเรื่องการทำ VPN  โดยใช้ OpenVPN    ทำไมต้องเป็น OpenVPN  สาเหตุของผมคือ ผมเองต้องติดตั้งระบบ Auth System (Radius + Chillispot + Syslog-ng)    แต่ละที่ดันเป็น Dynamic IP หมด  เวลาจะแก้ไขอะไรก็ต้องไป set router    ซึ่งมันไม่ใช่ทางเลือกที่ดีเลย    ทางแก้ผมเลย set up ที่ Center แล้วให้ Site แต่ละที่ทำการสร้าง VPN Connection ไปยัง Center

Server# apt-get install openvpn
Server# vi /etc/openvpn/server.conf

# ไฟล์ /etc/openvpn/server.conf

dev tap0
proto tcp-server
ping 1
ping-restart 5
port 10000
ifconfig 10.10.10.1 255.255.255.0
Client# apt-get install openvpn
Client# vi /etc/openvpn/client.conf

# ไฟล์ /etc/openvpn/server.conf

dev tap0
proto tcp-client
ping 1
ping-restart 5
port 10003
ifconfig 10.10.10.2 255.255.255.0
remote 203.1.1.1
Server# /etc/init.d/openvpn start
Client# /etc/init.d/openvpn start

Check Transparent Proxy

Posted by อัทศักดิ์ วงศ์กิตตะ on Monday, September 1st, 2008

คือมี case ที่ต้องทำ transparent proxy ครับ  แต่ว่าเวลา proxy มีปัญหา ผมอยากให้ทำการ ปลด proxy ออกเอง  ผมเลยเขียน shell script  มาเพื่อทำการ ตรวจสอบว่า proxy ทำได้หรือเปล่า ถ้าทำงานได้ ก็จะเพิ่ม iptables  ทำการสร้าง DNAT  ไปยังเครื่อง Proxy ครับ

คลิกที่นี่เพื่อดูส่วนที่เหลือ »

พรบ. การกระทำความผิดเกี่ยวกับคอมพิวเตอร์ – Revert Proxy Log Rotate

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, August 24th, 2008

ตามที่ พรบ  ได้กำหนดให้ “ผู้ให้บริการ” เก็บ log การใช้บริการ   โชคดีที่ผมมี Revert Proxy วางไว้หน้า Web Server  ทำให้สามารถเก็บ Log ได้ง่ายหน่อย   ตัว script ที่ผมเขียนนี้ จะทำการ rotate log และ compress log ไว้    ใน version ต่อไป จะทำการ ftp ไปไว้ยัง Log Server  อื่น แทนครับ :)
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Apache 2.0 – Name Base VHost

Posted by อัทศักดิ์ วงศ์กิตตะ on Tuesday, July 22nd, 2008

พอไปอ่านกระทู้ใน thaibsd.com เลยกะต่อยอดเล็กน้อย หลังจากที่ติดตั้ง “Apache2.0 + PHP5 on FreeBSD” ก็ถึงครามาทำ Name Base Vhost ในรูปแบบของผม พูดถึงเรื่อง Vhosts มันทำได้หลายแบบ แต่ที่เราทำกันบ่อยๆก็ Name Base Host และ IP Base VHost

อะไรคือ “Name Base Vhost” ขอกล่าวถึง HTTP Protocol ละกันครับ เวลาที่ IE, Firefox ในเครื่องเ้้ราซึ่งเค้าเรียกรวมกันว่า Browser เข้าไปเว็บๆหนึ่ง เช่น เข้าไปที่ http://howtoconfig.com/index.php Browser ของเราก็จะสร้าง tcp connect ไปยัง IP ปลายทาง port 80 และส่ง
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Split MySQL Query แยก RO/RW

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, June 8th, 2008

วันนี้มีปัญหาขึ้นมาครับ เนื่องจาก MySQL Cluster ที่ใช้งบานนั้นลองทดสอบความเร็วแล้วสู้ MySQL แล้วใช้ Local Engine ไม่ได้เลย งานนี้เลยต้องหาทางออกครับ ผมเลยไปมอง เรื่อง MySQL Replication หลังจาก Setup และ Tuning เสร็จ ก็มาลองทดสอบความเร็ว มัน Query เร็วกว่า MySQL Cluster หลายเท่าเลยครับ

ทีนี้ก็มาดูเรื่อง Codeing ปัญหาคือมันเป็นโปรแกรมที่เค้าเขียนมานานละ ผมเข้าไปแก้อะไรไม่ค่อยได้ หรือถ้าแก้จริงๆ อยาจจะเป็น Bug อีกก็ได้ คิดไปๆมาๆ อ่าเจอทางออกแล้ว

ปัญหา
– MySQL Cluster ช้า ต้องไปใช้ MySQL Replication แทน
– ไล่แก้ Code ลำบาก เพระา code ค่อนข้างมาก
– Query ต้องเร็วและเพิ่ม MySQL Server ได้ในอนาคต

ทางแก้
– MyQL-Proxy ส่วนนี้ผมลองเอามาใช้แล้วครับ ลอง Query ดูมันก็ยังช้ากว่า Connect เข้า DB ตรงๆถึง 5 – 10 เท่า
– Edit Query ผมเลือกทางนี้ครับ แต่มันมีวิธีลักไก่หน่อย แนวคิดคือต้องไม่ไปยุ่งกะ Code มาก ผมเลยทำการสร้าง php function ใหม่ขึ้นมาครับ โดยทำหน้าที่ check sql ก่อนที่จะ Query ว่าเป็น SELECT, UPDATE, INSERT, DELETE แล้วให้ function ที่สร้างขึ้นมา เลือกที่จะไป query กะ mysql เครื่องไหน

1. สร้าง function mysql_do_query

function mysql_do_query( $sql, $count_rw=null)
{
	global $conn_ro, $count_rw, $count_ro;
	if ( ! empty( $sql))	
	{
		if ( ereg("^SELECT(.*)", strtoupper( $sql)))
		{
			$count_ro++;
			return mysql_query( $sql, $conn_ro);
		} else {
			$count_rw++;
			return mysql_query( $sql);
		}
	}
}

2. ทำการ edit *.php แล้วทำการ replace mysql_query -> mysql_do_query โดยผมใช้ คำสั่ง sed ใน shell script เพื่อแก้ไขไฟล์

#!/bin/bash
for fl in *.php; do
mv $fl $fl.old
sed 's/mysql_query/mysql_query/g' $fl.old > $fl
rm -f $fl.old
done

เสร็จแล้วก็รันครับ shell script จะทำการ find หา *.php แล้วทำการเปลี่ยน function ให้ ต่อไปเวลา ให้ programmer เขียน codeing ก็ให้ทำการ ใช้ function mysql_do_query() แทนครับ

MySQL Cluster on Debian AMD64

Posted by อัทศักดิ์ วงศ์กิตตะ on Friday, June 6th, 2008

สวัสดีเพื่อนๆรวมโลกทุกท่าน วันนี้ก็ได้โอกาศมาเขียนบทความเรื่อง MySQL Cluster สะที หลังจากที่ได้ทำการติดตั้ง และงมกะ Config มาหลายวันจริงๆผมต้องย้าย Database ให้เสร็จตั้งแต่วันที่ 2/6/2008 แต่จนถึงวันนนี้ก็ยังไม่ได้ย้าย

Database เลย เหตุผลหลักคือ

1. Database ค่อนข้างใหญ่ ประมาณ 7G และมี Redcord อยู่ประมาณ 38 ล้าน Redcord
2. ตอน Import Data ผม Dump database มาผิดแบบ
3. MySQL ตอนที่ผม Lab test + ใช้งานจริงเป็นคนละ Version

ด้วยเหตุผลเหล่านี้ทำให้ผมขึ้น MySQL Cluster ไม่ได้ หลังจากลองหาทางแก้อยู่หลายวัน ก็แก้ได้จนหมด งั้นวันนี้ผมก็ของบอกวิธีติดตั้ง และ Config ให้สามารถใช้งานได้ก่อนละกันนะครับ ส่วนเรื่องการ Tuning เอาไว้เดี๋ยวมาบอกอีกที

อุปกรณ์
- Dell 1950, CPU 4Core 2.66GHz x2, Ram 16G (ndbd+mysqld)
- PC P4, Ram 1G (ndb_memd)

การตั้งค่า
- DBC1 IP: 192.168.1.21
- BDC2 IP: 192.168.1.22
- MGM IP: 192.168.1.11
คลิกที่นี่เพื่อดูส่วนที่เหลือ »

Apache2.0 + PHP5 on FreeBSD

Posted by อัทศักดิ์ วงศ์กิตตะ on Wednesday, June 4th, 2008

ผ่านไปพักใหญ่ MySQL Cluster ก็ยังไม่ Start สะทีเลยถือโอกาศมาเขียน docs เรื่องการติดตั้ง Apache + PHP + Mysql ในรูปแบบของผมกันครับ ก่อนอื่นให้ทำการติดตั้ง MySQL ตามเอกสารนี้ครับ

1. ทำการ Update pors ครับ (แนะนำว่าให้ทำบ่อยๆ ใส่ crontab ไว้เลยก็ได้ครับ)

cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile -h cvsup.th.freebsd.org

2. ทำการติดตั้ง Apache 2.0

cd /usr/ports/www/apache20/
make all install clean WITH_SSL_MODULES=yes

คลิกที่นี่เพื่อดูส่วนที่เหลือ »