วันศุกร์ที่ 15 เมษายน พ.ศ. 2559

เปลี่ยนค่า repository ให้ Ubuntu Server 14.04 กัน

ห่างเหินการอัพเดทข้อมูลไปหลายวัน หลังจากที่ผู้เขียนกำลังอยู่ในช่วงการเชื่อมต่อข้อมูลเวบเซอร์วิสกับกรมการขนส่งทางบก เรื่องการส่งข้อมูลจากเซิร์ฟเวอร์ GPS ติดตามรถ สำหรับรายละเอียดทางเทคนิคของเวบเซอร์วิสก็เกริ่นคร่าว ๆว่าใช้วิธีการแลกเปลี่ยนแบบ Json XML ก็ผ่านพ้นไปได้ด้วยดี เซิร์ฟเวอร์ให้บริการเวบไซต์ของผู้เขียนเองก็ไม่ได้มีการอัพเดทซอฟต์แวร์ระบบปฏิบัติการมากว่า 7 เดือน คงต้องถึงเวลาเข้าไปดูแลกัน เริ่มต้นด้วยคำสั่งยอดนิยม apt-get update กลายเป็นว่าพบข้อผิดพลาดไม่สามารถทำการอัพเดทข้อมูลได้ ลองอยู่หลายวิธีไม่ว่าจะเข้าไปลบไฟล์เก่า ๆก่อนหรือทำการ  apt-get clean ก็ยังไม่หาย หาวิธีการอยู่นานจนได้พบว่าขั้นตอนที่ดีที่สุดก็คือเปลี่ยนค่า repository ใหม่ให้ชี้ไปที่ต้นฉบับ แล้วต้องทำยังไง

ผู้เขียนพบเวบไซต์หนึ่ง https://repogen.simplylinux.ch/generate.php สามารถกำหนดชื่อประเทศ ก็ออกรายชื่อของ repository lists ต่าง ๆของUbuntu Server ได้แล้ว ตามตัวอย่างที่ผู้เขียนใช้ลิงค์ข้างต้นสร้างให้

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#


###### Ubuntu Main Repos
deb http://th.archive.ubuntu.com/ubuntu/ trusty main
deb-src http://th.archive.ubuntu.com/ubuntu/ trusty main

###### Ubuntu Update Repos
deb http://th.archive.ubuntu.com/ubuntu/ trusty-security main
deb http://th.archive.ubuntu.com/ubuntu/ trusty-updates main
deb-src http://th.archive.ubuntu.com/ubuntu/ trusty-security main
deb-src http://th.archive.ubuntu.com/ubuntu/ trusty-updates main



กลายเป็นว่าการค้นหา repository ไม่ใช่เป็นเรื่องยากอีกต่อไป หากบางครั้งมีงานด่วน ๆหลายงานเข้ามาแล้วเราต้องมาเสียเวลาค้นหา repository เพื่อทำการอัพเดทหรืออัพเกรดข้อมูลเซิร์ฟเวอร์ใหม่ ย่อมทำให้เสียโอกาสในการทำเรื่องอื่น ๆ

นอกจากนี้ เรายังสามารถสร้างให้สคริปข้างล่าง เพื่อทำการดึงข้อมูล repository ได้โดยตรง แต่มีข้อควรระวังคือไฟล์เดิม sources.list จะหายไปกลายเป็นไฟล์ใหม่แทนที่ ต้องระมัดระวังเรื่องเหล่านี้ให้ดี เพราะอาจจะทำให้เราต้องเสียเวลาไปอีกหลายนาทีได้เหมือนกัน
 Sources List
Direct Link to Sources List or use:
WARNING: This will overwrite your existing sources.list:
curl https://repogen.simplylinux.ch/txt/sources_60ab26885221b4e54eedf76af035715544e9e2cd.txt | sudo tee /etc/apt/sources.list
 
บทความในวันนี้ก็เป็นเทคนิคเล็ก ๆน้อย ๆที่เก็บมาฝากกันสำหรับแฟน ๆระบบปฏิบัติการลินุกส์ อูบันตู ทุก ๆท่าน ผู้เขียนเองพึงพาการใช้งานระบบซอต์ฟแวร์นี้มาจนถึงทุกวันนี้ ต้องขอขอบคุณมา ณ โอกาสนี้ด้วย

วันศุกร์ที่ 18 มีนาคม พ.ศ. 2559

ลองทดสอบเฟรมเวิร์ค bootstrap และ database class สำหรับใช้งาน php

การทดสอบเฟรมเวิร์คสำหรับใช้งานติดต่อกับโปรแกรมฐานข้อมูล Mysql ด้วยโปรแกรม PHP ในวันนี้ก็เพื่อที่จะทำให้สามารถบริหารจัดการข้อมูล select, insert, delete และ update ทำได้โดยง่ายที่สำคัญเป็นแบบออปเจค(oop) ป้องแฮกเกอร์โจมตีแบบสคริปได้เป็นอย่างดี

ส่วนเฟรมเวิร์ค bootstrap จะเป็นส่วนจัดการ css สำหรับการแสดงผลบนหน้าเวบเพจได้ทั้งแบบเดสท็อปและบนอุปกรณ์มือถือ นำไปต่อยอดพัฒนาในอนาคตได้เป็นอย่างดี ในครั้งนี้ผู้เขียนจะได้แนะนำคลาส crud สำหรับใช้ในการบริหารจัดการโปรแกรมฐานข้อมูลรวมถึงการเชื่อมต่อกับเฟรมเวิร์ค bootstrap ด้วย

ลองไปรู้จักคลาส crud กันก่อนประกอบไปด้วยฟังก์ชั่นต่อไปนี้

function __construct($DB_con) เป็นข้อกำหนดเริ่มต้นของการสร้างคลาส จะทำงานทุกครั้งอัตโนมัติเมื่อมีการสร้างออบเจคขึ้นใหม่ การกำหนดต้องเริ่มด้วย __ เครื่องหมายอันเดอร์สกอร์สองอัน
public function create($fname,$lname,$email,$contact) ฟังก์ชั่นสร้างออบเจคของตารางใหม่
public function getID($id) ฟังก์ชั่นหาค่าไอดีของตามราง
public function update($id,$fname,$lname,$email,$contact) ฟังก์ชั่นปรับปรุงค่าในตารางใหม่
public function delete($id) ฟังก์ชั่นการลบข้อมูลแบบ row
public function dataview($query) ฟังก์ชั่นการแสดงผลข้อมูลตามรูปแบบการค้นหา(query) โดยจะอาศัยเฟรมเวิร์ค bootstrap
public function paging($query,$records_per_page) เป็นฟังก์ชั่นเรียกการแสดงผลทีละหน้า
public function paginglink($query,$record_per_page)  เป็นฟังก์ชั่นสร้างลิงค์ของเพจในแต่ละหน้า

เพื่อไม่ให้เสียเวลาเราไปทดลองติดตั้งและทดสอบการใช้งานกันเลยดีกว่า

ขั้นตอนที่ 1 ให้ไปดาวน์โหลดซอร์สโค๊ดตามลิงค์ที่ผู้เขียนแปะไว้ให้นี้ จากนั้นแตกไฟล์ออกมาวางไว้ในตำแหน่งที่สามารถเรียกดูผ่านเวบไซต์ได้ http://www.codingcage.com/2015/04/php-pdo-crud-tutorial-using-oop-with.html



ขั้นตอนที่ 2 สร้างฐานข้อมูลตัวอย่างและกำหนดสิทธิ์การอนุญาตสำหรับการเข้าถึงฐานข้อมูลที่สร้างใหม่

CREATE TABLE IF NOT EXISTS `tbl_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(25) NOT NULL,
  `last_name` varchar(25) NOT NULL,
  `email_id` varchar(50) NOT NULL,
  `contact_no` bigint(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;

--
-- Dumping data for table `tbl_users`
--

INSERT INTO `tbl_users` (`id`, `first_name`, `last_name`, `email_id`, `contact_no`) VALUES
(23, 'pradeep', 'khodke', 'pradeep@gmail.com', 9876543210),
(24, 'sohan', 'mahamune', 'sohan@gmail.com', 9874563210),
(25, 'john', 'doe', 'john@someone.com', 9778456123),
(26, 'test', 'test', 'test@test.com', 8745691230);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

จากนั้นให้ทำการแก้ไขไฟล์ dbconfig.php เพื่อป้อนชื่อผู้ใช้ รหัสผ่าน และชื่อดาต้าเบสเพื่อให้คลาส crud สามารถเชื่อมต่อกับโปรแกรมฐานข้อมูลได้
ขั้นตอนที่ 3 ทดสอบการใช้งานหน้าแรกจะแสดงข้อมูลทั้งหมดที่อยู่ในฐานข้อมูลออกมา

ขั้นตอนที่ 4 ตัวอย่างหน้าจอการเพิ่มข้อมูลลงในฐานข้อมูล

ขั้นตอนที่ 5 ตัวอย่างหน้าจอการลบข้อมูล

รวบรัดตัดความจะพบว่าเพียงแค่ติดตั้งซอร์สโค๊ดเฟรมเวิร์ค bootstrap และ database class ง่ายๆ เพียงเท่านี้เราก็สามารถสร้างระบบบริหารจัดการโปรแกรมฐานข้อมูล MySql ได้อย่างดี การพัฒนาเป็นในรูปแบบออบเจคด้วย ไม่ต้องเสียเวลามากมายในการเขียนโค๊ด รวมถึงการหาวิธีการแสดงผล

ผู้เขียนตั้งใจจะนำไปพัฒนาต่อในส่วนของการสร้างระบบล็อกอิน รวมถึงนำไปใช้ในการบริหารจัดการบัญชีผู้ใช้งานในระบบฮอตสปอร์ตไวไฟ(radius)ในอนาคต แต่คงต้องอาศัยเวลาพัฒนาปรับปรุงไปเรื่อย ๆ แต่เนื้อหาที่น่าสนใจต่อไปก็คือการสร้างระบบล็อกอิน หากทดลองแล้วได้ผลดีประการใดก็จะได้นำมาบอกเล่ากันต่อไปในโอกาสข้างหน้า ผู้เขียนต้องขอขอบพระคุณ บจก. ไทย พรอสเพอรัส ไอที เอื้อเฟื้อพื้นที่เวบบล็อกดี ๆ มานำเสนอกัน และฝากประชาสัมพันธ์ความก้าวหน้าของทางบริษัทฯ ในการเชื่อมต่อระบบซอฟต์แวร์จีพีเอสติดตามรถกับกรมการขนส่งทางบกว่าขณะนี้ก้าวหน้าเกินกว่า 80% คาดว่า ภายในสิ้นเดือนเมษายน พ.ศ.2559 นี้ระบบการเชื่อมต่อพร้อมใบอนุญาตให้บริการจะเสร็จสิ้นสมบูรณ์



วันพุธที่ 2 ธันวาคม พ.ศ. 2558

ติดตั้ง Openvpn 2.3.2 บนโอเอส Ubuntu Desktop 14.04.3 LTS

หลังจากหายหน้าหายตาไปหลายสัปดาห์ ก็เป็นโอกาสอันดีอีกครั้งหนึ่งที่ผู้เ่ขียนได้เริ่มจับงานด้านการสร้างระบบเครือข่ายเสมือนส่วนตัว(virtual private network) สำหรับงานการทำ VPN นี้ตั้งใจจะนำมาทดสอบระบบกล้องวงจรปิดที่ต้องการรีโมตและบันทึกข้อมูลผ่านเครือข่ายที่มีความซับซ้อน ปัญหาหลักของกล้องวงจรปิดแบบไอพี (ip camera) ก็คือตัวเครื่องบันทึกข้อมูลสามารถรับสัญญาณภาพภายในเครือข่ายแลนเท่านั้นหากต้องการส่งข้ามเน็ตเวิร์คหรือผ่านอุปกรณ์ nat ย่อมไม่สามารถทำงานได้

ด้วยเหตุของความสลับซับซ้อนของระบบเครือข่ายโดยเฉพาะอย่างยิ่งหากต้องการดูภาพจากกล้องแบบเวลาจริงผ่านเครือข่ายมือถือแบบ 3G/4G ด้วยแล้วโอกาสที่จะทำงานได้ย่อมเป็นไปไม่ได้เลย ด้วยเหตุนี้การใช้งานเครือข่ายแบบเสมือนส่วนตัวน่าจะช่วยแก้ปัญหาในเรื่องนี้ได้ แต่ข้อนี้ผู้เขียนยังไม่เคยได้ทดสอบ เพื่อป้องกันการสับสนวันนี้เรามาสร้างเครื่องเซิร์ฟเวอร์หรือเครื่องลูกข่ายสำหรับใช้งานโปรแกรม openvpn กัน

ขั้นตอนที่ 1 ดำเนินการติดตั้งโปรแกรม openvpn และโปรแกรมสร้างคีย์สาธารณะ easy-rsa
#apt-get install openvpn easy-rsa

ขั้นตอนที่ 2 หลังจากติดตั้งโปรแกรมเสร็จสิ้นสมบูรณ์ตามขั้นตอนที่ 1 แล้วให้แก้ไขไฟล์ vars อยู่ในโฟลเดอร์ /etc/openvpn/easy-rsa
export KEY_COUNTRY="TH"
export KEY_PROVINCE="Nonthaburi"
export KEY_CITY="Saima"
export KEY_ORG="Thai Prosperous IT Co.,Ltd."
export KEY_EMAIL="             @gmail.com"

ขั้นตอนที่ 3 จากนั้นให้ดำเนินการตามขั้นตอนต่อไปนี้ source vars เป็นการบอกสคริปให้รู้จักตัวแปรที่ได้แก้ไขใหม่ ส่วน clean-all เป็นการลบค่าเก่าของโฟลเดอร์ keys
#source vars
#./clean-all

ขั้นตอนที่ 4 เป็นการสร้าง Certificate Authority(CA) หรือคีย์หลักในการให้ใบรับรองดิจิตอล
#./build-ca

Generating a 2048 bit RSA private key
....................................................................................................+++
......................................................................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NONTHABURI]:
Locality Name (eg, city) [SAIMA]:
Organization Name (eg, company) [OpenVpn IP Camera Server]:
Organizational Unit Name (eg, section) [OpenVpnDevelopmentUnit]:
Common Name (eg, your name or your server's hostname) [OpenVpn IP Camera Server CA]:
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:             @gmail.com

ขั้นตอนที่ 5 จากนั้นสร้าง Public Keys สำหรับเครื่องเซิร์ฟเวอร์
# ./build-key-server OpenVpnServer
# ./build-dh

ขั้นตอนที่ 6 ให้ทำการคัดลอกคีย์ต่อไปนี้ไปยังโฟลเดอร์ /etc/openvpn
#cd keys/
#cp myservername.crt myservername.key ca.crt dh2048.pem /etc/openvpn/

ขั้นตอนที่ 7 สำหรับเครื่องเซิร์ฟเวอร์ที่ต้องการสร้างเราเตอร์จากอินเตอร์เฟส Tunnel ไปยังเครือข่ายอื่นในระบบให้แก้ไขไฟล์ /etc/sysctl.conf เพื่อทำการฟอร์เวิร์ดไอพี

net.ipv4.ip_forward=1

เป็นอันสิ้นสุดการติดตั้ง Openvpn 2.3.2 บนโอเอส Ubuntu Desktop 14.04.3 LTS สำหรับไฟล์ server.conf คอนฟิกตัวอย่างสำหรับ server สามารถคัดลอกมาได้จากโฟลเดอร์ /usr/share/doc/openvpn/examples/sample-config-files/

สำหรับการดำเนินการติดตั้ง Openvpn นั้นสามารถทำได้โดยไม่ยุ่งยาก ส่วนการนำไปใช้งานนั้นต้องค่อยๆ เรียนรู้และศึกษากันไป หากผู้เขียนได้ทดลองได้ผลประการใดจะรีบนำเสนอทันที การนำไปประยุกต์ใช้งานนั้นค่อนข้างกว้างขวาง หากลองสังเกตดีๆ มือถือแอนดอร์ยเองก็มีแอพพลิเคชั้นประเภทนี้ให้ลองใช้งานกันอย่างมากมายทีเดียว

สำหรับเนื้อหาในวันนี้ต้องขอขอบพระคุณ บจก.ไทย พรอสเพอรัส ไอที ผู้นำด้านการให้บริการระบบ GPS TRACKING ครบวงจรด้วยอุปกรณ์ชั้นนำนำเข้าจากยุโรปโดยตรง พร้อมระบบจีพีเอสเซิร์ฟเวอร์ออนไลน์ใช้งานได้ในประเทศไทย ไม่ต้องเปลืองทราฟฟิกไปยังต่างประเทศ

วันอาทิตย์ที่ 19 กรกฎาคม พ.ศ. 2558

เมื่อต้องสู้กับ สแปมเมลล์ บนซอฟต์แวร์ Zimbra Community 8.0.1.GA.5438

ยินดีต้อนรับสู่เวบบล็อกดีๆ ของคนรักโอเพ่นซอร์ส หลังจากไม่ได้อัพเดทมาหลายสัปดาห์ ผู้เขียนเองพักหลังก็ไม่ค่อยได้มีงานเกี่ยวกับด้านการดูแลระบบให้ได้แก้ไขมากนัก เพราะปัจจุบันงานที่ทำมุ่งเน้นไปยังธุรกิจ GPS TRACKER เป็นหลัก แต่อย่างไรก็แล้วแต่หากมีงานด้านการดูแลระบบเข้ามาให้แก้ไข ก็จะได้อัพเดทเรื่องราวดีๆ เหล่านี้ให้ได้ทราบกัน

เมื่อเดือนที่ผ่านมาปรากฏว่าเครื่อง Zimbra Community 8.0.1.GA.5438 ที่ผู้เขียนดูแลอยู่เป็นสแปม ไอพีติดแบล็กลิสต์ ในช่วงเวลาที่ผ่านมา 1 เดือนได้พยายามแจ้งไปยังเวบไซต์ต่างๆที่รายงานด้านสแปม จนสามารถปลดล็อกไอพีได้ แต่เซิร์ฟเวอร์เมลล์ของผู้เขียนก็ยังไม่สามารถส่งข้อความไปยังโดเมนในกลุ่มค่ายไมโครซอฟต์ได้ เช่น hotmail.com live.com และ msn.com จึงเป็นที่มา "เมื่อต้องสู้กับ สแปมเมลล์ บนซอฟต์แวร์ Zimbra Community 8.0.1.GA.5438"

ผู้เขียนมีการตั้งระบบป้องกันเบื้องต้นอยู่แล้วนั่นก็คือ fail2ban โดยใช้คอนฟิกดีฟอลต์พวก postfix และ sasl ซึ่งมันไม่ได้ผล เครื่องเมลล์เซิร์ฟเวอร์โดนโจมตีและไอพีติดแบล็คลิสต์เป็นประจำ จากการค้นคว้าไปตามเวบไซต์ต่างๆ มีการพูดถึงการป้องกันสแปมโดยใช้ fail2ban อยู่บ้างแต่เป็นแบบสั้นๆ ครั้งนี้ผู้เขียนก็ได้ยึดตามและทดลองได้ผลดี ผ่านมาสองสัปดาห์ยังไม่มีสแปมเมลล์เกิดขึ้นในระบบ ก็ลองใช้วิธีนี้ดูก่อนหากระบบเมลล์เซิร์ฟเวอร์ที่เราดูแลอยู่พบเจอปัญหาสแปมเมลล์ข้างต้น

ขั้นตอนที่ 1 โดยขั้นตอนการกำหนดค่าให้กับคอนฟิกของ fail2ban สามารถดำเนินการได้ดังนี้ ให้ทำการแก้ไขไฟล์ jail.conf


[zimbra-account]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-account]
sendmail[name=zimbra-account, dest=admin@example.com]
logpath = /opt/zimbra/log/mailbox.log
bantime = 600
maxretry = 2

[zimbra-audit]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-audit]
sendmail[name=Zimbra-audit, dest=admin@example.com]
logpath = /opt/zimbra/log/audit.log
bantime = 600
maxretry = 2

[zimbra-recipient]
enabled = true
filter = zimbra
action = iptables-allports[name=zimbra-recipient]
sendmail[name=Zimbra-recipient, dest=admin@example.com]
logpath = /var/log/zimbra.log
#findtime = 604800
bantime = 172800
maxretry = 2

[postfix]
enabled = true
filter = postfix
action = iptables-multiport[name=postfix, port=smtp, protocol=tcp]
sendmail-buffered[name=Postfix, dest=admin@example.com]
logpath = /var/log/zimbra.log
bantime = -1
maxretry = 5

ขั้นตอนที่ 2 จากนั้นให้ทำการสร้างไฟล์ zimbra.conf ในโฟลเดอร์ /etc/fail2ban/filter.d/
# Fail2Ban configuration file
#
# Author:
#
# $Revision: 1 $
#

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values:  TEXT
#
failregex = \[ip=<HOST>;\] account - authentication failed for .* \(no such acco
unt\)$
                        \[ip=<HOST>;\] security - cmd=Auth; .* error=authenticat
ion failed for .*, invalid password;$
                        ;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; er
ror=authentication failed for .* invalid password;$
                        \[oip=<HOST>;.* SoapEngine - handler exception: authenti
cation failed for .*, account not found$
                        WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=A
dminAuth; .* error=authentication failed for .*;$
                        NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: R
ecipient address rejected:

# .*\[ip=<HOST>;\] .* - authentication failed for .* \(invalid password\)
#
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =
root@teltonika:/etc/fail2ban/filter.d# more zimbra.conf
# Fail2Ban configuration file
#
# Author:
#
# $Revision: 1 $
#

[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values:  TEXT
#
failregex = \[ip=<HOST>;\] account - authentication failed for .* \(no such account\)$
                        \[ip=<HOST>;\] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
                        ;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
                        \[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
                        WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
                        NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient address rejected:

# .*\[ip=<HOST>;\] .* - authentication failed for .* \(invalid password\)
#
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =





ขั้นตอนที่ 3 ให้สั่งเริ่มต้นการทำงานเซอร์วิส fail2ban ใหม่

#/etc/init.d/fail2ban restart

ขั้นตอนที่ 4 ให้ทดสอบการตรวจสอบดูว่าเราสร้างไฟล์ข้างต้นถูกต้องสมบูรณ์หรือไม่ พร้อมกับทดสอบการป้องกันดูว่าจะได้ผลหรือไม่

# fail2ban-regex /var/log/zimbra.log /etc/fail2ban/filter.d/zimbra.conf

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/zimbra.conf
Use log file   : /var/log/zimbra.log


Results
=======

Failregex
|- Regular expressions:
|  [1] \[ip=<HOST>;\] account - authentication failed for .* \(no such account\)$
|  [2] \[ip=<HOST>;\] security - cmd=Auth; .* error=authentication failed for .*, invalid password;$
|  [3] ;oip=<HOST>;.* security - cmd=Auth; .* protocol=soap; error=authentication failed for .* invalid password;$
|  [4] \[oip=<HOST>;.* SoapEngine - handler exception: authentication failed for .*, account not found$
|  [5] WARN .*;ip=<HOST>;ua=ZimbraWebClient .* security - cmd=AdminAuth; .* error=authentication failed for .*;$
|  [6] NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient address rejected:
|
`- Number of matches:
   [1] 0 match(es)
   [2] 0 match(es)
   [3] 0 match(es)
   [4] 0 match(es)
   [5] 0 match(es)
   [6] 1 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Addresses found:
[1]
[2]
[3]
[4]
[5]
[6]
    66.196.81.146 (Sun Jul 19 09:32:37 2015)

Date template hits:
225061 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Year.Month.Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): <Month/Day/Year@Hour:Minute:Second>

Success, the total number of match is 1

However, look at the above section 'Running tests' which could contain important
information.

จากตัวอย่างจะพบว่ามีการตรวจสอบพบไอพีที่ผิดกฏข้อที่ 6  "NOQUEUE: reject: RCPT from .*\[<HOST>\]: 550 5.1.1 .*: Recipient address rejected:" ซึ่งหากไอพีนี้กระทำซ้ำกันเพียง 2 ครั้งเซิร์ฟเวอร์ก็จะทำการแบบไอพีนี้ทันทีอย่างน้อย 1 ชั่วโมง



วันพฤหัสบดีที่ 23 เมษายน พ.ศ. 2558

กำหนดค่า PPPoE บนอุปกรณ์เกตเวย์ เพื่อเพิ่มประสิทธิภาพการทำงานของระบบไวไฟ

ยินดีต้อนรับสู่เวบบล็อกดีๆ ของคนรักโอเพ่นซอร์ส เพื่อการพัฒนาและสร้างองค์ความรู้แบบยั่งยืน กลุ่ม System administrator ส่วนใหญ่ไม่ใช่โปรแกรมเมอร์ทำให้เป็นเฉพาะผู้ใช้ ไม่ได้เป็นผู้สร้างหรือผู้พัฒนา ผู้เขียนก็เช่นเดียวกันเป็นหนึ่งในผู้ใช้โปรแกรมโอเพ่นซอร์ส ครั้งนี้ก็เช่นเดียวกันจะเป็นการแนะนำวิธีการกำหนดค่า PPPoE อินเทอร์เฟสให้กับอุปกรณ์เกตเวย์ Smoothwall Community 3.0 กัน

ตัวอุปกรณ์เกตเวย์เองจะมีหน้าต่างแบบ GUI ให้สามารถกำหนดค่าให้กับอินเทอร์เฟสเพื่อทำงานในโหมด PPPoE เพื่อเพิ่มประสิทธิภาพการทำงาน เหตุผลสำคัญสำหรับอุปกรณ์โมเด็มเร้าเตอร์ก็คือความร้อนและการรองรับเซสชั่นจำนวนมากๆ จะทำได้ไม่ดีหรือเกิดการหลุดของสัญญาณบ่อยๆ

การกำหนดค่าแบบนี้เราจะต้องตั้งค่าโมเด็มให้ทำงานในโหมด bridge หรืออาศัย ADSL เร้าเตอร์ทำหน้าที่แค่เป็นโมเด็ม ส่วนอุปกรณ์เกตเวย์ทำหน้าที่เป็นตัวจัดการการเชื่อมต่อแทนเพื่อให้สามารถรองรับโหลดจำนวนมากๆ โดยที่ไม่หลุดบ่อย

สำหรับการตั้งค่าตามตัวอย่างเป็นการเชื่อมต่อแบบ PPPoE ไปยังระบบ ADSL ของทรู การตั้งค่าก็ให้ทำตามรูป

Profiles: ตั้งชื่อโปรไฟล์
Interface: เลือกแบบ PPPoE
Number: ป้อนหมายเลขโทรศัพท์ที่ใช้เชื่อมต่อ ADSL
Persistent comnection: เชื่อมต่อแบบถาวร
Connect on PGateway restart: เปิดการใช้งานอินเทอร์เฟส PPPoE ทุกครั้งที่เริ่มระบบใหม่


ด้วยขั้นตอนตามตัวอย่างตามรูปข้างบนจะทำให้เราสามารถเชื่อมต่อระบบPPPoE สำหรับบริหารจัดการใช้งานระบบ ADSL ได้อย่างเต็มประสิทธิภาพ นอกจากนี้ผู้เขียนยังได้เปิดให้บริการ gps tracker เพื่อควบคุมบริหารจัดการรถยนต์ของบริษัทฯ หรือรถยนต์ส่วนตัวให้สามารถตรวจสอบเส้นทาง ดูข้อมูลย้อนหลัง ทราบสถานะของยานพาหนะ ในราคามิตรภาพ ที่สำคัญสินค้านำเข้าจากยุโรปโดยตรงคุ้มค่าทนทานกว่า

วันศุกร์ที่ 20 มีนาคม พ.ศ. 2558

ติดตั้ง wordpress บนเซิร์ฟเวอร์ Ubuntu 14.04.1 LTS

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

ผู้เขียนเคยติดตั้ง wordpress บนเซิร์ฟเวอร์ Ubuntu 14.04.1 LTS ไปเมื่อปลายๆปีที่แล้วก็ผ่านไป 3 เดือน เอกสารประกอบก็จำไม่ได้ พอต้องรีบกลายเป็นว่ามึนงงกันอยู่สองสามวัน เพิ่งปะติดปะต่อเรื่องราวที่เคยทำสำเร็จไปก็วันนี้เอง จึงช้าไม่ได้ที่จะได้อัพเดทกัน

เพื่อไม่ให้เป็นการเสียเวลา ผู้เขียนจะได้พาเข้าไปแนะนำวิธีติดตั้ง wordpress บนเซิร์ฟเวอร์ Ubuntu 14.04.1 LTS

ขั้นตอนที่ 1 ติดตั้งซอฟต์แวร์ wordpress สำหรับการติดตั้งบนระบบโอเอส Ubuntu นั้นง่ายมากเพียงพิมพ์คำสั่งต่อไปนี้


#apt-get install wordpress


ขั้นตอนที่ 2 สร้างซอฟต์ลิงค์ไปยังเวบไดเรคทอรี่ สำหรับเวบไซต์ของผู้เขียนได้เปลี่ยนจากตำแหน่งเดิมมาเป็น /var/www

#ln -s /usr/share/wordpress /var/www/html/wordpress

ขั้นตอนที่ 3 เป็นการแตกไฟล์สำหรับใช้ติดตั้งฐานข้อมูลของระบบ wordpress เอง

#gzip -d /usr/share/doc/wordpress/examples/setup-mysql.gz
#/usr/share/doc/wordpress/examples/setup-mysql -n wordpress localhost

ขั้นตอนที่ 4 เป็นตัวอย่างการติดตั้งฐานข้อมูลของเซิร์ฟเวอร์โดเมนอื่นๆ ของเราที่ต้องการ ขั้นตอนนี้สำคัญเพราะจะมีการใช้ค่อนข้างบ่อย บางครั้งหากต้องการเปิดเวบไซต์ใหม่หรือโดเมนใหม่ที่ต้องการใช้ wordpress

/usr/share/doc/wordpress/examples/setup-mysql -n wordpress_mydomain_org wordpress.mydomain.org
ขั้นตอนที่ 5 เป็นการสั่งรีสตาร์ทเซอร์วิส apache เพื่อโหลดค่าคอนฟิกต่างๆ ที่ได้มีการเปลี่ยนแปลงไว้แล้ว
/etc/init.d/apache2 restart

เป็นอันสิ้นสุดกระบวนการติดตั้ง wordpress บนเซิร์ฟเวอร์ Ubuntu 14.04.1  LTS  โดยให้เราเปิด url ที่ได้ทำการติดตั้งฐานข้อมูลลงไปในที่นี้ตามตัวอย่างมีอยู่ 2 urls คือ http://localhost และ http://wordpress.mydomain.org นั่นเองจากนั้นทำตามขั้นตอนในส่วนของ wizard จนจบ ส่วนเนื้อหาที่ต้องการศึกษาเพิ่มเติมสามารถเรียกดูได้จาก https://help.ubuntu.com/community/WordPress

ผู้เขียนต้องขอขอบคุณ บจก.ไทย พรอสเพอรัส ไอที ผู้นำด้านการให้บริการระบบจีพีเอสติดตามรถยนต์ ด้วยสินค้าคุณภาพ ได้มาตรฐาน มั่นใจว่าใช้งานได้ทนทานและยาวนานกว่า นอกจากนี้ผู้เขียนยังได้เขียนบทความเกี่ยวกับรถยนต์ vip-rent-car.com นำเสนอรถยนต์ที่ผ่านการทดสอบจากนิตยสารต่างๆ หรือสำนักข่าวยานยนต์ รวมถึงเรื่องราวที่ผู้เขียนสรุปขึ้นเอง สามารถเข้าไปติดตามกันได้เป็นประจำทุกๆ เดือน














วันพฤหัสบดีที่ 19 มีนาคม พ.ศ. 2558

wordpress ไม่ยอมอัพเดท Plug-in หรือ Theme ให้แบบนี้ต้องแมนนวลสิครับ

ยินดีต้อนรับสู่เวบบล็อกคนรักโอเพนซอร์ส รวบรวมประสบการณ์จริงจากการใช้งานนำเสนอเป็นข้อมูลอันเป็นประโยชน์ต่อการนำไปศึกษา พัฒนาต่อยอด งานของผู้เขียนนอกจากเปิดเวบใหม่ http://gpsvehicle.weloveshopping.com เพื่อจำหน่ายสินค้าอุปกรณ์จีพีเอสติดตามรถยนต์ ด้วยสินค้ามาตรฐาน ราคาถูก เป็นทางเลือกของการลงทุนที่คุ้มค่า มาวันนี้ก็เช่นเดียวกัน ผู้เขียนกำลังเตรียมขึ้นเวบไซต์ใหม่ด้วยเอนจิ้นของ wordpress ก็ยังติดขัดอยู่เรื่อยๆ ในเรื่องราวต่างๆ

ผู้เขียนเองเพิ่งประสบความสำเร็จกับการ อัพเดท Wordpress อัตโนมัติด้วย vsftp บนเซิร์ฟเวอร์ 14.04.1 LTS ปัญหาหนักใจอีกอันหนึ่งที่พบเจอก็คือ ปลั๊กอินไม่สามารถอัพเดทได้ขึ้นข้อความผิดพลาดดังตัวอย่างผู้เขียนทำการอัพเดท Theme ใหม่ ปรากฎข้อผิดพลาดดังตัวอย่าง
The update process is starting. This process may take a while on some hosts, so please be patient.
Enabling Maintenance mode…

Updating Theme Twenty Twelve (1/1)

Downloading update from https://downloads.wordpress.org/theme/twentytwelve.1.6.zip…
Unpacking the update…
An error occurred while updating Twenty Twelve: Could not create directory.
Disabling Maintenance mode…
All updates have been completed.

เอายังไงดี งานนี้ wordpress ไม่ยอมอัพเดท Plug-in หรือ Theme ให้แบบนี้ต้องแมนนวลสิครับ เมื่อกระทำแบบอัตโนมัติไม่ได้ มันก็ต้องลงมือด้วยตัวเองกันละ จากตัวอย่างจะพบลิงค์ที่ดาวน์โหลด Theme งานนี้ก็เข้าไปดาวน์โหลดเองก็ได้

ขั้นตอนที่ 1 ให้เปลี่ยนไดเรคทอรี่ไปยังที่เก็บ Theme หากต้องการอัพเดท Plug-in ก็เปลี่ยนไดเรคทอรี่ไปยังปลั๊กอินแทน

#cd /var/www/wordpress/wp-content/themes

ขั้นตอนที่ 2 ดาวน์โหลด Theme  ที่เราไม่สามารถอัพเดทได้
#wget https://downloads.wordpress.org/theme/twentytwelve.1.6.zip

ขั้นตอนที่ 3 ให้ทำงานสำรองข้อมูล Theme เก่าไว้ก่อนหรือย้ายไปยังโฟลเดอร์อื่น จากนั้นทำการแตกไฟล์ Theme ใหม่ออกมาเป็นอันสิ้นสุดขั้นตอน
#unzip twentytwelve.1.6.zip

จะเห็นได้ว่าวิธีการอัพเดท Theme ใหม่แบบแมนนวลสามารถทำได้โดยไม่ยุ่งยาก แถมประหยัดเวลา ตัดปัญหากวนใจ หรือการเตือนจากเวบไซต์มี Theme หรือ Plug-in ใหม่มาแล้วนะ เมื่อไหร่จะได้ทำการอัพเดทสักที