n8n Thai
by n8n Thai

รักษาความปลอดภัย n8n Server: Best Practices

แนวทาง security สำหรับ n8n self-hosted ครอบคลุม authentication, network, credential management, และ monitoring เพื่อป้องกันการโจมตี

รักษาความปลอดภัย n8n Server: Best Practices

n8n self-hosted มีพลังมาก แต่ก็มีความเสี่ยงถ้าตั้งค่าไม่ถูกต้อง instance ที่เปิด public โดยไม่มี authentication อาจถูก scan และโจมตีได้ภายในไม่กี่ชั่วโมงหลัง deploy

บทความนี้รวม best practices ที่ควรทำทุกข้อก่อนนำ n8n ขึ้น production ไม่ใช่ optional แต่เป็น baseline

เปิดใช้ HTTPS เสมอ

ห้ามเปิด n8n บน HTTP บน production ไม่ว่ากรณีใดก็ตาม เพราะ credential ทุกอย่างจะถูกส่งแบบ plaintext

ตั้งค่า SSL ด้วย Nginx + Let’s Encrypt ดูได้ที่ ตั้งค่า SSL และ Domain สำหรับ n8n และปิด port 5678 จากภายนอก:

sudo ufw deny 5678/tcp
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp

ตั้งค่า Authentication ที่แข็งแรง

n8n รองรับ authentication หลายแบบ เลือกตามความเหมาะสม:

Basic Auth (ง่าย แต่ยอมรับได้สำหรับ personal use)

N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=มีความยาวอย่างน้อย20ตัวอักษร

รหัสผ่านควรมีความยาวอย่างน้อย 20 ตัวอักษร ผสมตัวอักษรใหญ่เล็ก ตัวเลข และสัญลักษณ์

User Management (n8n Enterprise/Community)

n8n เวอร์ชันใหม่มีระบบ user management ในตัว เข้าไปที่ Settings > Users เพื่อสร้างบัญชีผู้ใช้แยกกันแต่ละคน แทนที่จะแชร์รหัสผ่านเดียวกัน

เพิ่มชั้นป้องกันด้วย IP Allowlist

ถ้า n8n ใช้งานเฉพาะในทีม กำหนด IP ที่อนุญาตใน Nginx:

location / {
    allow 203.0.113.0/24;  # IP office
    allow 198.51.100.10;   # IP บ้าน
    deny all;
    
    proxy_pass http://localhost:5678;
    # ... proxy settings อื่นๆ
}

ปกป้อง Encryption Key

N8N_ENCRYPTION_KEY คือ key ที่ใช้เข้ารหัส credential ทั้งหมดใน database ถ้า key นี้รั่วไหล ข้อมูล credential ทั้งหมดจะถูก decrypt ได้

สิ่งที่ต้องทำ:

  • ใช้ random string อย่างน้อย 32 ตัวอักษร: openssl rand -hex 24
  • เก็บไว้ใน .env file ที่ไม่ได้ commit เข้า Git
  • Backup key ไว้ในที่ปลอดภัย เช่น password manager
  • ไม่ใส่ key ตรงๆ ใน docker-compose.yml ที่อาจถูก commit

ตัวอย่าง .gitignore:

.env
*.env

ตั้งค่า Rate Limiting บน Nginx

ป้องกัน brute-force attack ด้วย rate limiting:

# กำหนด zone สำหรับ limit
limit_req_zone $binary_remote_addr zone=n8n_limit:10m rate=10r/m;

server {
    # ...
    location / {
        limit_req zone=n8n_limit burst=20 nodelay;
        limit_req_status 429;
        
        proxy_pass http://localhost:5678;
        # ... proxy settings
    }
}

การตั้งนี้จะ limit request จาก IP เดียวไม่เกิน 10 ครั้ง/นาที พร้อม burst 20 ครั้ง

จำกัด Webhook ที่ Public ได้

Webhook URL ของ n8n เป็น public โดยค่าเริ่มต้น ใครก็ตามที่รู้ URL สามารถ trigger ได้ วิธีป้องกัน:

ใส่ Secret ใน Webhook URL

สร้าง webhook path ที่คาดเดายาก:

https://your-domain.com/webhook/a7f3k9m2-secret-token-here

ตรวจสอบ Header หรือ Signature

ใน Webhook node เพิ่ม IF node เพื่อตรวจสอบ header ก่อนดำเนินการ:

// ใน Code node หรือ IF condition
$input.headers['x-webhook-secret'] === 'your-secret-here'

ใช้ Webhook Authentication

n8n มี built-in authentication สำหรับ webhook:

  • Basic Auth — ส่ง username:password ใน header
  • Header Auth — ตรวจสอบ custom header

อัปเดต n8n สม่ำเสมอ

Security patch มาใน minor version release บ่อยครั้ง ติดตาม Security Advisories และอัปเดตตามวิธีใน อัปเดต n8n อย่างปลอดภัย

ตั้ง cron alert ง่ายๆ เพื่อเตือนเมื่อมี version ใหม่:

# ตรวจสอบ version ใหม่ทุกวัน แจ้งเตือนผ่าน email หรือ LINE
0 9 * * * docker pull n8nio/n8n:latest 2>&1 | grep -i "newer" && echo "n8n update available" | mail -s "n8n Update" admin@yourdomain.com

ตั้งค่า Logging และ Monitoring

รู้ก่อนว่ามีปัญหาก่อนที่ user จะแจ้ง:

# ตั้ง log level
N8N_LOG_LEVEL=warn  # ใช้ warn หรือ error สำหรับ production

# เก็บ log ไว้กี่วัน
N8N_LOG_FILE_LOCATION=/home/node/.n8n/logs/
N8N_LOG_FILE_SIZE_MAX=20   # MB per file
N8N_LOG_FILE_COUNT_MAX=10  # จำนวนไฟล์สูงสุด

ใช้ UptimeRobot หรือ Healthchecks.io monitor URL ของ n8n เพื่อรับแจ้งเตือนเมื่อ service ล่ม

Security Checklist สรุป

รายการสำคัญทำแล้ว?
เปิด HTTPS เท่านั้นสูงมาก
ตั้ง authenticationสูงมาก
ปิด port 5678 จากภายนอกสูงมาก
เก็บ Encryption Key ปลอดภัยสูงมาก
Rate limiting บน Nginxสูง
อัปเดต n8n สม่ำเสมอสูง
Webhook มี secretกลาง
Monitor uptimeกลาง
Backup อัตโนมัติกลาง
IP Allowlistถ้าเป็นไปได้

อยากเรียน n8n แบบเป็นระบบ ตั้งแต่เริ่มต้นจนสร้าง Workflow ใช้งานจริงได้ ลองดู คอร์สสอน n8n ที่ aiunlock.co

Related posts