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

มาส่ง Alert Notifications บน Grafana กัน

              อันดับแรกไปสร้าง Alert Notifications กันก่อนที่ Alerting > Notifications เลือกส่งข้อมูลไปที่ slack กรอกข้อมูล slack webhook url และ channel ที่ต้องการ post ข้อความไป อ้ออย่าลืมสร้าง Incoming WebHooks กันก่อนนะครับ
จากนั้นลองทดสอบดู จะพบว่ามีตัวอย่างข้อความยิงเข้า channel แล้ว
จากนั้นไปตั้งค่า alert ผมยกตัวอย่างให้ alert ถ้า nfs-backup ใช้ข้อมูลเกิน 1TB
รอสักพักกราฟเราจะแดง แบบนี้
แล้วข้อมูลก็จะถูกส่งไปยัง slack อัตโนมัติ :)

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

มาเล่น OSSEC กัน

              OSSEC เป็น HIDS (Host Based Intrusion Detection System) เอาไว้คอยดูเหตุการณ์ต่างๆ ในเครื่องเซิร์ฟเวอร์, ตรวจสอบการเปลี่ยนแปลงไฟล์, ตรวจสอบ rootkit, แจ้งเตือน และทำ active response กับเหตุการณ์ต่างๆ ที่เกิดขึ้น
              มาลองเล่นกัน OSSEC จะประกอบด้วย 2 ส่วนคือ OSSEC server และ OSSEC agent ตัว server จะทำหน้าที่ประมวลผลและทำ corelation, alert ฯลฯ ส่วน agent จะทำหน้าที่ส่งข้อมูลมาให้ server หากต้องการ monitor เครื่องใดๆ ก็เอา agent ไปติดตั้งไว้ครับ ง่ายๆ แค่นี้ มาลงมือกัน
ที่เครื่อง server ติดตั้ง OSSEC server ดังนี้ ปล. ใช้ Debian 8 ครับ
apt install build-essential
git clone -b stable https://github.com/wazuh/wazuh.git ossec-wazuh
cd ossec-wazuh
sudo ./install.sh
เลือกติดตั้งเป็น server และตอบคำถามตัว installer ไปจนครบ จากนั้นก็สั่ง start server ได้เลย
sudo /var/ossec/bin/ossec-control start
ลองไปดูที่ alert log เราจะพบว่ามี log ยิงเข้ามาแล้ว
cat /var/ossec/logs/alerts/alerts.json
{"rule":{"level":3,"comment":"Ossec server started.","sidid":502,"groups":["ossec","pci_dss"],"PCI_DSS":["10.6.1"]},"full_log":"ossec: Ossec started.","hostname":"vpc-agent-debian","timestamp":"2015 Nov 08 23:01:28","location":"ossec-monitord"}
จากนั้นติดตั้ง agent ที่เครื่องที่ต้องการ monitor
apt install build-essential
git clone -b stable https://github.com/wazuh/wazuh.git ossec-wazuh
cd ossec-wazuh
sudo ./install.sh
เลือกติดตั้งเป็น agent และตอบคำถามตัว installer ไปจนครบ จากนั้นกลับมาที่ server สั่ง
/var/ossec/bin/manage_agents
****************************************
* OSSEC HIDS v2.8 Agent manager.     *
* The following options are available: *
****************************************
   (A)dd an agent (A).
   (E)xtract key for an agent (E).
   (L)ist already added agents (L).
   (R)emove an agent (R).
   (Q)uit.
Choose your action: A,E,L,R or Q: A
เลือก A เพื่อเพิ่ม agent กรอกข้อมูลของเครื่อง Agent ไปจนครบ จากนั้นเลือก E เพื่อเอา Key ไปกรอกที่เครื่อง agent
****************************************
* OSSEC HIDS v2.8 Agent manager.       *
* The following options are available: *
****************************************
   (A)dd an agent (A).
   (E)xtract key for an agent (E).
   (L)ist already added agents (L).
   (R)emove an agent (R).
   (Q)uit.
Choose your action: A,E,L,R or Q:e

Available agents:
ID: 001, Name: agent-name, IP: 10.0.0.1
Provide the ID of the agent to extract the key (or '\q' to quit): 001

Agent key information for '001' is:
MDAxIFRlc3RBZ2V0biAxMTEuMTExLjExMS4xMTEgY2MxZjA1Y2UxNWQyNzEyNjdlMmE3MTRlODI0MTA1YTgxNTM5ZDliN2U2ZDQ5MWYxYzBkOTU4MjRmNjU3ZmI2Zg==
จากนั้นสั่ง restart agent ได้เลย
/var/ossec/bin/ossec-control restart
เท่านี้ก็เรียบร้อย หากต้องการดูข้อมูลทางสถิติสามารถใช้ OSSEC WUI ในการดูข้อมูลได้ หรือโยน alert log ไปยัง ELK stack หรือ TICK stack เพื่อทำ dashboard ต่อได้
OSSEC WUI
Kibana

วันพุธที่ 8 มีนาคม พ.ศ. 2560

การสร้าง LINE Bot ด้วย LINE Messaging API (Official API)

ก่อนหน้านี้ผมเคยลองทำ LINE Bot เล่นบ้างอยู่เหมือนกัน แต่ตอนนั้น LINE เขายังไม่มี Official API ออกมาให้ ทำให้เราต้องแอบเล่นผ่าน Unofficial API ที่มีคนแกะออกมาจากตัวโปรแกรมของไลน์อีกที ข้อดีคือมันใช้กับ Account ธรรมดาของเราได้ แต่ด้วยความที่มันไม่ใช่ Official API ก็ไม่มีอะไรการันตีให้เราได้ว่ามันจะทำงานสมบูรณ์ หลังๆ มานี้ LINE เขาเอาใจ Developer มากขึ้น เขามี Official API ออกมาให้ใช้งานแล้ว แต่ว่าจะใช้งานกับ Account ธรรมดาไม่ได้ ต้องใช้กับ account ที่เป็น LINE@ เท่านั้น ซึ่งเราสมัครใช้งานได้ฟรีๆ อยู่แล้ว
โดยระบบที่เราจะทดสอบทำกันวันนี้ จะเป็นการรอรับข้อความจากผู้ใช้และตอบกลับข้อความนั้นๆ ด้วยข้อความที่เราเตรียมไว้ และทำการส่งข้อความหาผู้ใช้ที่แอ็ดเป็นเพือนกับบอทของเราเพื่อใช้สำหรับสร้างระบบแจ้งเตือนต่างๆ เช่นแจ้งผู้บุกรุก แจ้งราคาน้ำมัน แจ้งราคาทองอะไรประมาณนั้น
มาเริ่มกันเลย ในการสร้าง LINE Bot ให้เราล๊อกอินเข้าไปที่ LINE Business Center และทำการกรอกข้อมูลและลงทะเบียนให้เรียบร้อย อันนี้ทำเองนะครับ พอดีผมไม่ได้ print screen หน้าจอเอาไว้ เข้าไปทำอีกรอบไม่ได้ ฮาาา
เมื่อลงทะเบียนเสร็จแล้วให้เข้าไปที่เมนู Service -› Messaging API และคลิกที่ปุ่ม Start using Developer Trial
LINE Bot
ทำการตั้งชื่อบอท เลือกรูปภาพ และกรอกข้อมูลอื่นๆ ให้เรียบร้อย จากนั้นกดปุ่ม OK ด้านล่าง
LINE Bot
ตรวจสอบข้อมูลต่างๆ ให้เรียบร้อยแล้วกด Apply
LINE Bot
เมื่อสร้างเรียบร้อยแล้วให้คลิกที่ LINE@ Manager
LINE Bot
จากนั้นกดที่ปุ่ม “ใช้ API” และกด “ยืนยัน” (อ้าว ภาษาไทยได้ไงหว่า)
LINE Bot
จะเห็นว่าตอนนี้เราสามารถใช้งาน API ได้ 2 ฟังชั่นคือ REPLY_MESSAGE และ PUSH_MESSAGE โดยสามารถดูรายละเอียดการใช้งานทั้ง 2 ฟังชั่นนี้ได้จาก REPLY_MESSAGE และ PUSH_MESSAGE คลิกเข้าไปดูจะเห็นว่าเขียนไม่ยากครับ แค่รอรับและส่งข้อมูลกลับไปกลับมาเท่านั้น
ในหน้านี้จะเห็นว่าด้านขวามือมีชื่อของบอทของเราอยู่ พร้อมกับ LINE@ ID ของบอท เราสามารถแอ็ดเฟรนจาก ID นี้เลยก็ได้ หรือจะใช้ QR Code ในขั้นตอนถัดไปก็ได้ครับ และในส่วนของการตั้งค่าให้เลือก webhook เป็น “อนุญาต” และเลือก Bot เข้าร่วมกลุ่มแชท, ข้อความตอบรับอัตโนมัติ, คำทักทายเริ่มต้นสำหรับการเพิ่มเพื่อนใหม่ เป็น “ไม่อนุญาต” ทั้งหมด แต่ถ้าหากใครจะลองเปิดไว้ก็ได้นะครับ ทาง LINE เขามีระบบตอบรับข้อความอัตโนมัตไว้ให้อยู่แล้ว แทบไม่ต้องทำอะไรเพิ่มเลย เมื่อเลือกเสร็จแล้วกด “บันทึก” เมื่อกดบันทึกเรียบร้อยแล้วให้กดที่ LINE Developers ต่อได้เลยครับ เดียวเราต้องไปใส่ URL ของ webhook ในหน้านั้นอีกที
LINE Bot
ในหน้านี้จะเห็นว่ามี QR Code เราสามารถใช้ QR Code ตัวนี้เพื่อทำการแอ็ดเฟรนกับบอทได้เลยครับ หรือจะแอ็ดโดยใช้ LINE@ ID จากหน้าที่แล้วก็ได้ แต่ ID มันสุ่มมาให้อาจจะพิมพ์ตามยากหน่อย และในหน้าเดียวกันจะเห็นว่าในช่อง Webhook URL ยังไม่มีค่าอะไร ให้กด Edit
LINE Bot
ทำการใส่ Webhook URL ของเราลงไปครับ URL ตรงนี้จะเป็น URL ที่ใช้รับข้อความจาก LINE โดยจะต้องเป็น HTTPS เท่านั้นนะครับ
LINE Bot
หลังจากที่เราใส่ Webhook URL เข้าไปแล้ว ขั้นตอนถัดไปเป็นขั้นตอนการหา Access Token เพื่อเอาไปใช้กับโปรแรกมของเรา ให้คลิกเข้าไปที่ ISSUE ระบบก็จะแสดง Access Token ขึ้นมาให้
LINE Bot
เอาหละ เกือบเสร็จแล้ว ขั้นตอนถัดไปคือการเขียนโปรแกรมครับ copy โค้ดตามนี้และทำความเข้าใจกันเอาเองอธิบายไม่ถูกหละ โดยโค้ดชุดนี้จะเป็นการรอรับข้อความที่ถูกส่งเข้ามา และเราจะตอบกลับข้อความนั้นกลับไปว่า ID ของเขาชื่ออะไร หรือหากว่าใครจะเพิ่มคำสั่งอื่นลงไปก็เพิ่มเข้าไปเองเลยครับ และเราจะต้องใช้ ID ตัวนี้ในการส่งข้อความแจ้งเตือนโดยไม่ต้องรอให้ผู้ใช้ทักเข้ามาด้วย (ดูโค้ดแล้วทำการแก้ไข ACCESS_TOKEN เป็น Token ของตัวเองให้เรียบร้อยนะครับ)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

 
$strAccessToken = "ACCESS_TOKEN";
 
$content = file_get_contents('php://input');
$arrJson = json_decode($content, true);
 
$strUrl = "https://api.line.me/v2/bot/message/reply";
 
$arrHeader = array();
$arrHeader[] = "Content-Type: application/json";
$arrHeader[] = "Authorization: Bearer {$strAccessToken}";
 
if($arrJson['events'][0]['message']['text'] == "สวัสดี"){
  $arrPostData = array();
  $arrPostData['replyToken'] = $arrJson['events'][0]['replyToken'];
  $arrPostData['messages'][0]['type'] = "text";
  $arrPostData['messages'][0]['text'] = "สวัสดี ID คุณคือ ".$arrJson['events'][0]['source']['userId'];
}else if($arrJson['events'][0]['message']['text'] == "ชื่ออะไร"){
  $arrPostData = array();
  $arrPostData['replyToken'] = $arrJson['events'][0]['replyToken'];
  $arrPostData['messages'][0]['type'] = "text";
  $arrPostData['messages'][0]['text'] = "ฉันยังไม่มีชื่อนะ";
}else if($arrJson['events'][0]['message']['text'] == "ทำอะไรได้บ้าง"){
  $arrPostData = array();
  $arrPostData['replyToken'] = $arrJson['events'][0]['replyToken'];
  $arrPostData['messages'][0]['type'] = "text";
  $arrPostData['messages'][0]['text'] = "ฉันทำอะไรไม่ได้เลย คุณต้องสอนฉันอีกเยอะ";
}else{
  $arrPostData = array();
  $arrPostData['replyToken'] = $arrJson['events'][0]['replyToken'];
  $arrPostData['messages'][0]['type'] = "text";
  $arrPostData['messages'][0]['text'] = "ฉันไม่เข้าใจคำสั่ง";
}
 
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$strUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $arrHeader);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arrPostData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close ($ch);
 
?>
หลังจากเขียนโค้ดและอัพโหลดขึ้นเซิฟเวอร์เรียบร้อยก็ลองทักบอทของเราได้เลยครับ มันตอบคำถามได้บ้างหละ
LINE Bot
ขึ้นตอนถัดไปเราจะทำระบบ Push message ฟังชั่นนี้เอาไว้ทำระบบแจ้งเตือนต่างๆ เช่นการแจ้งเตื่อนผู้บุกรุกจากอุปกรณ์ IoT หรือแจ้งเตือนราคาน้ำมัน ราคาทองอะไรก็แล้วแต่ โดยเราต้องใช้ ID ของผู้รับจากขั้นตอนที่แล้วในการส่ง เราอาจจะเก็บ User ID ลง Databsae เพื่อเอามาไว้ใช้ทีหลังอะไรก็แล้วแต่นะครับ แต่สำหรับโค้ดตัวอย่างนี้ผมจะใส่ User Id ลงไปตรงๆ (แก้ ACCESS_TOKEN และ USER_ID ให้เรียบร้อยและลองรันได้เลยครับ)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

 
$strAccessToken = "ACCESS_TOKEN";
 
$strUrl = "https://api.line.me/v2/bot/message/push";
 
$arrHeader = array();
$arrHeader[] = "Content-Type: application/json";
$arrHeader[] = "Authorization: Bearer {$strAccessToken}";
 
$arrPostData = array();
$arrPostData['to'] = "USER_ID";
$arrPostData['messages'][0]['type'] = "text";
$arrPostData['messages'][0]['text'] = "นี้คือการทดสอบ Push Message";
 
 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$strUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $arrHeader);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arrPostData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close ($ch);
 
?>
หลังจากตรงนี้ไป ก็ไปต่อยอดกันเอาเองครับ แล้วแต่จินตนาการกันเช่นเคย