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 50NOAUTH Authentication required
پسورد تنظیم شده ولی AUTH نزدهاید.
Connection refused از سیستم دیگر
Redis فقط روی localhost فعال است. برای دسترسی راه دور از SSH Tunnel یا VPN استفاده کنید.
مزایا و محدودیتها
مزایا
-
کاهش سطح حمله
-
جلوگیری از پاک شدن تصادفی داده
-
مدیریت پایدار توسط systemd
محدودیت
-
دادهها بهصورت پیشفرض رمزنگاری نمیشوند
-
هر کسی دسترسی شل داشته باشد میتواند پسورد Redis را ببیند
سوالات متداول
پورت Redis؟
6379
آیا باید Redis روی اینترنت باز باشد؟
نه. هرگز.
چطور رمز را تغییر دهم؟
ویرایش redis.conf و ریستارت سرویس.
جمعبندی
حالا Redis شما:
-
فقط روی localhost در دسترس است
-
رمز عبور دارد
-
دستورات خطرناک غیرفعال شدهاند
این تنظیمات Redis را برای کش، سشن و کارهای داخلی سرور کاملاً امن میکند. امنیت Redis فقط به خودش وابسته نیست؛ امنیت کل سرور، SSH و فایروال هم حیاتی است.
