نصب Redis در اوبونتو یکی از کارهای رایج برای بهبود سرعت سایت، راهاندازی کش، مدیریت صفها، ذخیره Session، افزایش کارایی اپلیکیشنها و حتی بهینهسازی سایتهای وردپرسی است. Redis یک دیتابیس بسیار سریع از نوع in-memory است؛ یعنی دادهها را عمدتاً در حافظه RAM نگه میدارد و به همین دلیل، برای سناریوهایی مثل کش، صف پیام، Session Store و Object Cache عملکرد بسیار خوبی دارد.
اما نکته مهم اینجاست: Redis اگر بدون تنظیمات امنیتی مناسب نصب شود، میتواند به یکی از خطرناکترین نقاط ضعف سرور تبدیل شود. باز بودن پورت Redis روی اینترنت، نداشتن احراز هویت، استفاده از رمز ساده، فعال بودن کاربر پیشفرض، نبود محدودیت حافظه، نداشتن فایروال و ارسال داده بدون رمزنگاری میتواند باعث افشای اطلاعات، خرابکاری، مصرف بیش از حد منابع یا حتی نفوذ به سرور شود.
در این مقاله، بهصورت مرحلهبهمرحله یاد میگیرید چطور Redis را روی Ubuntu نصب کنید، عملکرد آن را تست کنید، دسترسیها را با ACL امن کنید، Redis را فقط روی localhost یا مسیر امن در دسترس قرار دهید، فایروال را تنظیم کنید، ارتباطات را با TLS رمزنگاری کنید، Slow Log و لاگهای Redis را بررسی کنید و برای دادههای Redis بکاپ و Persistence مناسب داشته باشید.
سطح: متوسط | مناسب برای: مدیران سرور، کاربران VPS، مدیران سایت وردپرسی، توسعهدهندگان، DevOpsها و تیمهای فنی که میخواهند Redis را روی سرور Ubuntu بهشکل امن و قابل استفاده در محیط واقعی راهاندازی کنند.
فهرست مطالب
- Redis چیست و چه کاربردی دارد؟
- چرا امنسازی Redis مهم است؟
- پیشنیازهای نصب Redis روی Ubuntu
- نصب Redis در اوبونتو
- تنظیم Redis برای مدیریت با systemd
- تست عملکرد Redis بعد از نصب
- محدود کردن Redis به localhost
- امنسازی Redis با ACL
- رمزنگاری ارتباط Redis با TLS
- تنظیم فایروال برای Redis
- روش امن اتصال از راه دور به Redis
- استفاده از Unix Socket برای امنیت بیشتر
- تنظیم محدودیت حافظه Redis
- محدودسازی دستورات خطرناک Redis
- مانیتورینگ و بررسی لاگهای Redis
- تنظیم Persistence و بکاپ Redis
- استفاده از Redis برای وردپرس و Object Cache
- عیبیابی خطاهای رایج Redis
- چکلیست امنیت Redis روی سرور Ubuntu
- سوالات متداول
- جمعبندی
Redis چیست و چه کاربردی دارد؟
Redis مخفف Remote Dictionary Server است و یک سیستم ذخیرهسازی داده بسیار سریع از نوع key-value محسوب میشود. Redis معمولاً دادهها را در RAM نگه میدارد و همین موضوع باعث میشود سرعت خواندن و نوشتن آن بسیار بالا باشد.
Redis فقط یک ابزار کش ساده نیست. در پروژههای واقعی میتوان از Redis برای کاربردهای مختلفی استفاده کرد، از جمله:
- کش کردن کوئریها و دادههای پرتکرار
- Object Cache در وردپرس
- ذخیره Session کاربران
- مدیریت صفها در اپلیکیشنها
- Rate Limiting برای APIها
- ذخیره موقت توکنها
- Pub/Sub برای پیامرسانی داخلی
- Leaderboard، شمارندهها و دادههای Real-time
در سرورهای میزبانی، مخصوصاً زمانی که سایت روی سرور مجازی ایران، سرور مجازی آلمان یا سرور اختصاصی اجرا میشود، Redis میتواند نقش مهمی در افزایش سرعت و کاهش فشار روی دیتابیس داشته باشد.
چرا امنسازی Redis مهم است؟
Redis بهصورت پیشفرض برای قرار گرفتن مستقیم روی اینترنت طراحی نشده است. این سرویس معمولاً باید در یک شبکه داخلی، روی localhost، پشت فایروال، یا از طریق VPN و تونل امن استفاده شود.
اگر Redis را بدون امنیت کافی روی سرور عمومی اجرا کنید، چند خطر جدی ایجاد میشود:
- دسترسی غیرمجاز به دادههای کش، Sessionها یا اطلاعات حساس
- حذف یا تغییر دادهها با دستوراتی مثل
FLUSHALL - استفاده از Redis برای حمله به سرور یا مصرف شدید RAM
- امکان سوءاستفاده از misconfiguration برای اجرای سناریوهای خطرناک
- قرار گرفتن رمزها و دادهها در معرض شنود در صورت نبود TLS
بنابراین نصب Redis فقط نصف کار است. بخش مهمتر، امنسازی Redis برای محیط واقعی و Production است.
پیشنیازهای نصب Redis روی Ubuntu
برای اجرای مراحل این مقاله، بهتر است این پیشنیازها را داشته باشید:
- یک سرور Ubuntu؛ مثل Ubuntu 20.04، ۲۲.۰۴ یا ۲۴.۰۴
- دسترسی SSH به سرور
- یک کاربر غیر root با دسترسی sudo
- فعال بودن فایروال UFW یا امکان تنظیم فایروال
- آشنایی پایه با دستورات لینوکس
اگر هنوز با دستورات پایه لینوکس آشنا نیستید، بهتر است قبل از ادامه، مقاله دستورات کاربردی لینوکس را هم مطالعه کنید.
همچنین اگر برای اجرای Redis به سرور مستقل نیاز دارید، استفاده از سرور مجازی و اختصاصی انتخاب بهتری نسبت به هاست اشتراکی است؛ چون در هاست اشتراکی معمولاً دسترسی کامل برای نصب و تنظیم Redis ندارید.
نصب Redis در اوبونتو
سادهترین روش نصب Redis در Ubuntu استفاده از APT است. ابتدا لیست پکیجها را بهروزرسانی کنید:
sudo apt updateسپس Redis را نصب کنید:
sudo apt install redis-server -yبعد از نصب، نسخه Redis را بررسی کنید:
redis-server --versionنمونه خروجی ممکن است شبیه این باشد:
Redis server v=7.x.x sha=00000000:0 malloc=jemalloc bits=64 build=...نسخه دقیق Redis به نسخه Ubuntu و مخازن فعال روی سرور شما بستگی دارد.
تنظیم Redis برای مدیریت با systemd
در Ubuntu، سرویسها معمولاً با systemd مدیریت میشوند. برای هماهنگی بهتر Redis با systemd، فایل تنظیمات Redis را باز کنید:
sudo nano /etc/redis/redis.confعبارت زیر را پیدا کنید:
supervised noآن را به حالت زیر تغییر دهید:
supervised systemdسپس فایل را ذخیره کنید. اگر از nano استفاده میکنید، با کلیدهای CTRL + X، سپس Y و بعد ENTER خارج شوید.
حالا Redis را ریاستارت کنید:
sudo systemctl restart redis-serverدر بعضی نسخهها ممکن است نام سرویس redis باشد. اگر دستور بالا کار نکرد، این دستور را امتحان کنید:
sudo systemctl restart redisبرای بررسی وضعیت سرویس:
sudo systemctl status redis-serverیا:
sudo systemctl status redisاگر Redis فعال باشد، باید وضعیت active (running) را ببینید.
تست عملکرد Redis بعد از نصب
بعد از نصب Redis، باید مطمئن شوید سرویس درست کار میکند. برای اتصال به Redis از ابزار redis-cli استفاده کنید:
redis-cliدر محیط Redis، دستور زیر را اجرا کنید:
pingاگر Redis درست کار کند، پاسخ زیر را میبینید:
PONGحالا یک مقدار تستی ذخیره کنید:
set test "Redis is working"پاسخ باید این باشد:
OKبرای خواندن مقدار:
get testخروجی:
"Redis is working"برای خروج از محیط Redis:
exitتست ماندگاری داده بعد از ریاستارت
برای اینکه مطمئن شوید Redis بعد از ریاستارت هم داده را حفظ میکند، سرویس را ریاستارت کنید:
sudo systemctl restart redis-serverدوباره وارد Redis شوید:
redis-cliمقدار قبلی را بخوانید:
get testاگر مقدار همچنان وجود داشت، یعنی Persistence پیشفرض Redis در حال کار است. البته در ادامه مقاله، تنظیمات Persistence را دقیقتر بررسی میکنیم.
محدود کردن Redis به localhost
یکی از مهمترین مراحل امنسازی Redis این است که مطمئن شوید Redis روی همه IPهای سرور گوش نمیدهد. Redis در حالت امن باید فقط روی localhost یا IPهای داخلی مشخص listen کند.
فایل تنظیمات را باز کنید:
sudo nano /etc/redis/redis.confخط bind را پیدا کنید و مطمئن شوید به این شکل است:
bind 127.0.0.1 ::1این تنظیم باعث میشود Redis فقط از داخل همان سرور قابل دسترسی باشد.
سپس Redis را ریاستارت کنید:
sudo systemctl restart redis-serverبرای بررسی اینکه Redis روی چه آدرسی گوش میدهد، از دستور زیر استفاده کنید:
ss -tulpen | grep redisخروجی امن باید چیزی شبیه این باشد:
۱۲۷.۰.۰.۱:۶۳۷۹
[::۱]:۶۳۷۹اگر در خروجی ۰.۰.۰.۰:۶۳۷۹ دیدید، یعنی Redis روی همه IPها گوش میدهد و این برای سرور عمومی خطرناک است.
امنسازی Redis با ACL
در نسخههای جدید Redis، روش مدرن برای مدیریت دسترسی کاربران، استفاده از ACL یا Access Control List است. روش قدیمیتر یعنی requirepass فقط یک رمز کلی برای Redis تعریف میکرد، اما ACL به شما اجازه میدهد کاربران مختلف با سطح دسترسی متفاوت بسازید.
برای شروع، یک رمز قوی تولید کنید:
openssl rand 60 | openssl base64 -Aخروجی را کپی کنید؛ این رمز را برای کاربر Redis استفاده میکنیم.
حالا فایل تنظیمات Redis را باز کنید:
sudo nano /etc/redis/redis.confبخش ACL را پیدا کنید و تنظیماتی شبیه این اضافه کنید:
# Disable default user
user default off
# Create application user
user appuser on >YOUR_STRONG_PASSWORD ~* &* +@allدر این تنظیم:
user default offکاربر پیشفرض Redis را غیرفعال میکند.appuserنام کاربر جدید است.onیعنی این کاربر فعال است.>YOUR_STRONG_PASSWORDرمز کاربر را تعیین میکند.~*یعنی دسترسی به همه keyها.&*یعنی دسترسی به همه کانالهای Pub/Sub.+@allیعنی اجازه اجرای همه دستههای دستورات.
بعد از ذخیره فایل، Redis را ریاستارت کنید:
sudo systemctl restart redis-serverتست ACL در Redis
حالا اگر بدون احراز هویت دستور ping را اجرا کنید:
redis-cli pingباید خطایی شبیه این ببینید:
NOAUTH Authentication required.برای اتصال با کاربر جدید، بهتر است رمز را مستقیم در دستور ننویسید؛ چون ممکن است در history شل ذخیره شود. از --askpass استفاده کنید:
redis-cli --user appuser --askpassبعد از وارد کردن رمز، دستور زیر را اجرا کنید:
pingاگر پاسخ PONG بود، ACL درست کار میکند.
ساخت کاربر محدودتر برای امنیت بهتر
در محیط Production بهتر است به هر اپلیکیشن فقط دسترسی لازم را بدهید. مثلاً برای یک اپلیکیشن که فقط به read/write نیاز دارد و نباید دستورهای خطرناک را اجرا کند:
user appuser on >YOUR_STRONG_PASSWORD ~* &* +@read +@write +@connection -@dangerous -FLUSHALL -FLUSHDBاین قانون اجازه خواندن، نوشتن و اتصال میدهد، اما دسته دستورات خطرناک و دستورهای حذف کامل دیتابیس را محدود میکند.
رمزنگاری ارتباط Redis با TLS
ACL جلوی دسترسی غیرمجاز را میگیرد، اما اگر Redis از طریق شبکه بین دو سرور استفاده شود، دادهها همچنان ممکن است بدون رمزنگاری منتقل شوند. برای ارتباط امن، باید TLS فعال شود.
اگر Redis فقط روی همان سرور و از طریق localhost استفاده میشود، معمولاً TLS ضروری نیست. اما اگر اپلیکیشن و Redis روی دو سرور جدا هستند، استفاده از TLS یا تونل امن بسیار مهم است.
ساخت مسیر گواهیها
sudo mkdir -p /etc/redis/tlsساخت CA و گواهی Self-signed برای Redis
برای محیط تست یا شبکه داخلی، میتوانید از گواهی self-signed استفاده کنید:
sudo openssl genrsa -out /etc/redis/tls/ca.key 4096
sudo openssl req -x509 -new -nodes \
-key /etc/redis/tls/ca.key \
-sha256 -days 365 \
-out /etc/redis/tls/ca.crt
sudo openssl genrsa -out /etc/redis/tls/redis.key 2048
sudo openssl req -new \
-key /etc/redis/tls/redis.key \
-out /etc/redis/tls/redis.csr
sudo openssl x509 -req \
-in /etc/redis/tls/redis.csr \
-CA /etc/redis/tls/ca.crt \
-CAkey /etc/redis/tls/ca.key \
-CAcreateserial \
-out /etc/redis/tls/redis.crt \
-days 365 -sha256دسترسی فایلها را محدود کنید:
sudo chmod 640 /etc/redis/tls/*
sudo chown redis:redis /etc/redis/tls/*برای محیط Production عمومی، بهتر است از گواهی معتبر صادرشده توسط CA قابل اعتماد استفاده کنید. اگر ارتباط Redis فقط داخلی است، self-signed با توزیع امن CA بین کلاینتها قابل قبول است.
فعال کردن TLS در Redis
فایل تنظیمات Redis را باز کنید:
sudo nano /etc/redis/redis.confبرای غیرفعال کردن پورت بدون رمزنگاری و فعالسازی TLS روی پورت Redis، این تنظیمات را اضافه یا اصلاح کنید:
port 0
tls-port 6379
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crtسپس Redis را ریاستارت کنید:
sudo systemctl restart redis-serverتست اتصال Redis با TLS
redis-cli --user appuser --askpass --tls --cacert /etc/redis/tls/ca.crtبعد از ورود، دستور زیر را بزنید:
pingاگر PONG دریافت کردید، ارتباط TLS درست است.
فعالسازی mTLS برای امنیت بیشتر
در سناریوهای حساس، میتوانید Mutual TLS یا mTLS را فعال کنید. در این حالت، کلاینت هم باید گواهی معتبر ارائه دهد.
ابتدا برای کلاینت گواهی بسازید:
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
sudo openssl x509 -req \
-in client.csr \
-CA /etc/redis/tls/ca.crt \
-CAkey /etc/redis/tls/ca.key \
-CAcreateserial \
-out client.crt \
-days 365 -sha256سپس در /etc/redis/redis.conf این گزینه را فعال کنید:
tls-auth-clients yesاتصال با گواهی کلاینت:
redis-cli --user appuser --askpass --tls \
--cacert /etc/redis/tls/ca.crt \
--cert client.crt \
--key client.keyتنظیم فایروال برای Redis
حتی اگر Redis را با ACL و TLS امن کرده باشید، باز هم نباید پورت Redis را برای همه اینترنت باز بگذارید. پورت پیشفرض Redis عدد ۶۳۷۹ است و باید فقط برای منابع قابل اعتماد باز باشد.
ابتدا مطمئن شوید SSH مجاز است تا دسترسی شما قطع نشود:
sudo ufw allow OpenSSHاگر Redis فقط روی localhost استفاده میشود، نیازی به باز کردن پورت ۶۳۷۹ روی فایروال ندارید.
اگر یک سرور اپلیکیشن با IP مشخص باید به Redis وصل شود، فقط همان IP را مجاز کنید:
sudo ufw allow from YOUR_APP_SERVER_IP to any port 6379 proto tcpوضعیت فایروال را بررسی کنید:
sudo ufw status verboseاگر UFW هنوز فعال نیست:
sudo ufw enableنکته مهم: هرگز از دستور زیر برای Redis روی سرور عمومی استفاده نکنید، مگر اینکه دقیقاً بدانید چه میکنید و محدودیتهای دیگری مثل VPN، فایروال سطح دیتاسنتر و TLS دارید:
sudo ufw allow 6379/tcpاین دستور پورت Redis را برای همه باز میکند و از نظر امنیتی خطرناک است.
روش امن اتصال از راه دور به Redis
اگر اپلیکیشن و Redis روی دو سرور متفاوت هستند، سه روش امنتر برای اتصال وجود دارد:
۱. استفاده از شبکه خصوصی یا Private Network
اگر ارائهدهنده زیرساخت شما Private Network دارد، بهتر است Redis فقط روی IP خصوصی listen کند و فایروال هم فقط همان شبکه خصوصی را مجاز بداند.
۲. استفاده از VPN مثل WireGuard یا OpenVPN
در این روش، سرور اپلیکیشن و سرور Redis از طریق یک تونل خصوصی و رمزنگاریشده به هم متصل میشوند. این روش از باز کردن مستقیم پورت Redis روی اینترنت بسیار امنتر است.
۳. استفاده از SSH Tunnel
برای اتصال موقت یا مدیریت، میتوانید از SSH Tunnel استفاده کنید:
ssh -L 8000:127.0.0.1:6379 user@YOUR_REDIS_SERVER_IPسپس روی سیستم خودتان به Redis از طریق پورت ۸۰۰۰ وصل میشوید:
redis-cli -p 8000اگر ACL فعال است:
redis-cli -p 8000 --user appuser --askpassاستفاده از Unix Socket برای امنیت بیشتر
اگر اپلیکیشن و Redis روی یک سرور هستند، لازم نیست حتماً از TCP Port استفاده کنید. میتوانید Redis را از طریق Unix Socket در دسترس اپلیکیشن قرار دهید. این روش هم سریعتر است و هم سطح حمله شبکه را کاهش میدهد.
در فایل تنظیمات Redis:
sudo nano /etc/redis/redis.confاین تنظیمات را فعال کنید:
unixsocket /var/run/redis/redis.sock
unixsocketperm 770سپس Redis را ریاستارت کنید:
sudo systemctl restart redis-serverاتصال با redis-cli از طریق socket:
redis-cli -s /var/run/redis/redis.sockاگر وبسرور یا PHP-FPM باید از این socket استفاده کند، باید کاربر مربوطه عضو گروه مناسب باشد یا سطح دسترسی socket بهشکل درست تنظیم شود.
تنظیم محدودیت حافظه Redis
Redis دادهها را عمدتاً در RAM نگه میدارد. اگر برای Redis محدودیت حافظه تعیین نکنید، ممکن است در شرایط خاص RAM سرور پر شود و سرویسهای دیگر مثل وبسرور، PHP-FPM یا دیتابیس هم دچار مشکل شوند.
فایل تنظیمات را باز کنید:
sudo nano /etc/redis/redis.confبرای مثال، اگر میخواهید Redis حداکثر ۲ گیگابایت RAM مصرف کند:
maxmemory 2gbسپس باید سیاست حذف دادهها هنگام پر شدن حافظه را مشخص کنید:
maxmemory-policy allkeys-lruسیاست allkeys-lru یعنی Redis هنگام رسیدن به محدودیت حافظه، کلیدهایی را که کمتر استفاده شدهاند حذف میکند. این سیاست برای Redis بهعنوان کش انتخاب رایجی است.
اگر Redis شما برای دادههای مهم و غیرقابل حذف استفاده میشود، باید سیاست حافظه را با دقت بیشتری انتخاب کنید. برای کش وردپرس و Object Cache معمولاً حذف کلیدهای قدیمی قابل قبول است، اما برای صفها یا Sessionها باید سناریو دقیقتر بررسی شود.
محدودسازی دستورات خطرناک Redis
در روشهای قدیمی، گاهی دستورهای خطرناک Redis مثل FLUSHALL یا CONFIG را rename میکردند. اما روش مدرنتر و تمیزتر، استفاده از ACL است.
دستورهایی مثل موارد زیر میتوانند خطرناک باشند:
FLUSHALL: حذف همه دادههاFLUSHDB: حذف دادههای دیتابیس فعلیCONFIG: تغییر تنظیمات RedisDEBUG: دستورات دیباگ حساسSHUTDOWN: خاموش کردن Redis
برای محدود کردن این دستورات، میتوانید ACL کاربر را محدودتر تعریف کنید:
user appuser on >YOUR_STRONG_PASSWORD ~* &* +@read +@write +@connection -@dangerous -FLUSHALL -FLUSHDB -CONFIG -DEBUG -SHUTDOWNاین رویکرد از نظر نگهداری و سازگاری با کلاینتها بهتر از rename کردن دستورهاست.
مانیتورینگ و بررسی لاگهای Redis
بعد از نصب و امنسازی Redis، باید رفتار آن را مانیتور کنید. لاگها میتوانند خطاهای اتصال، تلاشهای ناموفق احراز هویت، مشکلات حافظه، خطاهای Persistence و اختلالات سرویس را نشان دهند.
بررسی وضعیت سرویس Redis
sudo systemctl status redis-serverمشاهده زنده لاگ Redis با journalctl
sudo journalctl -u redis-server.service -fاگر سرویس شما با نام redis شناخته میشود:
sudo journalctl -u redis.service -fدر لاگها به موارد زیر دقت کنید:
- تلاشهای زیاد برای اتصال از IPهای ناشناس
- خطاهای احراز هویت
- خطاهای مربوط به حافظه
- خطاهای ذخیرهسازی RDB یا AOF
- خطاهای TLS یا Certificate
فعالسازی Redis Slow Log
Slow Log دستورهایی را ثبت میکند که اجرای آنها بیش از حد مشخص طول کشیده است. این قابلیت برای پیدا کردن کوئریهای کند و رفتارهای غیرعادی مفید است.
در فایل تنظیمات Redis:
sudo nano /etc/redis/redis.confاین تنظیمات را اضافه یا اصلاح کنید:
slowlog-log-slower-than 10000
slowlog-max-len 128عدد ۱۰۰۰۰ یعنی دستورهایی که بیشتر از ۱۰ میلیثانیه طول بکشند ثبت شوند؛ چون مقدار بر اساس میکروثانیه است.
برای مشاهده Slow Log:
redis-cli --user appuser --askpass SLOWLOG GETیا اگر با socket وصل میشوید:
redis-cli -s /var/run/redis/redis.sock --user appuser --askpass SLOWLOG GETتنظیم Persistence و بکاپ Redis
Redis دادهها را در حافظه نگه میدارد، اما میتواند آنها را روی دیسک هم ذخیره کند تا در صورت ریاستارت یا خاموشی سرور، دادهها از بین نروند. دو روش اصلی Persistence در Redis وجود دارد:
- RDB: گرفتن Snapshot از دادهها در بازههای زمانی مشخص
- AOF: ثبت عملیات نوشتن در فایل Append Only برای دوام بیشتر دادهها
RDB چیست؟
RDB در بازههای مشخص از دادهها Snapshot میگیرد. این روش معمولاً سریعتر و سبکتر است، اما ممکن است در صورت Crash، تغییرات چند دقیقه آخر از دست برود.
AOF چیست؟
AOF هر عملیات نوشتن را ثبت میکند. این روش دوام داده بهتری دارد، اما فایلهای بزرگتری تولید میکند و ممکن است نیازمند rewrite دورهای باشد.
فعالسازی AOF
برای فعال کردن AOF، در /etc/redis/redis.conf این گزینه را تنظیم کنید:
appendonly yesسپس Redis را ریاستارت کنید:
sudo systemctl restart redis-serverمحل فایلهای داده Redis
در Ubuntu، مسیر رایج دادههای Redis این است:
/var/lib/redisبرای بررسی فایلها:
sudo ls -lah /var/lib/redisباید مطمئن شوید فایلهای Redis مالکیت و دسترسی مناسبی دارند و برای همه کاربران قابل خواندن نیستند.
بکاپ گرفتن از Redis
برای بکاپ، بسته به تنظیمات شما باید فایلهایی مثل dump.rdb یا فایلهای AOF را در برنامه بکاپ قرار دهید.
نمونه بکاپ ساده:
sudo tar -czvf redis-backup-$(date +%F).tar.gz /var/lib/redisبرای امنیت بیشتر، بکاپ را رمزنگاری کنید و در یک محل خارج از سرور نگه دارید:
gpg -c redis-backup-$(date +%F).tar.gzنکته مهم این است که فقط بکاپ گرفتن کافی نیست. باید هر چند وقت یکبار بازیابی بکاپ را روی یک سرور تست یا staging امتحان کنید.
استفاده از Redis برای وردپرس و Object Cache
یکی از کاربردهای رایج Redis در سایتهای وردپرسی، استفاده بهعنوان Object Cache است. در این حالت، بخشی از دادههایی که وردپرس مرتباً از دیتابیس میخواند، در Redis ذخیره میشود تا فشار روی MySQL یا MariaDB کاهش پیدا کند.
این موضوع برای سایتهای پرترافیک، فروشگاههای WooCommerce، سایتهای عضویتمحور و سایتهایی که کوئریهای زیاد دارند بسیار مفید است.
برای استفاده از Redis در وردپرس معمولاً این مراحل لازم است:
- نصب Redis روی سرور
- فعال بودن PHP Redis Extension
- نصب افزونه Object Cache مناسب در وردپرس
- تنظیم اتصال به Redis از طریق localhost، socket یا IP داخلی
- تست وضعیت Object Cache در پیشخوان وردپرس
اگر سایت شما روی هاست وردپرس یا هاست لینوکس قرار دارد، امکان استفاده از Redis به تنظیمات سرویس میزبانی بستگی دارد. اما در VPS یا سرور اختصاصی، کنترل کاملتری برای نصب و پیکربندی Redis دارید.
عیبیابی خطاهای رایج Redis
خطای Connection refused
این خطا یعنی کلاینت نمیتواند به Redis وصل شود. موارد زیر را بررسی کنید:
sudo systemctl status redis-server
ss -tulpen | grep redis
sudo ufw statusدلایل رایج:
- Redis اجرا نیست.
- Redis روی آدرس موردنظر listen نمیکند.
- فایروال اتصال را مسدود کرده است.
- پورت اشتباه استفاده شده است.
خطای NOAUTH Authentication required
این خطا یعنی Redis احراز هویت میخواهد. باید با کاربر و رمز درست وصل شوید:
redis-cli --user appuser --askpassخطای WRONGPASS invalid username-password pair
این خطا یعنی نام کاربری یا رمز اشتباه است. تنظیمات ACL را بررسی کنید:
sudo nano /etc/redis/redis.confو بعد از اصلاح، Redis را ریاستارت کنید:
sudo systemctl restart redis-serverRedis فقط از داخل سرور وصل میشود، اما از بیرون نه
این حالت معمولاً به یکی از این موارد مربوط است:
- Redis فقط روی localhost bind شده است.
- فایروال پورت ۶۳۷۹ را بسته است.
- Security Group یا فایروال دیتاسنتر اجازه اتصال نمیدهد.
- Redis باید از طریق VPN یا SSH Tunnel استفاده شود، نه اتصال مستقیم.
در اغلب سناریوها، این رفتار یعنی Redis امنتر تنظیم شده و الزاماً مشکل نیست.
خطای TLS هنگام اتصال
اگر TLS فعال است اما اتصال انجام نمیشود، این موارد را بررسی کنید:
- مسیر فایلهای certificate در redis.conf درست باشد.
- مالکیت فایلها برای کاربر redis قابل خواندن باشد.
- در redis-cli گزینه
--tlsو--cacertرا وارد کرده باشید. - اگر mTLS فعال است، client certificate و key هم ارسال شده باشد.
Redis حافظه زیادی مصرف میکند
مصرف حافظه را بررسی کنید:
redis-cli --user appuser --askpass INFO memoryاگر Redis بهعنوان کش استفاده میشود، حتماً maxmemory و maxmemory-policy را تنظیم کنید.
چکلیست امنیت Redis روی سرور Ubuntu
- Redis فقط روی localhost، socket یا IP خصوصی listen کند.
- پورت ۶۳۷۹ برای همه اینترنت باز نباشد.
- کاربر پیشفرض Redis غیرفعال شود.
- بهجای
requirepassاز ACL استفاده شود. - برای هر اپلیکیشن، کاربر جدا با حداقل دسترسی لازم ساخته شود.
- دستورهای خطرناک با ACL محدود شوند.
- اگر Redis از راه دور استفاده میشود، VPN، SSH Tunnel یا TLS فعال باشد.
- فایروال فقط IPهای قابل اعتماد را مجاز کند.
- برای Redis محدودیت حافظه تعریف شود.
- Slow Log فعال و لاگها مانیتور شوند.
- Persistence متناسب با نیاز پروژه تنظیم شود.
- فایلهای RDB/AOF در برنامه بکاپ قرار بگیرند.
- بکاپها رمزنگاری و خارج از سرور نگهداری شوند.
- بازیابی بکاپ بهصورت دورهای تست شود.
- سیستمعامل و Redis بهروزرسانی شوند.
سوالات متداول درباره نصب و امنسازی Redis در اوبونتو
Redis چیست؟
Redis یک سیستم ذخیرهسازی داده بسیار سریع از نوع key-value و in-memory است که برای کش، Session، صف، Pub/Sub و دادههای Real-time استفاده میشود.
پورت پیشفرض Redis چیست؟
پورت پیشفرض Redis عدد ۶۳۷۹ است. این پورت نباید بدون محدودیت روی اینترنت باز باشد.
آیا Redis باید روی اینترنت باز باشد؟
خیر. در بیشتر سناریوها Redis باید فقط روی localhost، شبکه خصوصی، VPN یا SSH Tunnel قابل دسترسی باشد. باز کردن مستقیم Redis روی اینترنت ریسک امنیتی جدی دارد.
برای امنیت Redis، requirepass کافی است؟
در نسخههای جدید Redis بهتر است بهجای requirepass از ACL استفاده کنید. ACL امکان ساخت چند کاربر با دسترسیهای متفاوت و محدودسازی دستورها را فراهم میکند.
آیا Redis به SSL یا TLS نیاز دارد؟
اگر Redis فقط روی همان سرور و از طریق localhost استفاده میشود، معمولاً TLS ضروری نیست. اما اگر ارتباط Redis از طریق شبکه بین چند سرور انجام میشود، TLS یا تونل امن بسیار مهم است.
برای وردپرس، Redis چه کاربردی دارد؟
در وردپرس، Redis معمولاً برای Object Cache استفاده میشود. این کار باعث کاهش فشار روی دیتابیس و بهبود سرعت سایت میشود، مخصوصاً در سایتهای پرترافیک یا فروشگاههای WooCommerce.
تفاوت RDB و AOF در Redis چیست؟
RDB از دادهها Snapshot دورهای میگیرد و سبکتر است. AOF عملیات نوشتن را ثبت میکند و دوام داده بهتری دارد، اما ممکن است فایلهای بزرگتری ایجاد کند. برای بسیاری از سناریوهای Production، ترکیب هر دو روش مناسب است.
چطور بفهمم Redis در حال اجراست؟
با دستور زیر وضعیت Redis را بررسی کنید:
sudo systemctl status redis-serverهمچنین با redis-cli و دستور ping باید پاسخ PONG دریافت کنید.
چطور بفهمم Redis روی چه آدرسی listen میکند؟
از دستور زیر استفاده کنید:
ss -tulpen | grep redisاگر خروجی شامل ۰.۰.۰.۰:۶۳۷۹ باشد، Redis روی همه IPها گوش میدهد و باید تنظیمات امنیتی را بررسی کنید.
جمعبندی
نصب Redis در اوبونتو کار سختی نیست؛ با چند دستور ساده میتوان Redis را نصب و اجرا کرد. اما اگر هدف شما استفاده واقعی در سایت، اپلیکیشن یا سرور Production است، نصب ساده کافی نیست. Redis باید با دقت امنسازی شود.
مهمترین اصول امنیت Redis عبارتاند از: محدود کردن Redis به localhost یا شبکه خصوصی، استفاده از ACL، غیرفعال کردن کاربر پیشفرض، محدودسازی دستورات خطرناک، تنظیم فایروال، استفاده از TLS یا تونل امن برای اتصال از راه دور، تعریف محدودیت حافظه، مانیتورینگ لاگها و داشتن بکاپ منظم.
اگر Redis را برای افزایش سرعت سایت، کش وردپرس، اپلیکیشنهای پرترافیک یا سرویسهای حساس استفاده میکنید، بهتر است آن را روی زیرساختی پایدار و قابل مدیریت اجرا کنید. برای این نوع سناریوها، استفاده از سرور مجازی ایران، سرور مجازی آلمان یا سرویسهای حرفهای سرور مجازی و اختصاصی انتخاب مناسبتری نسبت به هاستهای محدود است.
