امنیت n۸n Self-Hosted؛ مهم‌ترین تنظیمات امنیتی

امنیت n8n Self-Hosted؛ مهم‌ترین تنظیمات امنیتی

جدول محتوا 👇

n8n محل تجمع حساس‌ترین اطلاعات یک کسب‌وکار است: کلیدهای API، رمز دیتابیس‌ها، توکن ربات‌ها و دسترسی به CRM و ایمیل. اگر نسخه Self-Hosted آن بدون تنظیمات امنیتی روی اینترنت باشد، نفوذ به آن یعنی دسترسی به همه این سیستم‌ها. در این راهنما مهم‌ترین تنظیمات امنیت n8n را از سطح سرور تا حساب‌های کاربری، Webhookها و نودهای پرخطر مرور می‌کنیم.

چرا n8n هدف جذابی برای مهاجم است؟

  • Credentialهای متمرکز: با یک نفوذ، مهاجم به ده‌ها سرویس دیگر دسترسی پیدا می‌کند.
  • اجرای کد: نودهای Code و Execute Command می‌توانند روی سرور کد اجرا کنند.
  • دسترسی شبکه داخلی: n8n معمولاً به دیتابیس‌ها و سرویس‌های داخلی دسترسی دارد و می‌تواند سکوی حمله به آن‌ها باشد.
  • Webhookهای عمومی: آدرس‌هایی که از اینترنت فراخوانی می‌شوند و ممکن است ورودی‌های مخرب دریافت کنند.

لایه ۱: دسترسی شبکه و HTTPS

  • پورت ۵۶۷۸ را مستقیم باز نکنید. n8n را پشت یک Reverse Proxy (Nginx، Caddy یا Traefik) با گواهی SSL قرار دهید و پورت آن را فقط روی 127.0.0.1 منتشر کنید. فایل نمونه را در راه‌اندازی n8n با Docker Compose آورده‌ایم.
  • دسترسی به ویرایشگر را محدود کنید. اگر کاربران از IPهای مشخص یا VPN وصل می‌شوند، رابط کاربری را فقط برای همان‌ها باز کنید و مسیر /webhook/ را برای عموم باز بگذارید.
  • دقت کنید Docker فایروال را دور می‌زند. پورت‌هایی که با ports منتشر شوند، از UFW عبور می‌کنند. توضیح کامل در امنیت Docker.
  • سرور را سخت‌سازی کنید. SSH فقط با کلید، فایروال و به‌روزرسانی خودکار امنیتی. چک‌لیست کامل در تنظیمات امنیتی VPS.

یک نمونه محدودسازی ویرایشگر در Nginx:

location /webhook/ {
    proxy_pass http://127.0.0.1:5678;
}

location / {
    allow 203.0.113.10;
    deny all;
    proxy_pass http://127.0.0.1:5678;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

لایه ۲: حساب‌های کاربری و MFA

  • حساب مالک (Owner) را فوراً بسازید. تا قبل از ساخت این حساب، هر کسی که آدرس را باز کند می‌تواند مالک شود.
  • احراز هویت دومرحله‌ای را فعال کنید. از بخش تنظیمات شخصی، MFA با اپلیکیشن‌هایی مثل Google Authenticator را برای همه کاربران، به‌خصوص مالک، روشن کنید.
  • هر نفر حساب جداگانه داشته باشد. حساب مشترک، ردیابی تغییرات را غیرممکن می‌کند.
  • کمترین دسترسی را بدهید. کاربرانی که فقط ورک‌فلو اجرا می‌کنند، به Credentialهای دیگران یا تنظیمات نیازی ندارند.

لایه ۳: کلید رمزنگاری و Credentialها

n8n همه Credentialها را با کلیدی به نام N8N_ENCRYPTION_KEY رمزنگاری می‌کند. اگر این کلید را تعیین نکنید، n8n یک کلید تصادفی می‌سازد و در پوشه داده خود ذخیره می‌کند که با از دست رفتن آن پوشه، همه Credentialها غیرقابل استفاده می‌شوند.

openssl rand -hex 32
  • کلید را به‌صورت متغیر محیطی تعیین کنید و یک نسخه از آن را در مدیر رمز عبور سازمان نگه دارید، جدا از بکاپ دیتابیس.
  • برای هر سرویس، Credential با کمترین دسترسی لازم بسازید. مثلاً کاربر دیتابیس فقط‌خواندنی برای گزارش‌گیری.
  • Credentialها را هرگز داخل نود Code یا متن ورک‌فلو ننویسید؛ با خروجی گرفتن از ورک‌فلو، این مقادیر هم منتقل می‌شوند.

لایه ۴: نودهای پرخطر و دسترسی به سیستم

برخی نودها دسترسی مستقیم به سرور دارند و اگر کاربری با دسترسی ساخت ورک‌فلو از آن‌ها سوءاستفاده کند، کل سرور در خطر است:

NODES_EXCLUDE=["n8n-nodes-base.executeCommand","n8n-nodes-base.readWriteFile"]
N8N_BLOCK_ENV_ACCESS_IN_NODE=true
N8N_RESTRICT_FILE_ACCESS_TO=/home/node/.n8n-files
  • NODES_EXCLUDE نودهای اجرای دستور سیستم و خواندن و نوشتن فایل را غیرفعال می‌کند، اگر به آن‌ها نیازی ندارید.
  • N8N_BLOCK_ENV_ACCESS_IN_NODE جلوی خواندن متغیرهای محیطی، از جمله رمز دیتابیس و کلید رمزنگاری، از داخل ورک‌فلوها را می‌گیرد.
  • N8N_RESTRICT_FILE_ACCESS_TO دسترسی نودهای فایل را به یک پوشه مشخص محدود می‌کند.

نام دقیق متغیرها و مقادیر پیش‌فرض ممکن است در نسخه‌های مختلف n8n تغییر کند؛ قبل از اعمال، مستندات نسخه خود را بررسی کنید. همچنین n8n را در کانتینر با کاربر غیر root (حالت پیش‌فرض ایمیج رسمی) اجرا کنید تا حتی نود اجرای دستور هم دسترسی محدودی داشته باشد.

لایه ۵: امنیت Webhookها

  • احراز هویت فعال کنید: نود Webhook از Basic Auth، Header Auth و JWT پشتیبانی می‌کند. Webhookهای بدون احراز هویت را فقط برای سرویس‌هایی نگه دارید که امکان دیگری ندارند.
  • امضای درخواست را بررسی کنید: سرویس‌هایی مثل درگاه‌های پرداخت و GitHub درخواست‌ها را امضا می‌کنند؛ امضا را در ورک‌فلو اعتبارسنجی کنید.
  • ورودی را اعتبارسنجی کنید: داده Webhook را مستقیم در کوئری دیتابیس یا دستور سیستم قرار ندهید.
  • محدودیت نرخ: در Reverse Proxy برای مسیر Webhook محدودیت نرخ بگذارید تا یک حمله ساده سرور را از کار نیندازد.

لایه ۶: داده‌های اجرا و لاگ‌ها

n8n ورودی و خروجی هر اجرا را ذخیره می‌کند که ممکن است شامل اطلاعات شخصی مشتریان باشد:

EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none

این تنظیمات تاریخچه را بعد از ۷ روز پاک می‌کنند و داده اجراهای موفق را ذخیره نمی‌کنند. بکاپ دیتابیس را هم رمزنگاری‌شده و در محل امن نگه دارید.

به‌روزرسانی و ممیزی امنیتی

  • n8n به‌طور منظم اصلاحیه‌های امنیتی منتشر می‌کند. اطلاعیه‌های امنیتی مخزن رسمی را دنبال کنید و حداقل ماهانه به‌روزرسانی کنید.
  • n8n یک ابزار ممیزی داخلی دارد که Credentialهای بلااستفاده، نودهای پرخطر و Webhookهای بدون احراز هویت را گزارش می‌کند:
    docker compose exec n8n n8n audit
  • دسترسی کاربرانی را که از سازمان رفته‌اند، فوراً حذف کنید و Credentialهایی را که در دسترسشان بوده، تغییر دهید.

چک‌لیست نهایی

  • n8n فقط از طریق HTTPS و Reverse Proxy در دسترس است.
  • ویرایشگر به IPهای مشخص یا VPN محدود شده است.
  • MFA برای همه کاربران فعال است.
  • N8N_ENCRYPTION_KEY تعیین و جداگانه بکاپ شده است.
  • نودهای پرخطر غیرفعال یا محدود شده‌اند.
  • Webhookها احراز هویت دارند.
  • تاریخچه اجراها به‌صورت خودکار پاک می‌شود.
  • به‌روزرسانی ماهانه و ممیزی با n8n audit انجام می‌شود.

سوالات متداول

اگر N8N_ENCRYPTION_KEY گم شود چه می‌شود؟

همه Credentialهای ذخیره‌شده غیرقابل بازیابی می‌شوند و باید دوباره وارد شوند. ورک‌فلوها سالم می‌مانند. این کلید را در مدیر رمز عبور نگه دارید.

آیا n8n Self-Hosted از n8n Cloud ناامن‌تر است؟

بستگی به تنظیمات شما دارد. با تنظیمات این راهنما، نسخه Self-Hosted می‌تواند امن‌تر باشد، چون داده‌ها و دسترسی کاملاً در کنترل شماست. مقایسه کامل را در n8n Self-Hosted چیست ببینید.

آیا نود Code خطرناک است؟

نود Code در محیط محدودشده اجرا می‌شود، اما اجرای کد دلخواه همیشه ریسک دارد. فقط به کاربران مورد اعتماد اجازه ساخت ورک‌فلو بدهید و دسترسی به متغیرهای محیطی را مسدود کنید.

چطور بفهمم n8n من از اینترنت در دسترس است؟

از یک شبکه دیگر، مثلاً اینترنت موبایل، آدرس http://IP-سرور:5678 را باز کنید. اگر صفحه n8n نمایش داده شد، پورت به‌صورت مستقیم باز است و باید بسته شود.

بستر امن برای اتوماسیون سازمانی

n8n را روی سرورهای مجازی تراست هاست با IP اختصاصی و شبکه خصوصی برای اتصال امن به سرویس‌های داخلی راه‌اندازی کنید.

هاست وردپرس چیست؟ ۷ تفاوت با هاست معمولی

مشاوره تراست‌هاست​

با متخصصان و کارشناسان به صورت رایگان!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *