راهنمای امن‌ سازی دیتابیس MongoDB (چک‌ لیست امنیتی)



دیتابیس MongoDB به دلیل انعطاف‌پذیری و سرعت بالا، یکی از محبوب‌ترین انتخاب‌ها برای اپلیکیشن‌های مدرن است. اما برخلاف بسیاری از دیتابیس‌های دیگر، MongoDB در حالت پیش‌فرض، تنظیمات امنیتی مانند احراز هویت (Authentication) را فعال نمی‌کند. این موضوع باعث می‌شود که اگر سرور شما به درستی پیکربندی نشده باشد، هر کسی بتواند به داده‌های شما دسترسی پیدا کرده، آن‌ها را مشاهده کند یا حتی حذف نماید.

امن‌سازی دیتابیس MongoDB کار ساده‌ای است و تنها در چند مرحله انجام می‌شود. این راهنما به شما تمام قدم‌های ضروری برای قفل کردن و امن‌سازی دیتابیس را آموزش می‌دهد. برای اجرای این تنظیمات، شما به دسترسی کامل به سرور نیاز دارید که با خرید سرور مجازی این امکان برای شما فراهم می‌شود.

 

قدم اول: فعال‌سازی کنترل دسترسی (Access Control)

اولین و مهم‌ترین قدم، ایجاد یک کاربر ادمین و سپس اجباری کردن ورود با نام کاربری و رمز عبور است.

 

۱. ایجاد کاربر ادمین

ابتدا باید به Mongo shell متصل شوید و اولین کاربر خود را، که دارای دسترسی‌های مدیریتی است، ایجاد کنید.

  1. وارد Mongo shell شوید:
    mongosh
  2. به دیتابیس `admin` که برای مدیریت کاربران استفاده می‌شود، سوییچ کنید:
    use admin
  3. با استفاده از دستور زیر، یک کاربر ادمین جدید بسازید. فراموش نکنید که `myAdminUser` و `yourStrongPassword` را با مقادیر دلخواه خود جایگزین کنید:
    db.createUser(
      {
        user: "myAdminUser",
        pwd: "yourStrongPassword",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
      }
    )

    (این کاربر هم می‌تواند کاربران دیگر را مدیریت کند و هم به تمام دیتابیس‌ها دسترسی خواندن و نوشتن دارد).

  4. از Mongo shell خارج شوید:
    exit

۲. اجباری کردن احراز هویت (Authentication)

 

حالا که کاربر ادمین را ساخته‌اید، باید به MongoDB بگویید که از این پس هیچ اتصالی را بدون احراز هویت قبول نکند.

  1. فایل پیکربندی MongoDB را با یک ویرایشگر مانند `nano` باز کنید. مسیر این فایل معمولا یکی از موارد زیر است:
    sudo nano /etc/mongod.conf
  2. در فایل، بخش security را پیدا کرده، آن را از حالت کامنت خارج کنید (علامت # را بردارید) و authorization را به حالت enabled درآورید:
    security:
      authorization: enabled
  3. فایل را ذخیره کرده و خارج شوید.

 

قدم دوم: محدود کردن دسترسی شبکه

به صورت پیش‌فرض، MongoDB ممکن است به تمام آدرس‌های IP گوش دهد (0.0.0.0). این یک ریسک امنیتی بزرگ است.

 

۱. اتصال فقط از طریق Localhost (امن‌ترین حالت)

اگر اپلیکیشن شما روی همان سروری است که دیتابیس روی آن قرار دارد، بهترین کار این است که MongoDB را طوری تنظیم کنید که فقط به اتصالات از داخل خود سرور (localhost) پاسخ دهد.

  1. فایل mongod.conf را دوباره باز کنید.
  2. بخش net را پیدا کرده و مطمئن شوید که bindIp روی 127.0.0.1 تنظیم شده است:
    net:
      port: 27017
      bindIp: 127.0.0.1

 

۲. استفاده از فایروال برای دسترسی محدود ریموت

اگر اپلیکیشن شما روی سرور دیگری قرار دارد، هرگز `bindIp` را روی 0.0.0.0 تنظیم نکنید. در عوض، آن را روی آدرس IP داخلی (Private IP) سرور خود تنظیم کرده و با استفاده از فایروال، دسترسی به پورت 27017 را فقط برای آدرس IP سرور اپلیکیشن خود باز کنید.

# مثال برای فایروال UFW در اوبونتو
sudo ufw allow from YOUR_APP_SERVER_IP to any port 27017

 

قدم سوم: اعمال تغییرات و تست نهایی

 

حالا که تمام تنظیمات را انجام داده‌اید، سرویس MongoDB را ری‌استارت کنید تا تغییرات اعمال شوند.

sudo systemctl restart mongod

برای اطمینان از اینکه امنیت فعال شده، دوباره تلاش کنید بدون احراز هویت به Mongo shell متصل شوید. این بار باید با خطا مواجه شوید.

برای ورود صحیح، باید از نام کاربری و رمز عبوری که ساختید استفاده کنید:

mongosh -u myAdminUser -p --authenticationDatabase admin

 

پس از وارد کردن این دستور، از شما رمز عبور خواسته می‌شود و در صورت صحیح بودن، به دیتابیس دسترسی خواهید داشت. مدیریت امن دیتابیس یکی از مهم‌ترین وظایف پس از خرید vps آلمان است.