Author Archive

การ Mount HDD ด้วย Label

Posted by อัทศักดิ์ วงศ์กิตตะ on Friday, April 29th, 2011

สวัสดีครับหลังจากห่างหายไปนาน คิดว่าช่วงนี้จะพยายามเข้ามา Update บ่อยๆนะครับ   ช่วงนี้มีงานต้องติดตั้งเว็บ Download ไฟล์ให้ลูกค้าโดยมีเครื่องหลายๆเครื่อง และแต่ละเครื่องมี Card SATA  เพิ่มขึ้น ทำให้แต่ละเครื่องมี HDD ไม่ต่ำกว่า 10 ก้อน

ก่อนนี้ผมใช้การ Mount ผ่าน /etc/fstab    โดยการกำหนด device ไปตรงๆ แต่เมื่อ HDD มีปัญหาจำเป็นต้องถอดออกไปเปลี่ยน  จะเกิดปัญหา Device เปลี่ยนตำแหน่ง ทำให้ไม่สามารถ Mount HDD ได้      ด้วยเหตุนี้ผมจึงได้ใช้วิธีการ Mount HDD ผ่าน “Disk Label”

Disk Label  คือการใส่ป้ายชื่อกำกับให้แต่ละ Partition โดยสามารถกำหนดความยาวได้สูงสุดถึง 160 ตัวอักษร    และหากเมื่อเราเอา HDD ก้อนดังกล่าวไปใช้งานเครื่องอื่น ก็สามารถเห็น Label เดียวกันทั้งหมด

วิธีการตั้งชื่อ Label

สำหรับการตั้งชื่อจะใช้คำสั่ง  tune2fs  สำหรับ Partition ที่ใช้ Filesystem  ที่เป็น ext2, ext3     และใช้คำสั่ง  tune4fs สำหรับ ext4  โดยมีคำสั่งดังนี้

Ext4 Partition

tune4fs -L dl2-01 /dev/sda1

ส่วนของไฟล์  /etc/fstab

LABEL=/                 /                               ext3            defaults        1 1
tmpfs                   /dev/shm                        tmpfs   defaults        0 0
devpts                  /dev/pts                        devpts  gid=5,mode=620  0 0
sysfs                           /sys                            sysfs           defaults        0 0
proc                            /proc                           proc            defaults        0 0
 
LABEL=dl2-00            /home/dl2-00            ext4            defaults        0 0
LABEL=dl2-01            /home/dl2-01            ext4            defaults        0 0

แค่นี้เครื่อง Server ก็จะเมาท์ HDD โดยใช้ Disk Label แล้วครับ หาเราทำการถอดหรือเพิ่ม HDD เข้าไปก็จะไม่มีปัญหากับ HDD ที่มีอยู่ครับผม

How to use IPMI on Debian

Posted by อัทศักดิ์ วงศ์กิตตะ on Tuesday, November 2nd, 2010

โหลด IPMI Kernel Modules

modprobe ipmi_watchdog
modprobe ipmi_poweroff
modprobe ipmi_msghandler
modprobe ipmi_devintf
modprobe ipmi_si

ติดตั้ง ipmitool

apt-get install ipmitool

ทำการ config ipmi

ipmitool lan set 1 ipaddr 192.168.1.101
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 192.168.1.254
ipmitool lan set 1 password mypassword
ipmitool lan set 1 access on
ipmitool lan set 1 arp respond on
ipmitool mc reset cold

วิธีการใช้งาน

ดู สถาณะ Power

ipmitool -H 192.168.1.101 -U root -P mypassword power status

Reset  เครื่อง

ipmitool -H 192.168.1.101 -U root -P mypassword power reset

หากท่านใช้ iPhone ผมแนะนำ IPNI Touch ครับ สามารถสั่ง Power On/Off/Reset ได้เลย ทำให้ Admin อย่างเราๆมีชีวิตที่แสนสบายขึ้นเยอะเลยครับ

OpenVPN on UDP 53 – ไปที่ไหนก็เล่น Net ได้!!!

Posted by อัทศักดิ์ วงศ์กิตตะ on Monday, October 25th, 2010

สมัยนี้ไปไหนก็มีก็มี Wifi ให้เราใช้งาน ไม่ว่าจะเป็นแบบฟรี หรือ เสียเงิน    วันนี้ผมเอาจุดอ่อน ที่ผู้ให้บริการ Hotspot  มองข้ามคือ การเปิด Any DNS  หรือ การเปิดให้ Client สามารถ Query DNS ข้างน้อกได้ โดยไม่ได้ทำการ Auth      ซึ่ง Wifi หลายๆที่เปิดไว้เพื่อความสะดวก   แต่ตรงนี้แหละเป็นจุดอ่อน  ที่จะทำให้เราสามารถใช้งาน Internet ได้โดยไม่โดนจำกัด Bandwidth

สิ่งที่ต้องเตรียม

  1. ต้องมี Server ที่เป็น Fix IP ไว้ข้างนอก
  2. ติดตั้ง OpenVPN

ติดตั้ง Server

apt-get install openvpn
openvpn --genkey --secret /etc/openvpn/mysecret.key
 
vi /etc/openvpn/server-udp-53.conf
# File /etc/openvpn/server-udp-53.conf
dev tap
mode p2p
proto udp
#ping 1
port 53
ifconfig 10.10.10.1 255.255.255.252
secret /etc/openvpn/mysecret.key
tun-mtu 1500
tun-mtu-extra 32
mssfix 1400

push "route 192.168.10.0 255.255.255.0"

ติดตั้ง Client

Download Client จาก   http://openvpn.net/index.php/openvpn-client.html  และทำการติดตั้ง

Copy file  mysecret.key   มาไว้ในเครื่อง  และสร้างไฟล์ config   โดยใช้ชื่อ     client.ovpn

#file client.ovpn
dev tap
mode p2p
proto udp
remote <IP Server>
#ping 1
port 53
ifconfig 10.10.30.2 255.255.255.252
secret mysecret.key

tun-mtu 1500
tun-mtu-extra 32
mssfix 1400
ping 5

แค่นี้ก็สามารถ  Connect VPN ผ่าน  UDP/53 ได้แล้วครับ

Citrix – Missing gpg key

Posted by อัทศักดิ์ วงศ์กิตตะ on Thursday, October 21st, 2010

วันนี้ติดตั้ง Xen Server  และลง Debian ในเครื่อง  Xen จะทำการ Add  source ของ citrix ให้เองอัตโนมัตติ   แต่เมื่อเราทำการ update  package   จะฟ้อง Error  ว่าไม่พบ GPG key ของ Citrix     เราสามารถติดตั้งได้  ดั่งนี้

server:~# wget -q http://updates.vmd.citrix.com/XenServer/5.5.0/GPG-KEY -O- | apt-key add -

แค่นี้เวลาเราสั่ง apt-get ก็จะไม่ฟ้อง error gpg key อีกแล้วครับ

HA Proxy High Performance TCP/HTTP Load Balancer

Posted by อัทศักดิ์ วงศ์กิตตะ on Wednesday, October 20th, 2010

วันนี้ประเดิม Blog แรกด้วย HAProxy   ซึ่งเป็น Software load balance  ที่สามารถทำงานได้ถึง Layer7    หลักๆผมเอามาทำเป็น HTTP Load Balance    เป้าหมายหลักๆที่ต้องการคือ

  • แยกโหลดไปยังเครื่อง Web Node แต่ละเครื่องได้
  • กำหนด weight  ของแต่ละ Server ได้
  • สามารถทำ health check script ได้เอง
  • สามารถ ทำงานได้ในระดับ Layer 7 ได้

หลังจากผมใช้งาน Linux-Ha (ipvsadm) มานาน  ผมพบปัญหาว่า บางครั้งหากเครื่อง Web Node มีปัญหาเครื่อง Load balance จะไม่ปลดโหลดออก ทำให้ผู้ใช้งานไม่สามารถใช้งานได้       ผมเลยลองค้นหาเรื่อง L7 Load Balance   จึงมาพบ  HA Proxy    เลยลอง apt-get install haproxy   ดูพบว่าใน Debian ก็มี package มาให้ เลยลองติดตั้งพบว่า สามารถตอบสนอง ความต้องการของผมได้เป็นอย่างดี  ยังไงลองมาดูกันครับ ว่าติดตั้งและใช้งานเป็นยังไง

ติดตั้ง

apt-get install haproxy
# File /etc/haproxy/haproxy.cfg
global
 daemon
 user            haproxy
 group   haproxy
 maxconn 8192
 log             127.0.0.1       local0
 log             127.0.0.1       local1 notice
 stats           socket  /var/run/haproxy.sock mode 666

defaults
 log             global
 mode    http
 option  httplog
 option  dontlognull
 option  httpclose
 #option forwardfor

 stats           enable
 retries 3
 option  redispatch
 maxconn 65535
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000

listen  igetweb.com 0.0.0.0:80
 balance roundrobin

 acl     url_static              path_beg                /images /image /css
 acl     url_static              path_end                .jpg .jpeg .JPG .gif .png .ico .css .zip .tgz .gz .rar .bz2 .doc .xls .exe .pdf .ppt .txt .tar .mid .midi .wav .bmp .rtf .js .swf .wma .wmv

 use_backend             pool_static                     if url_static
 default_backend         pool_dynamic

backend pool_dynamic
 balance roundrobin
 option  httpchk HEAD /check.txt HTTP/1.0
 server web1 192.168.1.11:80  check inter 2000 fall 3 weight 1
 server web2 192.168.1.12:80  check inter 2000 fall 3 weight 1

backend pool_static
 balance roundrobin
 option  httpchk HEAD /check.txt HTTP/1.0
 server web1 192.168.1.21:80  check inter 2000 fall 3 weight 1
 server web2 192.168.1.22:80  check inter 2000 fall 3 weight 1

ส่วนสำคัญคือ ACL โดยเราได้ทำการประกาศ ACL ที่ชื่อ url_static โดยหากผู้ใช้งานเรียก url ที่ขึ้นต้นด้วย /image /images /css หรือ ไฟล์ที่ลงท้ายด้วย jpg, jpge และทำการประกาศว่า หาก macth acl url_static ให้ไปเรียกใช้ pool_static แค่นี้เราก็มี L7 Load Balance ไว้ใช้งาน โดยไม่ต้องเสียงินหลักแสน ซื้อ Hardware Load balance แล้วครับ

Speedup Dynamic and Static Content with Nginx

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, May 9th, 2010

พูดถึงปัญหาของเว็บใหญ่ๆทั่วไป ก็คงไม่เว็บเรื่องระบบ File System เพราะปัจจุบันมีแค่ NFS เท่านั้นที่ทำการ Share ไฟล์ได้ใน Unix หากจะหันไปให้ SAN หรือ iSCSI ราคาก็แสนแพง เพราะฉนั้นระบบใหญ่แค่ไหนก็มีปัญหาที่ระบบไฟล์ทุกที เราจึงต้องลบ Traffic ที่จะวิ่งไปดึงจาก NFS ให้น้อยที่สุด วันนี้ผมมีอีกทางออกให้คือการแยก Static และ Dynamic Content ออกจากกัน เพราะหากเราแยกได้แล้ว เราสามารถที่จะ Sync Dynamic Content ให้ไปอยู่ใน Local disk ได้หรือ จะทำการเลือกใช้ Web Server ให้เหมาะสมกับระบบที่เราดูแลได้ง่ายขึ้น


Continue reading “Speedup Dynamic and Static Content with Nginx” »

FreeBSD tip: SUDO Email alert

Posted by อัทศักดิ์ วงศ์กิตตะ on Sunday, May 9th, 2010

แนวคิดคือ Server ที่เราดูแลมี System Admin หลายคนที่สามารถ Access เป็น Root ได้ แล้วเราจะรู้ได้ไงว่า ใคร Login เข้าไปยัง Server ทางออกของผมคือ Allow User ที่ sshd ให้มีแค่ admin เท่านั้นที่เข้าได้ และให้ sudo เป็น root และจะมีอีเมล์แจ้งเตือนมายัง ผู้ดูแล เพื่อทราบว่าเข้าไปทำอะไร

1. sshd ให้แก้ไขไฟล์ /etc/ssh/sshd_config เพิ่ม AllowUsers เช่น
AllowUsers auttasak

2. แก้ไข /usr/local/etc/sudoers ดั่งนี้

Defaults mailto=admin@domain.com,mail_always
root ALL=(ALL) ALL
auttasak ALL=(ALL) NOPASSWD: ALL

หลังจากนั้นให้ทำการ Restart SSH ครับ เมื่อใดที่มีคน sudo จะมีอีเมล์แจ้งไปยัง admin@domain.com แบบนี้ทำให้เราทราบได้ว่ามีคน sudo เป็น root เมื่อใดบ้าง

Use wget on FreeBSD Ports with proxy

Posted by อัทศักดิ์ วงศ์กิตตะ on Wednesday, April 28th, 2010

เพื่อนๆคงเจอปัญหาเมื่อต้องการติดตั้งโปรแกรมผ่าน Ports ของ FreeBSD ซึ้งจะต้องโหลด Source จากต่างประเทษปต่ปัญหาคือ ISP บางเจ้าในไทย Link Inter ช้าเหลือเกิน ทางออกคือใช้ proxy แทน มาดูวิธีเลยครับ

echo "FETCH_CMD=wget" >> /etc/make.conf
echo "FETCH_BEFORE_ARGS=-nc --progress=bar --read-timeout=60" >> /etc/make.conf
 
HTTP_PROXY=http://user:pass@proxy.domain.com:3128/
FTP_PROXY=http://user:pass@proxy.domain.com:3128/
export HTTP_PROXY FTP_PROXY

แค่นี้เพื่อนๆก็สามารถลงโปรแกรมผ่าน wget โดยใช้ Proxy ได้แล้วครับ

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” »

แก้ปัญหา 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 แทน
Continue reading “แก้ปัญหา REMOTE_ADDR ใน Reverse Proxy” »