Community
0 2250
HostiServer
2025-12-07 12:01:00

Порти Redis: налаштування, безпека та конфігурація 2026

⏱️ Час читання: ~10 хвилин | 📅 Оновлено: 7 грудня 2025

Один неправильний порт — і ваш сервер відкритий для всього світу

Redis обробляє мільйони запитів на секунду, зберігає сесії користувачів, кешує дані для миттєвого доступу. Але є проблема: за замовчуванням Redis слухає порт 6379 без будь-якої автентифікації. Хакери знають це і сканують інтернет 24/7.

У 2025 році близько 40 000 Redis серверів були публічно доступні без пароля. Результат — викрадені дані, криптомайнери на серверах, знищені бази даних. І все через неправильно налаштований порт.

Цей гайд — про те, як правильно налаштувати порти Redis у 2026 році: від базової конфігурації до production-ready безпеки з ACL та TLS. Незалежно від того, чи ви запускаєте Redis на VPS чи виділеному сервері, ці знання збережуть ваші дані.

Redis: in-memory база даних

Redis (Remote Dictionary Server) — це in-memory база даних, яка зберігає все в оперативній пам'яті. Поки традиційні бази читають з диска за 10-15 мілісекунд, Redis віддає дані за мікросекунди.

Як це працює

Традиційні бази даних зберігають дані на диску і читають їх при кожному запиті. Redis тримає все в оперативній пам'яті — звідси швидкість. Диск використовується тільки для persistence (збереження даних при перезапуску).

Клієнти (ваш сайт, додаток, API) підключаються до Redis через мережевий порт. За замовчуванням це порт 6379. Сервер постійно слухає цей порт, готовий прийняти команди: зберегти ключ, отримати значення, додати елемент до списку.

Redis 8: що нового у 2025-2026

Redis 8 — найбільше оновлення за всю історію:

  • До 87% швидше — латентність команд знижена для 90+ операцій
  • 2x throughput — завдяки покращеному I/O multithreading
  • Vector Sets — нативна підтримка векторного пошуку для AI/ML
  • JSON native — модуль RedisJSON тепер вбудований
  • До 67% економії RAM — оптимізація зберігання JSON та чисел
Redis 8 — найбільше оновлення за всю історію

Порти Redis: який для чого

Redis використовує кілька портів для різних функцій. Розуміння кожного — ключ до правильної конфігурації.

Порт Призначення Коли використовується
6379 Основний порт Redis Всі клієнтські підключення
16379 Cluster Bus Комунікація між нодами кластера
26379 Redis Sentinel Моніторинг та автоматичний failover
Кастомний Ваш вибір (6380, 6381...) Кілька інстансів на одному сервері

Порт 6379: основний порт

Це стандартний порт, який знає кожна клієнтська бібліотека — Python redis-py, Node.js ioredis, PHP Predis. Коли ви пишете redis.connect() без параметрів, підключення йде саме сюди.

Проблема: 6379 — перший порт, який сканують хакери. Shodan показує десятки тисяч відкритих Redis серверів щодня.

Порт 16379: Cluster Bus

Коли Redis працює в cluster mode, ноди спілкуються між собою через порт 16379 (основний порт + 10000). Це внутрішній протокол для синхронізації даних та розподілу слотів.

Важливо: Цей порт ніколи не повинен бути доступний з інтернету — тільки між нодами кластера.

Порт 26379: Sentinel

Redis Sentinel забезпечує High Availability — моніторить master-ноду і автоматично перемикає на replica, якщо master впав. Sentinel слухає порт 26379 для координації з іншими Sentinel-інстансами.

Безпека портів Redis: 6 рівнів захисту

Незахищений Redis — це не питання "чи зламають", а "коли". Ось що потрібно налаштувати.

1. Bind: обмежте інтерфейси

За замовчуванням Redis може слухати всі мережеві інтерфейси. Це небезпечно.

# redis.conf — слухати тільки localhost
bind 127.0.0.1
# Або конкретний приватний IP
bind 127.0.0.1 10.0.0.5
# НЕБЕЗПЕЧНО — слухати все
# bind 0.0.0.0

2. Protected Mode: вбудований захист

Redis 3.2+ має protected mode — якщо немає пароля і bind не налаштований, сервер відхиляє зовнішні підключення.

# redis.conf — завжди увімкнено
protected-mode yes

3. ACL замість requirepass: гранулярний контроль

Старий requirepass — це один пароль для всіх. ACL (Access Control Lists) з Redis 6+ дозволяють створювати користувачів з різними правами.

# redis.conf — створення користувачів з ACL
# Вимкнути дефолтного користувача без пароля
user default off
# Адмін з повним доступом
user admin on >SuperStr0ngP@ssw0rd ~* +@all
# Користувач тільки для читання
user readonly on >R3adOnlyP@ss ~cached:* +@read -@dangerous
# Користувач для додатку — обмежені команди
user webapp on >W3bAppP@ss ~session:* ~cache:* +get +set +del +expire

Розшифровка ACL синтаксису:

  • on/off — активувати/деактивувати користувача
  • >password — встановити пароль
  • ~pattern — доступ до ключів за патерном
  • +command — дозволити команду
  • -@category — заборонити категорію команд

4. TLS: шифрування трафіку

Redis 6+ підтримує нативний TLS. Обов'язково для production, особливо якщо трафік йде через мережу.

# redis.conf — налаштування TLS
# Використовувати TLS на порту 6379, вимкнути незашифрований
tls-port 6379
port 0
# Сертифікати
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
# Вимагати клієнтські сертифікати (опційно, але рекомендовано)
tls-auth-clients yes
# Мінімальна версія TLS
tls-protocols "TLSv1.2 TLSv1.3"
TLS: шифрування трафіку

5. Firewall: обмеження на рівні мережі

Навіть з усіма налаштуваннями Redis, firewall — обов'язковий.

# UFW — дозволити Redis тільки з конкретних IP
sudo ufw allow from 10.0.0.0/24 to any port 6379
sudo ufw deny 6379
# iptables — те саме
iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP

6. Небезпечні команди: перейменуйте або вимкніть

Деякі команди можуть знищити дані або скомпрометувати сервер.

# redis.conf — захист небезпечних команд
# Повністю вимкнути
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""
# Або перейменувати на щось складне
rename-command CONFIG "CONFIG_b4ckd00r_pr0t3ct"
rename-command SHUTDOWN "SHUTDOWN_s3cur3_2026"

⚠️ Увага: Після перейменування команд, деякі інструменти моніторингу можуть перестати працювати. Тестуйте в staging середовищі.

Зміна порту Redis: покрокова інструкція

Зміна стандартного порту 6379 на кастомний — один зі способів ускладнити автоматичні атаки. Це не замінює інші заходи безпеки, але додає ще один рівень захисту.

Крок 1: Знайдіть конфігураційний файл

# Типові локації
/etc/redis/redis.conf          # Debian/Ubuntu
/etc/redis.conf                # CentOS/RHEL
/usr/local/etc/redis.conf      # macOS (Homebrew)
# Знайти файл
sudo find / -name redis.conf 2>/dev/null

Крок 2: Змініть порт у конфігурації

# Відкрийте файл
sudo nano /etc/redis/redis.conf
# Знайдіть рядок (приблизно лінія 98)
port 6379
# Змініть на новий порт
port 6380

Крок 3: Оновіть firewall

# UFW
sudo ufw allow 6380/tcp
sudo ufw delete allow 6379/tcp
# iptables
sudo iptables -A INPUT -p tcp --dport 6380 -j ACCEPT
sudo iptables -D INPUT -p tcp --dport 6379 -j ACCEPT

Крок 4: Перезапустіть Redis

# Systemd
sudo systemctl restart redis
# Або
sudo service redis-server restart

Крок 5: Перевірте роботу

# Підключення через новий порт
redis-cli -p 6380 ping
# Очікувана відповідь: PONG
# Перевірка, що сервер слухає
sudo netstat -tlnp | grep redis
# tcp  0  0  127.0.0.1:6380  0.0.0.0:*  LISTEN  1234/redis-server

Крок 6: Оновіть всі клієнти

Не забудьте оновити підключення у всіх додатках!

# Python
import redis
r = redis.Redis(host='localhost', port=6380)
# PHP
$redis = new Redis();
$redis->connect('127.0.0.1', 6380);
# Node.js
const Redis = require('ioredis');
const redis = new Redis({ port: 6380 });

Запуск кількох Redis інстансів на одному сервері

Часто потрібно розділити Redis для різних завдань: один для кешу, інший для сесій, третій для черг. Кожен інстанс працює на своєму порту.

Створення окремих конфігурацій

# Копіюємо конфігурацію для кожного інстансу
sudo cp /etc/redis/redis.conf /etc/redis/redis-cache.conf
sudo cp /etc/redis/redis.conf /etc/redis/redis-session.conf
sudo cp /etc/redis/redis.conf /etc/redis/redis-queue.conf

Налаштування кожного інстансу

# /etc/redis/redis-cache.conf
port 6379
pidfile /var/run/redis/redis-cache.pid
logfile /var/log/redis/redis-cache.log
dir /var/lib/redis-cache
dbfilename dump-cache.rdb
# /etc/redis/redis-session.conf
port 6380
pidfile /var/run/redis/redis-session.pid
logfile /var/log/redis/redis-session.log
dir /var/lib/redis-session
dbfilename dump-session.rdb
# /etc/redis/redis-queue.conf
port 6381
pidfile /var/run/redis/redis-queue.pid
logfile /var/log/redis/redis-queue.log
dir /var/lib/redis-queue
dbfilename dump-queue.rdb

Systemd сервіси для кожного інстансу

# /etc/systemd/system/redis-cache.service
[Unit]
Description=Redis Cache Instance
After=network.target
[Service]
ExecStart=/usr/bin/redis-server /etc/redis/redis-cache.conf
ExecStop=/usr/bin/redis-cli -p 6379 shutdown
Restart=always
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
# Активація сервісів
sudo systemctl daemon-reload
sudo systemctl enable redis-cache redis-session redis-queue
sudo systemctl start redis-cache redis-session redis-queue
# Перевірка
sudo systemctl status redis-cache
redis-cli -p 6379 ping  # cache
redis-cli -p 6380 ping  # session
redis-cli -p 6381 ping  # queue
Інстанс Порт Призначення Рекомендована RAM
redis-cache 6379 Кеш сторінок, API відповідей 2-8 GB
redis-session 6380 Сесії користувачів 1-4 GB
redis-queue 6381 Черги завдань (Celery, Bull) 1-2 GB

Типові сценарії використання Redis

Redis давно вийшов за межі простого кешу. Ось для чого його використовують.

Redis давно вийшов за межі простого кешу

1. Кешування (класика)

Зберігання результатів важких запитів, API відповідей, відрендерених сторінок. Знижує навантаження на основну БД на 70-90%.

# Python приклад кешування
import redis
import json
r = redis.Redis(host='localhost', port=6379)
def get_user(user_id):
    # Спроба отримати з кешу
    cached = r.get(f"user:{user_id}")
    if cached:
        return json.loads(cached)
    
    # Якщо немає — запит до БД (використовуйте параметризовані запити!)
    user = db.query("SELECT * FROM users WHERE id = %s", (user_id,))
    
    # Зберегти в кеш на 1 годину
    r.setex(f"user:{user_id}", 3600, json.dumps(user))
    return user

2. Сесії користувачів

Швидший за file-based сесії в 100+ разів. Ідеально для розподілених систем з кількома серверами.

3. Rate Limiting

Обмеження кількості запитів — захист API від зловживань.

# Rate limiter: 100 запитів на хвилину
def is_rate_limited(user_ip):
    key = f"rate:{user_ip}"
    current = r.incr(key)
    
    if current == 1:
        r.expire(key, 60)  # TTL 60 секунд
    
    return current > 100

4. Real-time лідерборди

Sorted Sets — ідеальна структура для рейтингів з миттєвим оновленням.

# Оновити рахунок гравця
r.zadd("leaderboard:game1", {"player123": 5000})
# Топ-10 гравців
top10 = r.zrevrange("leaderboard:game1", 0, 9, withscores=True)
# Позиція конкретного гравця
rank = r.zrevrank("leaderboard:game1", "player123")

5. Pub/Sub та черги повідомлень

Real-time комунікація між сервісами, чати, нотифікації.

6. AI/ML: Vector Search (Redis 8+)

Новий тренд 2025-2026 — Redis як векторна база даних для AI застосунків.

# Semantic caching для LLM
# Замість точного збігу — пошук семантично схожих запитів
# Економія до 30% на API викликах до OpenAI/Claude
# Vector Sets в Redis 8 (синтаксис може змінюватись)
VADD embeddings doc1 VECTOR [0.1, 0.2, 0.3, ...]
VSIM embeddings VECTOR [0.15, 0.22, 0.28, ...] COUNT 5

7. Геолокація

Пошук найближчих об'єктів — ресторани, таксі, магазини.

# Додати локацію
r.geoadd("restaurants", 30.5234, 50.4501, "restaurant:1")
# Знайти ресторани в радіусі 5 км
nearby = r.georadius("restaurants", 30.52, 50.45, 5, unit="km")

Клієнтські бібліотеки: підключення до Redis

Приклади підключення для популярних мов програмування.

Python (redis-py)

import redis
# Базове підключення
r = redis.Redis(host='localhost', port=6379, db=0)
# З паролем (ACL)
r = redis.Redis(
    host='localhost',
    port=6379,
    username='webapp',
    password='W3bAppP@ss'
)
# З TLS
r = redis.Redis(
    host='redis.example.com',
    port=6379,
    ssl=True,
    ssl_certfile='/path/to/client.crt',
    ssl_keyfile='/path/to/client.key',
    ssl_ca_certs='/path/to/ca.crt'
)
# Connection Pool (рекомендовано для production)
pool = redis.ConnectionPool(
    host='localhost',
    port=6379,
    max_connections=50
)
r = redis.Redis(connection_pool=pool)

PHP (Predis / phpredis)

// Predis
$client = new Predis\Client([
    'scheme' => 'tcp',
    'host'   => '127.0.0.1',
    'port'   => 6379,
    'password' => 'your_password'
]);
// З TLS
$client = new Predis\Client([
    'scheme' => 'tls',
    'host'   => 'redis.example.com',
    'port'   => 6379,
    'ssl'    => ['verify_peer' => true]
]);
// phpredis extension (швидше)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth(['webapp', 'W3bAppP@ss']); // ACL username + password

Node.js (ioredis)

const Redis = require('ioredis');
// Базове підключення
const redis = new Redis({
    host: 'localhost',
    port: 6379
});
// З ACL
const redis = new Redis({
    host: 'localhost',
    port: 6379,
    username: 'webapp',
    password: 'W3bAppP@ss'
});
// З TLS
const redis = new Redis({
    host: 'redis.example.com',
    port: 6379,
    tls: {
        cert: fs.readFileSync('/path/to/client.crt'),
        key: fs.readFileSync('/path/to/client.key'),
        ca: fs.readFileSync('/path/to/ca.crt')
    }
});
// Cluster mode
const cluster = new Redis.Cluster([
    { host: 'node1', port: 6379 },
    { host: 'node2', port: 6379 },
    { host: 'node3', port: 6379 }
]);

Go (go-redis)

import "github.com/redis/go-redis/v9"
// Базове підключення
rdb := redis.NewClient(&redis.Options{
    Addr:     "localhost:6379",
    Username: "webapp",
    Password: "W3bAppP@ss",
    DB:       0,
})
// З TLS
rdb := redis.NewClient(&redis.Options{
    Addr:     "redis.example.com:6379",
    TLSConfig: &tls.Config{
        MinVersion: tls.VersionTLS12,
    },
})

Моніторинг Redis

Redis CLI: базова діагностика

# Підключення
redis-cli -h localhost -p 6379
# Перевірка з'єднання
PING
# Відповідь: PONG
# Повна інформація про сервер
INFO
# Тільки пам'ять
INFO memory
# Тільки клієнти
INFO clients
# Статистика команд
INFO commandstats

Ключові метрики для моніторингу

Метрика Команда Критичний поріг
Використання RAM INFO memory > 80% maxmemory
Підключені клієнти INFO clients > 90% maxclients
Cache hit ratio INFO stats < 80%
Evicted keys INFO stats > 0 (потрібно більше RAM)
Blocked clients INFO clients > 0 тривалий час

Slow Log: знайти повільні команди

# redis.conf — логувати команди повільніше 10мс
slowlog-log-slower-than 10000
slowlog-max-len 128
# Переглянути slow log
redis-cli SLOWLOG GET 10

Redis Insight: GUI для моніторингу

Безкоштовний інструмент від Redis для візуального моніторингу, перегляду даних та налагодження.

Troubleshooting: типові проблеми з портами Redis

Connection refused

Redis не запущений або слухає інший порт/інтерфейс.

# Перевірте, чи Redis запущений
sudo systemctl status redis
# Перевірте, на якому порту слухає
sudo netstat -tlnp | grep redis
# Перевірте bind в конфігурації
grep "^bind" /etc/redis/redis.conf
DENIED Redis is running in protected mode

Redis відхиляє підключення з зовнішніх IP без пароля.

Рішення: Налаштуйте ACL або bind на конкретний IP.

NOAUTH Authentication required

Redis вимагає автентифікацію, але клієнт не передав пароль.

# Підключення з паролем
redis-cli -a 'your_password'
# Або з ACL username
redis-cli --user webapp --pass 'W3bAppP@ss'
Address already in use (порт зайнятий)

Інший процес вже використовує порт 6379.

# Знайти процес на порту
sudo lsof -i :6379
# Або
sudo fuser 6379/tcp
# Завершити процес
sudo kill -9 <PID>
Can't connect through firewall

Firewall блокує підключення до порту Redis.

# UFW статус
sudo ufw status verbose
# Дозволити порт
sudo ufw allow from 10.0.0.0/24 to any port 6379
# iptables перевірка
sudo iptables -L -n | grep 6379
TLS handshake failed

Проблема з сертифікатами або конфігурацією TLS.

# Перевірте сертифікати
openssl x509 -in /etc/redis/tls/redis.crt -text -noout
# Перевірте з'єднання
openssl s_client -connect localhost:6379
# Переконайтесь, що redis.conf має правильні шляхи
grep "tls-" /etc/redis/redis.conf

Production Checklist: Redis 2026

Використовуйте цей чеклист перед запуском Redis у production.

🔐 Безпека

  • bind налаштований на конкретні IP (не 0.0.0.0)
  • protected-mode yes
  • ☐ ACL налаштовані, default user вимкнено
  • ☐ TLS увімкнено для зовнішніх з'єднань
  • ☐ Firewall блокує порт 6379 ззовні
  • ☐ Небезпечні команди перейменовані або вимкнені
  • ☐ Паролі складні (мін. 32 символи)

💾 Пам'ять та persistence

  • maxmemory встановлено (не більше 70-80% RAM сервера)
  • maxmemory-policy налаштовано (volatile-lru для кешу)
  • ☐ RDB або AOF налаштовано для persistence
  • ☐ Backup-скрипт працює щодня

📊 Моніторинг

  • ☐ Алерти на використання пам'яті > 80%
  • ☐ Алерти на evicted keys > 0
  • ☐ Slow log увімкнено
  • ☐ Метрики експортуються в моніторинг систему

🚀 Продуктивність

  • tcp-keepalive 300
  • ☐ Connection pooling в клієнтах
  • ☐ Pipelining для batch операцій
  • ☐ Великі ключі розбиті (уникайте > 10MB значень)

🔄 High Availability

  • ☐ Replication налаштована (мін. 1 replica)
  • ☐ Sentinel або Cluster mode для автоматичного failover
  • ☐ Тест failover пройдено

✓ Порада: Пройдіться по цьому чеклісту для кожного нового Redis сервера. Пропущений пункт може коштувати даних або безпеки.

🚀 Готові обрати хостинг щоб Redis у вас працював ідеально?

Обирайте сервери з нашою техпідтримкою - стабільно, швидко й без зайвих клопотів. У Hostiserver — потужне обладнання та команда з глибокою експертизою, яка налаштує все правильно з першого разу.

💻 Cloud (VPS) Хостинг

  • Від $19.95/міс — Починайте малим, масштабуйте миттєво
  • KVM віртуалізація — Гарантовані ресурси без overselling
  • Миттєві апгрейди — Без простою
  • NVMe сховище — Швидка продуктивність
  • 24/7 підтримка — <10 хв відповідь

🖥️ Виділені Сервери

  • Від $200/міс — Сучасні конфігурації
  • Кастомні конфігурації — Intel або AMD, найсвіжіші моделі
  • Кілька локацій — EU + USA
  • 99.9% uptime — Надійність
  • DDoS захист — Включено
  • Безкоштовна міграція — Ми допоможемо
  • Private Cloud підтримка — Proxmox, VMware, OpenStack

💬 Не впевнені який варіант вам необхідний?
💬 Напишіть нам і ми зі всім допоможемо!

FAQ: Часті питання про порти Redis

Який порт використовує Redis за замовчуванням?

Redis використовує порт 6379 для клієнтських підключень. Додатково: 16379 для cluster bus (комунікація між нодами кластера) і 26379 для Sentinel (моніторинг та failover).

Чи безпечно залишати Redis на порту 6379?

Порт 6379 сам по собі не проблема. Проблема — відкритий доступ без автентифікації. Якщо у вас налаштовані ACL, TLS, firewall і bind на localhost або приватний IP — порт 6379 цілком безпечний.

Як змінити порт Redis?

Відредагуйте redis.conf, змініть значення port 6379 на бажане (наприклад, 6380), перезапустіть Redis і оновіть firewall та всі клієнтські підключення.

Чи потрібен TLS для Redis?

Обов'язково — якщо трафік йде через публічну мережу або між різними серверами. Опційно — якщо Redis і клієнт на одному сервері (localhost). Redis 6+ підтримує нативний TLS без stunnel.

Що краще: requirepass чи ACL?

ACL (Redis 6+) завжди краще. Він дозволяє створювати різних користувачів з різними правами — один для читання, інший для запису, третій для адміністрування. requirepass — один пароль для всіх, без гранулярного контролю.

Скільки Redis інстансів можна запустити на одному сервері?

Скільки завгодно, якщо вистачає RAM. Кожен інстанс потребує свого порту (6379, 6380, 6381...), конфігураційного файлу, PID-файлу та директорії для даних. Практично 3-5 інстансів на сервер — типова конфігурація.

Що робити, якщо Redis не запускається — "Address already in use"?

Порт вже зайнятий іншим процесом. Знайдіть його командою sudo lsof -i :6379 і або завершіть процес, або змініть порт Redis на інший.

Як дізнатись, на якому порту працює Redis?

Кілька способів:

  • redis-cli INFO server | grep tcp_port
  • sudo netstat -tlnp | grep redis
  • grep "^port" /etc/redis/redis.conf

Contents

VPS з підтримкою від

$19 95 / міс

Виділені сервери від

$80 / міс

CDN починаючи від

$0 / міс

 

Користуючись цим сайтом, ви погоджуєтеся на використання файлів cookies відповідно до нашої Політики Конфіденційності.