System Administrator Guide

ระบบจัดเก็บ Log พรบ.ฯ
ด้วย Ubuntu + syslog-ng

คู่มือฉบับสมบูรณ์: เปลี่ยน Ubuntu ให้เป็น Log Server ที่ทรงพลัง รับข้อมูลจราจรคอมพิวเตอร์จาก MikroTik และจัดเก็บลงฐานข้อมูล MySQL เพื่อการสืบค้นที่รวดเร็ว

Ubuntu 22.04/24.04 MariaDB/MySQL MikroTik

ภาพรวมระบบการทำงาน

1. MikroTik Router

Users ใช้งานอินเทอร์เน็ต
Router ส่ง Log ผ่าน UDP:514

2. Ubuntu Server

syslog-ng รับข้อมูล
และกรองข้อมูล

3. MariaDB (MySQL)

บันทึกข้อมูลลงตาราง
เพื่อเรียกดูย้อนหลัง

01

เตรียมฐานข้อมูล (Database Setup)

เราจะใช้ MariaDB เป็นตัวเก็บข้อมูล เนื่องจากมีความรวดเร็วและเป็น Open Source โครงสร้างตารางจะออกแบบมารองรับมาตรฐาน Syslog Protocol

1.1 ติดตั้ง MariaDB Server

sudo apt update
sudo apt install mariadb-server mariadb-client -y

# (แนะนำ) ตั้งค่าความปลอดภัยเบื้องต้น
sudo mysql_secure_installation

1.2 สร้าง Database และ Table

โครงสร้าง Table นี้ออกแบบมาให้ตรงกับ Field มาตรฐานของ Syslog

sudo mysql -u root

CREATE DATABASE syslog;
USE syslog;

CREATE TABLE logs (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  host VARCHAR(64) NULL,
  facility VARCHAR(10) NULL,
  priority VARCHAR(10) NULL,
  level VARCHAR(10) NULL,
  tag VARCHAR(10) NULL,
  datetime DATETIME NULL,
  program VARCHAR(32) NULL,
  msg TEXT NULL
);

-- สร้าง User สำหรับให้ syslog-ng ใช้งาน
CREATE USER 'syslog_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON syslog.* TO 'syslog_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Tip: การแยก User (syslog_user) ออกจาก root เป็นแนวทางปฏิบัติที่ดีด้านความปลอดภัย
02

ติดตั้งและตั้งค่า Syslog-ng

Syslog-ng จะทำหน้าที่เป็น "ตัวกลาง" ที่รับข้อความจาก Router แล้วแปลงให้เป็นคำสั่ง SQL เพื่อยัดลง Database

2.1 ติดตั้ง Package

# ติดตั้ง syslog-ng และ libdbd-mysql สำหรับคุยกับ Database
sudo apt install syslog-ng syslog-ng-mod-sql -y

2.2 แก้ไขไฟล์ Config

ไฟล์ตั้งค่าอยู่ที่ /etc/syslog-ng/syslog-ng.conf ให้เพิ่มโค้ดด้านล่างนี้ไว้ท้ายไฟล์

sudo nano /etc/syslog-ng/syslog-ng.conf
# ==============================================
# Custom Configuration for MySQL Logging
# ==============================================

# 1. SOURCE: รับ Log ผ่าน UDP Port 514 (มาตรฐาน Network Log)
source s_net {
    udp(ip(0.0.0.0) port(514));
};

# 2. DESTINATION: ส่งข้อมูลไปยัง MySQL Database
destination d_mysql {
    sql(type(mysql)
    host("localhost")
    username("syslog_user")
    password("StrongPassword123!") # ใส่รหัสที่ตั้งไว้ในขั้นตอนที่ 1
    database("syslog")
    table("logs")
    columns("host", "facility", "priority", "level", "tag", "datetime", "program", "msg")
    values("$HOST", "$FACILITY", "$PRIORITY", "$LEVEL", "$TAG", "$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC", "$PROGRAM", "$MSG")
    indexes("host", "datetime", "program")); # สร้าง Index เพื่อให้ค้นหาเร็ว
};

# 3. LOG PATH: จับคู่ Source กับ Destination
log {
    source(s_net);
    destination(d_mysql);
};
อธิบายคำสั่งสำคัญ:
  • udp(ip(0.0.0.0) port(514)): เปิดรับ Log จากทุก IP ที่ส่งมายัง Port 514
  • $HOST, $MSG: ตัวแปรภายในของ syslog-ng ที่ดึงค่ามาจาก Log package โดยอัตโนมัติ
  • indexes(...): สำคัญมาก ช่วยให้เมื่อ Log มีเยอะๆ แล้ว Query ไม่ช้า

2.3 Restart Service

sudo systemctl restart syslog-ng
sudo systemctl status syslog-ng
03

ตั้งค่า MikroTik ให้ส่ง Log

ขั้นตอนนี้เราจะบอก MikroTik ว่าเมื่อมีเหตุการณ์เกิดขึ้น (เช่น คน Login, เน็ตหลุด, Firewall Drop) ให้ส่งข้อมูลไปที่ Server Ubuntu ของเรา

  1. 1

    สร้าง Action Remote

    ไปที่ System > Logging > แท็บ Actions

    กด + ตั้งชื่อ syslog-server เลือก Type เป็น remote ใส่ IP Server Ubuntu และ Port 514

  2. 2

    จับคู่ Rules

    ไปที่แท็บ Rules กด +

    เลือก Topics ที่ต้องการ (เช่น info, warning, firewall) และเลือก Action เป็น syslog-server ที่สร้างไว้เมื่อกี้

CLI Command (Copy ไปวางได้เลย)

/system logging action
add name=syslog-server remote=192.168.1.100 target=remote port=514

/system logging
add action=syslog-server topics=info
add action=syslog-server topics=warning
add action=syslog-server topics=error
add action=syslog-server topics=system
add action=syslog-server topics=account
Winbox - System > Logging > Actions
# Name Type Target Remote / Port
1 syslog-server remote remote 514
2 disk disk disk1 1000
Winbox - System > Logging > Rules
Topics Action Prefix Disabled
info syslog-server
warning syslog-server
error syslog-server
firewall syslog-server
system syslog-server
account syslog-server

การตรวจสอบและแก้ปัญหาเบื้องต้น

1. เช็คว่า Port 514 เปิดอยู่หรือไม่

sudo netstat -tulpn | grep 514

ต้องขึ้นว่า udp ... 0.0.0.0:514 ... syslog-ng

2. ดูข้อมูลล่าสุดใน Database

sudo mysql -u syslog_user -p -e "SELECT datetime, host, msg FROM syslog.logs ORDER BY id DESC LIMIT 5;"

ถ้า Log ไม่เข้า ทำอย่างไร?

  • Firewall: ตรวจสอบว่า Ubuntu เปิด Port UDP 514 หรือยัง
    sudo ufw allow 514/udp
  • Ping: ลอง Ping จาก MikroTik มาที่ Ubuntu ว่าเจอกันหรือไม่
  • AppArmor: บางครั้ง AppArmor อาจบล็อก MySQL ให้ตรวจสอบ Log ของระบบ dmesg | grep syslog-ng
SELECT * FROM logs ORDER BY datetime DESC LIMIT 5;
datetime host program msg
2026-02-06 16:15:04 192.168.1.1 dhcp dhcp1 assigned IP 192.168.1.100
2026-02-06 16:14:22 192.168.1.1 firewall firewall rule added: accept src 192.168.1.0/24
2026-02-06 16:12:55 192.168.1.1 system system rebooted successfully
2026-02-06 16:10:10 192.168.1.1 account user admin logged in via winbox
Showing 4 of 1,247 rows ✅ Query executed in 12ms

ผู้เขียน: praewa_ai_assistant