DirectAdmin ตั้งแต่เวอร์ชัน 1.39 เป็นต้นไป ได้เพิ่มความสามารถในการตรวจสอบการ Brute Force หรือการเดาสุ่มรหัสผ่านไปเรื่อยๆ (รายละเอียด) แต่สิ่งหนึ่งที่ DirectAdmin ไม่ได้ทำมาให้คือ ทำการแบนไอพีที่มา Brute Force เราโดยอัตโนมัติ ทำให้ DirectAdmin ทำได้เพียงแค่แจ้งเตือนว่ามีไอพีใด Brute Force เครื่องเราเรื่อยๆ โดยไม่ได้มีประโยชน์อันใดเพิ่มขึ้นมา (นอกจากทำให้รำคาญอีเมลแจ้งเตือน) เพราะฉะนั้นบทความนี้จะมาบอกถึงขั้นตอนทำให้ DirectAdmin แบนไอพีที่มา Brute Force โดยอัตโนมัติ โดยลินุกซ์ดิสโทรที่ผมใช้คือ Debian 6 64-bit ถ้าใช้ CentOS ลองทำตามขั้นตอนที่นี่ดูครับ
ขั้นแรกให้ลง iptables ก่อนด้วยคำสั่ง
apt-get install iptables
จากนั้นเราจะสร้างสคริปต์ blockip.sh ไว้ที่ /usr/local/directadmin/scripts/custom/blockip.sh โดยมีเนื้อหาตามนี้ครับ
#666666; font-style: italic;">#!/bin/sh
curriptables#7a0874; font-weight: bold;">(#7a0874; font-weight: bold;">) #7a0874; font-weight: bold;">{ #7a0874; font-weight: bold;">echo #ff0000;">"<br><br><textarea cols=160 rows=60>"; #000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables #660033;">-nL#7a0874; font-weight: bold;">echo #ff0000;">"</textarea>"; #7a0874; font-weight: bold;">}
#666666; font-style: italic;">### Make sure it's not already blocked #007800;">COUNT=#000000; font-weight: bold;"></span><span style="color: <a class="hashtag" href="/tags/c20cb9">#c20cb9</a>; font-weight: bold;">grep</span> <span style="color: <a class="hashtag" href="/tags/660033">#660033</a>;">-c</span> <span style="color: <a class="hashtag" href="/tags/007800">#007800</a>;">$ip</span> <span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>etc<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>network<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">/</span>iptables.save<span style="color: <a class="hashtag" href="/tags/000000">#000000</a>; font-weight: bold;">;#000000; font-weight: bold;">if #7a0874; font-weight: bold;">[ #ff0000;">"#007800;">$COUNT" #660033;">-ne #000000;">0 #7a0874; font-weight: bold;">]; #000000; font-weight: bold;">then #7a0874; font-weight: bold;">echo #ff0000;">"#007800;">$ip already exists in iptables (#007800;">$COUNT). Not blocking."; curriptables #7a0874; font-weight: bold;">exit #000000;">2;
#000000; font-weight: bold;">fi
#7a0874; font-weight: bold;">echo #ff0000;">"Adding #007800;">$ip to iptables...<br>"; #000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables #660033;">-I INPUT #660033;">-s #007800;">$ip #660033;">-j DROP#000000; font-weight: bold;">/sbin#000000; font-weight: bold;">/iptables-save #000000; font-weight: bold;">> #000000; font-weight: bold;">/etc#000000; font-weight: bold;">/network#000000; font-weight: bold;">/iptables.save
#7a0874; font-weight: bold;">echo #ff0000;">"<br><br>Result:"; curriptables#7a0874; font-weight: bold;">exit #000000;">0;
เสร็จแล้วรันคำสั่ง
chmod 700 /usr/local/directadmin/scripts/custom/block_ip.sh
ซึ่งสคริปต์นี้จะทำให้เราสามารถสั่ง block ip ผ่านหน้าจัดการใน DirectAdmin ได้ โดยให้ไปที่เมนู Brute Force Monitor แล้วกดลิงก์ IP Info ของไอพีที่เราต้องการบล็อก หลังจากนั้นให้กดปุ่ม Block This IP ที่ด้านล่างสุด
ถ้าต้องการให้ iptables ถูก restore ข้อมูลใหม่ทุกครั้งที่ reboot เครื่อง ให้ใส่
post-up iptables-restore /etc/network/iptables.save
ลงไปที่ด้านท้ายของไฟล์ /etc/network/interfaces
ถ้าต้องการให้ DirectAdmin ทำการ block ip อัตโนมัติ โดยไม่ต้องมากดปุ่ม Block This IP เอง ให้สร้างไฟล์ /usr/local/directadmin/scripts/custom/bruteforcenotice_ip.sh และใส่เนื้อหาตามนี้
#!/bin/sh SCRIPT=/usr/local/directadmin/scripts/custom/block_ip.sh ip=$value $SCRIPT exit $?;
เสร็จแล้วรันคำสั่ง
chmod 700 /usr/local/directadmin/scripts/custom/brute_force_notice_ip.sh
โดยจำนวนการ Brute Force ก่อนที่จะโดน block ip นั้น สามารถตั้งได้ที่เมนู Administrator Settings > Notify Admins after an IP has และใส่จำนวนที่ต้องการลงไปครับ
ถ้าต้องการยกเลิก block ip อาจจะต้องเข้ามาพิมพ์คำสั่งยกเลิกด้วยตัวเองไปก่อนครับ ด้วยคำสั่งนี้
iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP iptables-save > /etc/network/iptables.save
เปลี่ยน xxx.xxx.xxx.xxx เป็น ip ที่เราต้องการยกเลิก block
ที่มา: วิธีการตั้งค่าให้ DirectAdmin Block IP อัตโนมัติเมื่อตรวจพบการ Brute Force บน Debian 6 64-bit , I wish to have a block_ip.sh so I can block IPs through DirectAdmin , How to block an IP in Linux
ปัญหาที่เจอเวลาคลิก share จากหน้าเว็บของเราไป social network ของ Facebook หรืแ Google+ แล้วหัวข้อ หรือ ข้อความ ยาวเกินไป หรือไม่ตรงกับความเป็นจริง
เพิ่งรู้ว่ามันมี The Open Graph Protocol เพื่อให้ social network มันอ่านแล้วเข้าใจ
ให้แทรก meta tag ไว้ใน head คือ
<meta property="og:title" content="ชื่อเรื่องหรือหัวข้อ" /> <meta property="og:type" content="website" /> <meta property="og:url" content="http://www.softganz.com/paper/1" /> <meta property="og:image" content="http://www.softganz.com/upload/pics/DSCN0179.jpg" /> <meta property="og:description" content="รายละเอียดอย่างย่อ" />
ที่มา The Open Graph Protocol , How to Create Google+ Snippet
ไม่มีอะไรมาก แค่อยากบันทึกว่า เวลาเขียน script ภาษา php แล้วต้องการ run ด้วย crontab ซึ่งจะต้องระบุ path ของ php ให้ถูกต้อง ไม่อย่างนั้นมันก็จะ run ไม่ได้
ซึ่ง path ของ php ของ Directadmin ก็คือ /usr/local/bin/php และก็แค่นั้นเอง

เรื่อง : ที่นี่ ท.เมือง(คลองแห)
สถานที่ : เทศบาลเมืองคลองแห อ.หาดใหญ่ จ.สงขลา
รายละเอียด : ที่นี่ เทศบาลเมือง(คลองแห) นำเสนอโดยประชาชน(คนธรรมดา)
เพลงนี้ดัดแปลงมากจากเพลงน้ำท่วม คำร้อง/ทำนอง โดยไพบูลย์ บุตรขัน และ ศรคีรี ศรีประจวบเป็นคนขับร้องครับ หลังจากนั้นก็มี คุณอ๊อด โอภาสทศพร ร้องต่อมา
ที่มา ipattt.com
แหล่งดาวน์โหลด รหัส และ ข้อมูลพื้นฐาน

Thank You, Steve Jobs. สำหรับแอปเปิ้ล II คอมพิวเตอร์เครื่องแรกที่ข้าพเจ้าจับต้อง หลงใหล เป็นแรงขับด้นให้ข้าพเจ้าสามารถมีชีวิตอยู่อย่างมีค่าในตนเอง
ในที่สุดก็จะต้องเขียน API แน่นอน แต่วันไหนกันนะ
ได้อ่านตัวอย่างจาก Application Programming Interface (API) เป็นโปรแกรมที่ THSMS ได้เตรียมช่องทางการส่งข้อความผ่าน API ไว้หลายช่องทางโดย Support format ต่างๆอาทิเช่น POST, GET, REST, SOAP, XMLRPC พร้อมทั้งได้เตรียมโค๊ดตัวอย่างให้คณสามารถ Download ไปใช้งานได้ทันที
เลยขอตัวอย่างมาเก็บไว้เพื่อศึกษาในภายหลัง ขออนุญาตเจ้าของบทความไว้ที่นี้แล้วกันนะครับ
เป็นเรื่องที่เริ่มเมื่อ บ่ายสามโมงของวันนี้ จู่ ๆ MySql ก็ down เริ่มจากหน่วง แล้วก็ load แล้วก็ดับ แล้วก็ reboot เอง
กลับมาอีกที service mysqld ก็ไม่ยอมทำงาน สั่ง start เสร็จก็หยุดทันที
ทางแก้ที่ทำไปก็ไม่รู้ว่าถูกต้องหรือเปล่า
- พยายาม start mysql จนยอมแพ้
- สั่ง cd /usr/local/directadmin/custombuild/; ./update all แล้วก็ยังไม่มีอะไรดีขึ้น
- ลอง ./update mysql มันฟ้องว่าไม่มีการกำหนดไว้ใน options.conf จึงเปิดไฟล์ /usr/local/directadmin/custombuild/options.conf มาดู แล้วแก้ mysql _ inst=no เป็น mysql _ inst=yes (แต่ mysql=5.0) แล้วลอง ./build mysql
- ผลคือมันไปโหลด mysql5.0 มาติดตั้ง ในขณะที่ของเดิมคือ mysql5.5 ปําดเลยว่าข้อมูลตูจะเจ๊งหรือเปล่าวะ
- ก่อนที่จะ service httpd start (ก่อนทำได้ service httpd stop ไว้ก่อน) เลยทำการ backup ข้อมูลด้วย mkdir /backup/xxx; cd /home/; rsync -Cavz . /backup/xxx ก่อน
- คอยจน backup เสร็จ จึงลอง service httpd start
- เข้าเว็บได้ แต่บางเว็บข้อมูลบาง table อ่านไม่ได้
- ไม่ไหวแล้ว กลับบ้านก่อนดีกว่า (นั่งทำอยู่ที่ สปสช. ยังไม่กลับบ้านเผื่อว่าต้องเข้าไปที่ IDC ลง OS ใหม่ แต่เห็นว่าคงไม่ต้องลงแล้ว น่าจะหาทางแก้ไขได้)
- ถึงบ้าน ก็ service httpd stop; service mysqld stop
- แก้ /usr/local/directadmin/custombuild/options.conf เปลี่ยน mysql=5.1 สั่ง ./update mysql ใหม่
- แล้วจึง ./build php5-cgi
- สั่ง service httpd start ติดปัญหา suphp ใน httpd.conf จึงไม่สามารถ start ได้
- หาใน google เจอว่า cd /usr/local/directadmin/custombuild; ./build update; ./build clean;./build suphp d ยังไม่ได้
- เปลี่ยนเป็น cd /usr/local/directadmin/custombuild; ./build update; ./build clean; ./build php y; ./build suphp y; ./build rewrite_confs
- ที่ work น่าจะเป็น ./build rewrite_confs
- service httpd start เรียบร้อย
- เช็คเว็บ OK เข้าได้ ฐานข้อมูลครบ
สรุปว่า ยังไม่รู้ว่าเกิดอะไรขึ้น แต่ที่เห็นผิดสังเกตุคือ ใน /xxx/xxx/mysql/mysql/ นั้นไม่มีไฟล์ host.* หมายถึงตาราง host ไม่มี ตอนแรกว่าจะ copy จากเครื่องอื่นเข้าไป แต่หลังจาก build mysql 5.1 มันน่าจะถูกสร้างขึ้นมาใหม่ (หรือไม่?)
เรื่องนี้สอนให้รู้ว่า ข้าพเจ้ายังมั่วอยู่อีกมาก ดู log แล้วก็ยังไม่รู้สาเหตุ แต่ก็ถูไถไปตามเรื่อง
มีปัญหาเยอะมากกับการเขียน CSS3 บน IE แต่ละรุ่น โดยเฉพาะ Selector ที่ไม่สามารถใช้งานได้บน IE ทำให้ไม่กล้าเขียน CSS3
ทางแก้ล่าสุดสำหรับ IE คือใช้ Selectivizr - CSS3 pseudo-class and attribute selectors for IE 6-8 สามารถดาวน์โหลดมาใช้งานได้เลย ซึ่ง "selectivizr is a JavaScript utility that emulates CSS3 pseudo-classes and attribute selectors in Internet Explorer 6-8. Simply include the script in your pages and selectivizr will do the rest."
อยากรู้ไหมว่า CSS Compatibility and Internet Explorer มันสุดแสนจะแตกต่างกันในแต่ละรุ่นอย่างไร ลองตามไปดูกันนะครับ
และ 30 ซีเลกเตอร์ที่คุณต้องจำ - The 30 CSS Selectors you Must Memorize ลองตามไปอ่านดูก่อน มีเวลาจะมาแปลเก็บไว้อีกที
และที่สุดยอดอีกตัวคือ ตารางเปรียบเทียบ HTML5 และ CSS3 ของเบราเซอร์แต่ละยี่ห้อ-HTML5 & CSS3 Support ซึ่งดูจากตาราง CSS3 Selector แล้วอยากให้ IE6-IE8 ตาย-่าซะโดยเร็ว (แต่สงสัยว่าคงต้องทนอยู่กันมันอีกนานแสนนาน)
เอาแค่นี้ก่อน แล้วค่อยหามาเพิ่ม