⏱️ Doba čtení: ~10 minut | 📅 Aktualizováno: 7. prosince 2025
Redis zpracovává miliony požadavků za sekundu, ukládá uživatelské relace, cachuje data pro okamžitý přístup. Ale je tu problém: ve výchozím nastavení Redis naslouchá na portu 6379 bez jakékoli autentizace. Hackeři to vědí a skenují internet 24/7.
V roce 2025 bylo přibližně 40 000 Redis serverů veřejně přístupných bez hesla. Výsledek — ukradená data, kryptominery na serverech, zničené databáze. A to vše kvůli špatně nastavenému portu.
Tento průvodce je o tom, jak správně nakonfigurovat porty Redis v roce 2026: od základní konfigurace po produkční zabezpečení s ACL a TLS. Ať už provozujete Redis na VPS nebo dedikovaném serveru, tyto znalosti ochrání vaše data.
Redis (Remote Dictionary Server) je in-memory databáze, která ukládá vše do operační paměti. Zatímco tradiční databáze čtou z disku za 10-15 milisekund, Redis dodává data za mikrosekundy.
Tradiční databáze ukládají data na disk a čtou je při každém požadavku. Redis drží vše v operační paměti — odtud ta rychlost. Disk se používá pouze pro persistenci (uložení dat při restartu).
Klienti (váš web, aplikace, API) se připojují k Redis přes síťový port. Ve výchozím nastavení je to port 6379. Server neustále naslouchá na tomto portu, připraven přijímat příkazy: uložit klíč, získat hodnotu, přidat prvek do seznamu.
Redis 8 je největší aktualizace v historii:
Redis používá několik portů pro různé funkce. Pochopení každého z nich je klíčem ke správné konfiguraci.
| Port | Účel | Kdy se používá |
|---|---|---|
| 6379 | Hlavní port Redis | Všechna klientská připojení |
| 16379 | Cluster Bus | Komunikace mezi uzly clusteru |
| 26379 | Redis Sentinel | Monitoring a automatický failover |
| Vlastní | Vaše volba (6380, 6381...) | Více instancí na jednom serveru |
Toto je standardní port, který zná každá klientská knihovna — Python redis-py, Node.js ioredis, PHP Predis. Když napíšete redis.connect() bez parametrů, připojení jde právě sem.
Problém: 6379 je první port, který hackeři skenují. Shodan ukazuje desítky tisíc otevřených Redis serverů denně.
Když Redis běží v režimu clusteru, uzly mezi sebou komunikují přes port 16379 (hlavní port + 10000). Jedná se o interní protokol pro synchronizaci dat a distribuci slotů.
Důležité: Tento port by nikdy neměl být přístupný z internetu — pouze mezi uzly clusteru.
Redis Sentinel zajišťuje High Availability — monitoruje master uzel a automaticky přepne na repliku, pokud master selže. Sentinel naslouchá na portu 26379 pro koordinaci s ostatními Sentinel instancemi.
Nechráněný Redis není otázkou "jestli ho napadnou", ale "kdy". Zde je to, co potřebujete nakonfigurovat.
Ve výchozím nastavení může Redis naslouchat na všech síťových rozhraních. To je nebezpečné.
# redis.conf — naslouchat pouze na localhost
bind 127.0.0.1
# Nebo konkrétní privátní IP
bind 127.0.0.1 10.0.0.5
# NEBEZPEČNÉ — naslouchat na všem
# bind 0.0.0.0
Redis 3.2+ má protected mode — pokud není heslo a bind není nastaven, server odmítne externí připojení.
# redis.conf — vždy povoleno
protected-mode yes
Starý requirepass je jedno heslo pro všechny. ACL (Access Control Lists) od Redis 6+ umožňuje vytvářet uživatele s různými oprávněními.
# redis.conf — vytváření uživatelů s ACL
# Zakázat výchozího uživatele bez hesla
user default off
# Admin s plným přístupem
user admin on >SuperStr0ngP@ssw0rd ~* +@all
# Uživatel pouze pro čtení
user readonly on >R3adOnlyP@ss ~cached:* +@read -@dangerous
# Uživatel pro aplikaci — omezené příkazy
user webapp on >W3bAppP@ss ~session:* ~cache:* +get +set +del +expire
Vysvětlení syntaxe ACL:
on/off — aktivovat/deaktivovat uživatele>password — nastavit heslo~pattern — přístup ke klíčům podle vzoru+command — povolit příkaz-@category — zakázat kategorii příkazůRedis 6+ podporuje nativní TLS. Povinné pro produkci, zejména pokud provoz jde přes síť.
# redis.conf — konfigurace TLS
# Použít TLS na portu 6379, zakázat nešifrované
tls-port 6379
port 0
# Certifikáty
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
# Vyžadovat klientské certifikáty (volitelné, ale doporučené)
tls-auth-clients yes
# Minimální verze TLS
tls-protocols "TLSv1.2 TLSv1.3"
I se všemi nastaveními Redis je firewall povinný.
# UFW — povolit Redis pouze z konkrétních IP
sudo ufw allow from 10.0.0.0/24 to any port 6379
sudo ufw deny 6379
# iptables — totéž
iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
Některé příkazy mohou zničit data nebo kompromitovat server.
# redis.conf — ochrana nebezpečných příkazů
# Úplně zakázat
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""
# Nebo přejmenovat na něco složitého
rename-command CONFIG "CONFIG_b4ckd00r_pr0t3ct"
rename-command SHUTDOWN "SHUTDOWN_s3cur3_2026"
⚠️ Varování: Po přejmenování příkazů mohou některé monitorovací nástroje přestat fungovat. Testujte ve staging prostředí.
Změna standardního portu 6379 na vlastní je jedním ze způsobů, jak zkomplikovat automatizované útoky. Nenahrazuje to ostatní bezpečnostní opatření, ale přidává další úroveň ochrany.
# Typická umístění
/etc/redis/redis.conf # Debian/Ubuntu
/etc/redis.conf # CentOS/RHEL
/usr/local/etc/redis.conf # macOS (Homebrew)
# Najít soubor
sudo find / -name redis.conf 2>/dev/null
# Otevřete soubor
sudo nano /etc/redis/redis.conf
# Najděte řádek (přibližně řádek 98)
port 6379
# Změňte na nový port
port 6380
# 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
# Systemd
sudo systemctl restart redis
# Nebo
sudo service redis-server restart
# Připojení přes nový port
redis-cli -p 6380 ping
# Očekávaná odpověď: PONG
# Kontrola, že server naslouchá
sudo netstat -tlnp | grep redis
# tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 1234/redis-server
Nezapomeňte aktualizovat připojení ve všech aplikacích!
# 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 });
Často je potřeba oddělit Redis pro různé úkoly: jeden pro cache, další pro session, třetí pro fronty. Každá instance běží na svém portu.
# Zkopírujte konfiguraci pro každou instanci
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
# /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
# Aktivace služeb
sudo systemctl daemon-reload
sudo systemctl enable redis-cache redis-session redis-queue
sudo systemctl start redis-cache redis-session redis-queue
# Ověření
sudo systemctl status redis-cache
redis-cli -p 6379 ping # cache
redis-cli -p 6380 ping # session
redis-cli -p 6381 ping # queue
| Instance | Port | Účel | Doporučená RAM |
|---|---|---|---|
| redis-cache | 6379 | Cache stránek, API odpovědí | 2-8 GB |
| redis-session | 6380 | Uživatelské session | 1-4 GB |
| redis-queue | 6381 | Fronty úloh (Celery, Bull) | 1-2 GB |
Redis už dávno přerostl jednoduché cachování. Zde je, k čemu se používá.
Ukládání výsledků náročných dotazů, API odpovědí, vyrenderovaných stránek. Snižuje zatížení hlavní databáze o 70-90%.
# Python příklad cachování
import redis
import json
r = redis.Redis(host='localhost', port=6379)
def get_user(user_id):
# Pokus o získání z cache
cached = r.get(f"user:{user_id}")
if cached:
return json.loads(cached)
# Pokud není — dotaz do databáze (použijte parametrizované dotazy!)
user = db.query("SELECT * FROM users WHERE id = %s", (user_id,))
# Uložit do cache na 1 hodinu
r.setex(f"user:{user_id}", 3600, json.dumps(user))
return user
100x rychlejší než file-based session. Ideální pro distribuované systémy s více servery.
Omezení počtu požadavků — ochrana API před zneužitím.
# Rate limiter: 100 požadavků za minutu
def is_rate_limited(user_ip):
key = f"rate:{user_ip}"
current = r.incr(key)
if current == 1:
r.expire(key, 60) # TTL 60 sekund
return current > 100
Sorted Sets — ideální struktura pro žebříčky s okamžitou aktualizací.
# Aktualizovat skóre hráče
r.zadd("leaderboard:game1", {"player123": 5000})
# Top 10 hráčů
top10 = r.zrevrange("leaderboard:game1", 0, 9, withscores=True)
# Pozice konkrétního hráče
rank = r.zrevrank("leaderboard:game1", "player123")
Real-time komunikace mezi službami, chaty, notifikace.
Nový trend 2025-2026 — Redis jako vektorová databáze pro AI aplikace.
# Semantic caching pro LLM
# Místo přesné shody — hledání sémanticky podobných dotazů
# Úspora až 30% na volání API OpenAI/Claude
# Vector Sets v Redis 8 (syntaxe se může měnit)
VADD embeddings doc1 VECTOR [0.1, 0.2, 0.3, ...]
VSIM embeddings VECTOR [0.15, 0.22, 0.28, ...] COUNT 5
Hledání nejbližších objektů — restaurace, taxi, obchody.
# Přidat lokaci
r.geoadd("restaurants", 30.5234, 50.4501, "restaurant:1")
# Najít restaurace v okruhu 5 km
nearby = r.georadius("restaurants", 30.52, 50.45, 5, unit="km")
Příklady připojení pro populární programovací jazyky.
import redis
# Základní připojení
r = redis.Redis(host='localhost', port=6379, db=0)
# S heslem (ACL)
r = redis.Redis(
host='localhost',
port=6379,
username='webapp',
password='W3bAppP@ss'
)
# S 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 (doporučeno pro produkci)
pool = redis.ConnectionPool(
host='localhost',
port=6379,
max_connections=50
)
r = redis.Redis(connection_pool=pool)
// Predis
$client = new Predis\Client([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379,
'password' => 'your_password'
]);
// S TLS
$client = new Predis\Client([
'scheme' => 'tls',
'host' => 'redis.example.com',
'port' => 6379,
'ssl' => ['verify_peer' => true]
]);
// phpredis extension (rychlejší)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth(['webapp', 'W3bAppP@ss']); // ACL username + password
const Redis = require('ioredis');
// Základní připojení
const redis = new Redis({
host: 'localhost',
port: 6379
});
// S ACL
const redis = new Redis({
host: 'localhost',
port: 6379,
username: 'webapp',
password: 'W3bAppP@ss'
});
// S 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 }
]);
import "github.com/redis/go-redis/v9"
// Základní připojení
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Username: "webapp",
Password: "W3bAppP@ss",
DB: 0,
})
// S TLS
rdb := redis.NewClient(&redis.Options{
Addr: "redis.example.com:6379",
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
},
})
# Připojení
redis-cli -h localhost -p 6379
# Kontrola spojení
PING
# Odpověď: PONG
# Úplné informace o serveru
INFO
# Pouze paměť
INFO memory
# Pouze klienti
INFO clients
# Statistiky příkazů
INFO commandstats
| Metrika | Příkaz | Kritický práh |
|---|---|---|
| Využití RAM | INFO memory |
> 80% maxmemory |
| Připojení klienti | INFO clients |
> 90% maxclients |
| Cache hit ratio | INFO stats |
< 80% |
| Evicted keys | INFO stats |
> 0 (potřeba více RAM) |
| Blocked clients | INFO clients |
> 0 delší dobu |
# redis.conf — logovat příkazy pomalejší než 10ms
slowlog-log-slower-than 10000
slowlog-max-len 128
# Zobrazit slow log
redis-cli SLOWLOG GET 10
Bezplatný nástroj od Redis pro vizuální monitoring, prohlížení dat a ladění.
Redis neběží nebo naslouchá na jiném portu/rozhraní.
# Zkontrolujte, zda Redis běží
sudo systemctl status redis
# Zkontrolujte, na kterém portu naslouchá
sudo netstat -tlnp | grep redis
# Zkontrolujte bind v konfiguraci
grep "^bind" /etc/redis/redis.conf
Redis odmítá připojení z externích IP bez hesla.
Řešení: Nakonfigurujte ACL nebo bind na konkrétní IP.
Redis vyžaduje autentizaci, ale klient nepředal heslo.
# Připojení s heslem
redis-cli -a 'your_password'
# Nebo s ACL username
redis-cli --user webapp --pass 'W3bAppP@ss'
Jiný proces již používá port 6379.
# Najít proces na portu
sudo lsof -i :6379
# Nebo
sudo fuser 6379/tcp
# Ukončit proces
sudo kill -9 <PID>
Firewall blokuje připojení k portu Redis.
# UFW status
sudo ufw status verbose
# Povolit port
sudo ufw allow from 10.0.0.0/24 to any port 6379
# iptables kontrola
sudo iptables -L -n | grep 6379
Problém s certifikáty nebo konfigurací TLS.
# Zkontrolujte certifikáty
openssl x509 -in /etc/redis/tls/redis.crt -text -noout
# Zkontrolujte připojení
openssl s_client -connect localhost:6379
# Ujistěte se, že redis.conf má správné cesty
grep "tls-" /etc/redis/redis.conf
Použijte tento checklist před nasazením Redis do produkce.
bind nastaven na konkrétní IP (ne 0.0.0.0)protected-mode yesmaxmemory nastaveno (ne více než 70-80% RAM serveru)maxmemory-policy nakonfigurováno (volatile-lru pro cache)tcp-keepalive 300✓ Tip: Projděte tento checklist pro každý nový Redis server. Vynechaný bod může stát data nebo bezpečnost.
Vyberte si servery s naší technickou podporou — stabilní, rychlé a bez starostí. V Hostiserver — výkonný hardware a tým s hlubokou expertízou, který vše nastaví správně napoprvé.
💬 Nejste si jisti, kterou variantu potřebujete?
💬 Napište nám a se vším pomůžeme!
Redis používá port 6379 pro klientská připojení. Navíc: 16379 pro cluster bus (komunikace mezi uzly clusteru) a 26379 pro Sentinel (monitoring a failover).
Port 6379 sám o sobě není problém. Problém je otevřený přístup bez autentizace. Pokud máte nakonfigurované ACL, TLS, firewall a bind na localhost nebo privátní IP — port 6379 je zcela bezpečný.
Upravte redis.conf, změňte hodnotu port 6379 na požadovanou (například 6380), restartujte Redis a aktualizujte firewall a všechna klientská připojení.
Povinné — pokud provoz jde přes veřejnou síť nebo mezi různými servery. Volitelné — pokud Redis a klient jsou na stejném serveru (localhost). Redis 6+ podporuje nativní TLS bez stunnel.
ACL (Redis 6+) je vždy lepší. Umožňuje vytvářet různé uživatele s různými oprávněními — jeden pro čtení, další pro zápis, třetí pro administraci. requirepass je jedno heslo pro všechny, bez granulární kontroly.
Kolik chcete, pokud máte dostatek RAM. Každá instance potřebuje svůj port (6379, 6380, 6381...), konfigurační soubor, PID soubor a datový adresář. Prakticky 3-5 instancí na server je typická konfigurace.
Port je již obsazen jiným procesem. Najděte ho příkazem sudo lsof -i :6379 a buď proces ukončete, nebo změňte Redis na jiný port.
Několik způsobů:
redis-cli INFO server | grep tcp_portsudo netstat -tlnp | grep redisgrep "^port" /etc/redis/redis.conf