رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش نصب و ایمن‌سازی Redis روی Ubuntu

آموزش نصب و ایمن‌سازی Redis روی Ubuntu

Redis یک دیتابیس NoSQL از نوع Key-Value در حافظه (In-Memory) است که معمولاً برای کش، سشن کاربران، صف پردازش و داده‌های بلادرنگ استفاده می‌شود. مشکل اینجاست که Redis به‌صورت پیش‌فرض هیچ امنیتی فعال ندارد و فرض می‌کند در یک شبکه کاملاً قابل اعتماد اجرا می‌شود.

Redis یک دیتابیس NoSQL از نوع Key-Value در حافظه (In-Memory) است که معمولاً برای کش، سشن کاربران، صف پردازش و داده‌های بلادرنگ استفاده می‌شود. مشکل اینجاست که Redis به‌صورت پیش‌فرض هیچ امنیتی فعال ندارد و فرض می‌کند در یک شبکه کاملاً قابل اعتماد اجرا می‌شود.

در این آموزش Redis را روی Ubuntu نصب می‌کنیم، عملکرد آن را تست می‌کنیم و سپس با چند تنظیم مهم آن را ایمن می‌کنیم:

  • محدود کردن دسترسی فقط به لوکال‌هاست

  • فعال‌سازی رمز عبور

  • غیرفعال یا تغییر نام دستورات خطرناک

این مراحل برای Ubuntu 22.04 و نسخه‌های LTS جدید کاملاً قابل استفاده است.


پیش‌نیازها

  • سرور Ubuntu

  • کاربر دارای دسترسی sudo

  • فعال بودن فایروال (مثل UFW)


چرا باید Redis را ایمن کنیم؟

Redis به طور پیش‌فرض:

  • رمز عبور ندارد

  • روی همه اینترفیس‌ها گوش می‌دهد

  • همه دستورات مدیریتی فعال هستند

اگر پورت 6379 از اینترنت در دسترس باشد، هر کسی می‌تواند:

  • تمام داده‌ها را پاک کند (FLUSHALL)

  • تنظیمات سرور را تغییر دهد (CONFIG SET)

  • حتی در برخی سناریوها فایل روی سیستم بنویسد

پس ایمن‌سازی Redis شوخی نیست.


مرحله 1: نصب Redis

 
sudo apt update sudo apt install redis-server

ویرایش فایل تنظیمات:

 
sudo nano /etc/redis/redis.conf

گزینه زیر را پیدا کنید و مقدارش را تغییر دهید:

 
supervised systemd

سپس سرویس را ریستارت کنید:

 
sudo systemctl restart redis sudo systemctl status redis

باید وضعیت active (running) باشد.


مرحله 2: تست Redis

ورود به کنسول:

 
redis-cli

تست ارتباط:

 
ping

خروجی باید:

 
PONG

تست ذخیره داده:

 
set test "ok" get test

مرحله 3: محدود کردن دسترسی به لوکال

فایل تنظیمات را باز کنید:

 
sudo nano /etc/redis/redis.conf

این خط باید فعال باشد (بدون #):

 
bind 127.0.0.1 ::1

ریستارت:

 
sudo systemctl restart redis

بررسی:

 
ss -tlnp | grep 6379

باید فقط روی 127.0.0.1 گوش دهد.


مرحله 4: فعال کردن رمز عبور

در همان فایل:

 
requirepass رمز_خیلی_قوی_اینجا

برای ساخت رمز قوی:

 
openssl rand 60 | base64

ریستارت سرویس:

 
sudo systemctl restart redis

تست:

 
redis-cli set key 1

باید خطای NOAUTH بدهد.

سپس:

 
auth پسورد_شما set key 1 get key

مرحله 5: غیرفعال کردن دستورات خطرناک

در فایل تنظیمات اضافه کنید:

 
rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "" rename-command SHUTDOWN SHUTDOWN_SECURE

ریستارت:

 
sudo systemctl restart redis

حافظه و ماندگاری داده‌ها

Redis داده را در RAM نگه می‌دارد. دو روش ذخیره دارد:

روشتوضیح
RDBاسنپ‌شات دوره‌ای
AOFثبت تمام عملیات نوشتن

فعال‌سازی AOF:

 
appendonly yes

همچنین در محیط تولید بهتر است مقدار حافظه را محدود کنید:

 
maxmemory 512mb maxmemory-policy allkeys-lru

خطاهای رایج

Redis بالا نمی‌آید

 
sudo journalctl -u redis -n 50

NOAUTH Authentication required

پسورد تنظیم شده ولی AUTH نزده‌اید.

Connection refused از سیستم دیگر

Redis فقط روی localhost فعال است. برای دسترسی راه دور از SSH Tunnel یا VPN استفاده کنید.


مزایا و محدودیت‌ها

مزایا

  • کاهش سطح حمله

  • جلوگیری از پاک شدن تصادفی داده

  • مدیریت پایدار توسط systemd

محدودیت

  • داده‌ها به‌صورت پیش‌فرض رمزنگاری نمی‌شوند

  • هر کسی دسترسی شل داشته باشد می‌تواند پسورد Redis را ببیند


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

پورت Redis؟
6379

آیا باید Redis روی اینترنت باز باشد؟
نه. هرگز.

چطور رمز را تغییر دهم؟
ویرایش redis.conf و ریستارت سرویس.


جمع‌بندی

حالا Redis شما:

  • فقط روی localhost در دسترس است

  • رمز عبور دارد

  • دستورات خطرناک غیرفعال شده‌اند

این تنظیمات Redis را برای کش، سشن و کارهای داخلی سرور کاملاً امن می‌کند. امنیت Redis فقط به خودش وابسته نیست؛ امنیت کل سرور، SSH و فایروال هم حیاتی است.