![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-36-1024x493.png)
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/10/72750531_509069166557130_6220067664946003968_n-1024x491.png)
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/10/71879006_687464564998544_2396132245501902848_n-1024x493.png)
ระบบ PSU Email ให้บริการผู้ใช้ของมหาวิทยาลัยสงขลานครินทร์ ซึ่งมีการใช้งานจากทั่วโลก ทั้งระบบประกอบขึ้นจากคอมพิวเตอร์หลายเครื่อง การจะตรวจสอบ Log เมื่อเกิด Incident ขึ้น อาจจะต้องใช้ระยะเวลานาน และเป็นการยากพอสมควรที่จะเชื่อมโยงความสัมพันธ์ของเหตุการณ์ และสรุปออกมาเป็นรายงานได้ จึงเริ่มใช้ ELK สำหรับรวบรวม Log ของทั้งระบบไว้ที่ส่วนกลาง และพัฒนาต่อยอดเพื่อการตรวจจับความผิดปรกติต่าง ๆ ได้
ในบทความนี้ จะนำเสนอวิธีการใช้ ELK เพื่อตรวจจับ การ Login ที่ผิดปรกติบน PSU Email โดยจะสนใจ ผู้ใช้ที่มีการ Login จากนอกประเทศเป็นหลัก
การส่ง Log จาก Server เข้า ELK
ที่เครื่อง Server แต่ละเครื่อง กำหนดให้ส่ง Log จาก /etc/rsyslog.d/50-default.conf เข้าไปที่ your.logstash.server:port ตามที่กำหนดไว้
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-38.png)
การสร้าง Logstash Filter
ที่ Logstash Server
- Input เพื่อรับข้อมูลจาก syslog ที่ port ที่ต้องการ เช่นในที่นี้เป็น 5516 เป็นต้น
- Filter ใช้ Grok Plugin เพื่อจับข้อมูล จาก message แบ่งเป็นส่วน ๆ ตามลักษณะ แล้วตั้งชื่อตาม Field ตามต้องการ ในที่นี้คือ description, username, domainname, clientip, actiondate, actiontime เป็นต้น (ตัวที่สำคัญในตอนนี้คือ username และ clientip)
- Output ตั้งว่าให้ส่งผลไปยัง Elasticsearch ที่ “your.elasticsearch.server” ที่ port 9200
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-39-1024x217.png)
[ตรงนี้มีกระบวนการบางอย่าง ซึ่งค่อยมาลงรายละเอียด]
เมื่อมี Log ไหลเข้าสู่ Logstash และ ถูกประมวลผลแล้ว ก็จะเข้าสู่ Elasticsearch แล้ว ก็นำไปใช้งานบน Kibana
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-54-1024x495.png)
หลังจากนั้น สามารถ Search ข้อมูล และใส่ Fields ที่สนใจ เช่น Time, Username, geoip.country_name และ description ได้ แล้ว Save เอาไว้ใช้งานต่อ ในที่นี้ ตั้งชื่อว่า squirrelmail-geoip
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-56-1024x469.png)
จากนั้น สามารถเอาไปสร้างเป็น Visualization แบบ Coordinate Map ได้ เช่น ดูว่า มีการ Login Success / Failed Login / Sent จากที่ไหนบ้างในโลก
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-57-1024x493.png)
จะเห็นได้ว่า ส่วนใหญ่ ใช้งานจากในประเทศไทย (วงกลมสีแดงเข้ม ๆ) ส่วนนอกประเทศ จะเป็นวงสีเหลืองเล็ก ๆ
การตรวจหาการใช้งานที่ผิดปรกติ
สร้าง Search ใหม่ กรองเฉพาะ ที่มี (exist) Username และ ไม่เป็น N/A และ มี (exist) geoip.country_code และ ไม่ใช่ Thailand แล้ว Save ไว้ใช้งานต่อไป ในที่ตั้งชื่อว่า squirrelmail-geoip-outside-th
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-59-1024x497.png)
จากนั้น เอาไปสร้าง Visualization แบบ Vertical Bar
กำหนดให้
Y Axis เป็นจำนวน
X Axis เป็น Username
โดยที่ Group by geoip.country_name และ description
ก็จะทำให้รู้ว่า ใครบ้างที่ มีการใช้งานนอกประเทศ และ เป็นการใช้งานแบบไหน
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-60-1024x494.png)
จะเห็นได้ว่า จะมีบางคนที่ แสดงสีแค่สีเดียว กับบางคนมีหลายสี เนื่องจาก มีหลายประเทศ และ หลายประเภทการใช้งาน เราสามารถ กรองเอาเฉพาะ ข้อมูลที่สนใจได้ โดยคลิกที่ Inspect แล้วกดเครื่องหมาย + กับข้อมูลที่ต้องการ เช่น description ที่เป็น “Failed webmail login” ก็ได้
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-61-1024x493.png)
ก็จะกรองเฉพาะ Username ที่มีการ Login จากต่างประเทศ แต่ไม่สำเร็จ จากภาพด้านล่าง แสดงว่า 3 คนนี้ น่าจะโดนอะไรเข้าแล้ว
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-62-1024x494.png)
หรือ ถ้าจะกรองข้อมูล เฉพาะคนที่ “Failed webmail login” และ “Message sent via webmail” ก็ได้ แต่ต้องเปลี่ยน ชนิดการ Filter เป็น “is one of”
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-63-1024x492.png)
ผลที่ได้ดังภาพ แต่เนื่องจาก ก็ยังเป็น 3 คนนี้อยู่ จะเห็นได้ว่า คน ๆ เดียว (ซ้ายสุด) มีการ Login จากหลายประเทศ ภายใน 24 ชั่วโมง
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-64-1024x494.png)
ต่อไป ถ้าเราสนใจเฉพาะ คนที่ “ส่งอีเมล” จากนอกประเทศ ในเวลาที่กำหนด จะได้ผลประมาณนี้
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-65-1024x493.png)
พบว่า คนซ้ายสุด คนเดิมนั่นแหล่ะ แต่เราจะมาดูรายละเอียด ก็คลิกที่ปุ่ม Inspect แล้ว เลือก Include เฉพาะ Username นั้น
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-66-1024x493.png)
ก็พบว่า คนนี้มีการส่ง email ออกจากประเทศ USA, Canada, Panama, Argentina, Mexico แล้วบินมา UK ภายในวันเดียว –> ทำได้ไง !!! (ดังภาพด้านล่าง)
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-67-1024x493.png)
เมื่อลองตรวจสอบ ก็จะพบว่า Username นี้ มีพฤติกรรม ส่ง Spam จริง ๆ ก็จะจัดการ “จำกัดความเสียหาย” ต่อไป
วิธีการที่กล่าวมาข้างต้น สามารถสร้างเป็น Process อัตโนมัติ (เว้นแต่ขั้นตอนการ จำกัดความเสียหาย จะ Automatic ก็ได้ แต่ตอนนี้ขอ Manual ก่อน) เอาไว้สำหรับ Monitoring ได้ โดยอาจจะสั่งให้ เฝ้าดู 1 ชั่วโมงล่าสุด และ Refresh ทุก 1 นาที ดังภาพ
![](https://sysadmin.psu.ac.th/wp-content/uploads/2019/08/image-69-1024x495.png)
หวังว่าจะเป็นประโยชน์
ส่วนรายละเอียด คอยติดตามตอนต่อไปครับ