Archive for the ‘Shell script’ Category

IPTables statefull firewall for Linux

Posted by อัทศักดิ์ วงศ์กิตตะ on Tuesday, March 23rd, 2010

หายไปนานครับ วันี้เอาเรื่องเก่าๆมาหากินใหม่ IPTables ที่ทำๆอยู่ทุกวันนี้แหละครับ พอดีทำ Shell Script ทิ้งไว้เลยเอามาแจกจ่ายให้เพื่อนๆเอาไปใช้งาน หลายๆคนถามว่าทำไมต้องเขียนเอง ก็เหตุผลง่ายๆครับ เราเขียนเองเรารู้ทุกๆ rules ที่มันทำงานอย่างไร เวลาเกิดปัญหา เราสามารถแก้ไขปัญหาได้ รวดเร็ว มาดูความสามารถของ script firewall ตัวนี้ครับ

ความสามารถ:
– State full firewall
– สามารถกำหนด Interface ที่ทำงานได้
– สามารถกำหนด VIP IP ได้
– สามารถกำหนด Band IP ได้
– มีการเก็บ Log ลง syslog
– ป้องกันการ Scan port ได้
– ป้องกัน IP Spoofig
– ป้องกัน SSH Attatch
Continue reading “IPTables statefull firewall for Linux” »

Check Transparent Proxy

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

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

Continue reading “Check Transparent 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  อื่น แทนครับ :)
Continue reading “พรบ. การกระทำความผิดเกี่ยวกับคอมพิวเตอร์ – Revert Proxy Log Rotate” »

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() แทนครับ

Shell Script Backup MySQL

Posted by อัทศักดิ์ วงศ์กิตตะ on Saturday, May 31st, 2008

สวัสดีครับผม ว่าแล้ววันนี้ก็เขียน shell script ง่ายๆ เพื่อ backup mysql ลง NFS ที่ผม map ไว้ โดย script ที่เขียนขึ้นมานั้น จะมีข้อดีก็ตรงการตั้งเวลาในการลบ data เก่าทิ้งได้

#!/bin/sh
 
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
 
BACKUP_SRC=/usr/home/mysql”
BACKUP_DST=/data/backup/mysql”
LIMIT=7d
 
########################################
HOSTNAME=`uname -n`
DATE=`date +%Y%m%d`
DATE_DELETE=`date -v-${LIMIT} +%Y%m%d`
BACKUP_LOG=”${BACKUP_DST}/backup.log########################################
 
echo “=============================>> ${BACKUP_LOG}
echo `date` >> ${BACKUP_LOG}
echo -n “delete expire backup data..” >> ${BACKUP_LOG}
rm -rf $BACKUP_DST/mysql-$DATE_DELETE 1> /dev/null 2> /dev/null
echo ” done” >> ${BACKUP_LOG}
 
echo -n “backup database..” >> ${BACKUP_LOG}
cp -Rp $BACKUP_SRC $BACKUP_DST/$DATE
echo ” done” >> ${BACKUP_LOG}

การทำงานของ script คือ ระบบจะทำการหาวันปัจจุบัน และวันที่ expire “DATE_DELETE=`date -v-${LIMIT} +%Y%m%d`” โดยจะลบวันจากปัจจุบันไปอีก 7 วัน แล้วก็ค่อย Delete ทิ้งครับผม ส่วนของวัน สามารถแก้่ไขได้ครับ เป็น 7d, 1m (1เดือน) ประมาณนี้ครับ