Redis Güvenlik Sıkılaştırmaları

İshak AKDAŞ
Coreborn
Published in
4 min readApr 5, 2022

Redis’in ne olduğunu ve nasıl daha güvenli kullanabileceğimiz sorusunun cevabını burada bulabilirsiniz.

Redis Nedir ?

Redis (Remote Dictionary Service), C ile yazılmış, geliştiriciler tarafından en çok kullanılan ve bilinen NoSQL veritabanlarından birisidir. Tüm NoSQL veritabanları gibi gibi get ve set şeklinde çalışır. Kaydedilecek bilgi string, int, bool dışında list, map, set gibi tiplerde de kaydedilebilir.

C dili ile yazıldığı için yüksek performanslı sonuçlar vermektedir. Linux ve türevi işletim sistemleri tarafından desteklenmekte fakat Windows tarafı için resmi bir destek olmasa da community tarafından desteklenmektedir.

Redisin rakiplerine göre daha çok tercih edilmesinin bir nedeni de verileri kaydetme şekli. Redis veri okuma ve yazma işlemini RAM üzerinde yapar. Buda Rakiplerine nazaran çok daha hızlı çalışmasına olanak sağlar. Ancak bunu negatif bir özellik olarak düşünmeyelim çünkü belirli aralıklarla diske kaydetmesini de sağlayabilirsiniz.

Avantajları

  • Senkron çalıştığı için son derece hızlıdır.
  • Birçok veri türünü destekler.
  • Veriyi hem RAM üzerine hem de ayarlandığınız konfigürasyona göre disk üzerine kaydedebilir.
  • Disk üzerine kayıt yaptığı için restart sonrasında aynı verilerle çalışmaya devam eder.
  • Sharding, Cluster, Sentinel, Replication gibi birçok enterprise özelliklere sahiptir

Dezavantajları

  • Asenkron çalışmadığı için tek instance üzerinde, asenkron alternatiflerin eriştiği performansa erişemeyebilirsiniz.
  • Veri boyutunuza göre RAM’e ihtiyacınız olur.
  • Relational veritabanlarında olduğu gibi komplex sorguları desteklemez.
  • Bir transaction hata alırsa geri dönüşü yoktur.

Kullanım Senaryoları

Caching

Verileri ön belleğe almayı genellikle , okuma ve yazma isteklerini geleneksel veri tabanları ile karşılayamayacak hale gelindiğinde veya uygulama performansı düştüğünde , tercih ederiz. Bu noktadaki temel mantığımız arka uçtaki veri tabanımızın veya uygulamamızın yükünü hafifleterek verilere ön bellekten daha maliyetsiz ve hızlı olarak ulaşmaktır.

Bazı Redis caching örnekleri:

  • Veritabanı sorgusu sonuçlarını ön belleğe alma,
  • Kalıcı oturumları ön belleğe alma,
  • Resimler, dosyalar ve meta veriler gibi sık kullanılan nesneleri ön belleğe alma

Session Store

Uygulamalarımızda gerek oturum bilgileri için gerekse de başka verilerimizi tutmak için sessionları oldukça yoğun kullanıyoruz.Bu noktada da Redis oturumlarımızı saklamak için iyi ve popüler bir alternatif olarak karşımıza çıkıyor.Redis ile kullanıcı profilleri, kimlik bilgileri, kullanıcıya özgü veriler vb. gibi session verilerini mili saniyelere varan hızlarda okuyabilmenize olanak sağlar.

Pub/Sub

Pub/sub client’ların birbirlerinin yayınladıkları bilgilere ulaşmaları için kullanılan bir yöntemdir. Bir client belirli kanallara üye olup, bu kanallara mesaj gönderebilir. Bu kanallara üye olan clientlar da gönderilen mesajlara ulaşabilir veya client başka client’ın mesajlarına ulaşabilir. Aktif üyelikleri bulunduğu sürece her client bildirimleri almaya devam eder.

Güvenlik Sıkılaştırmaları

Redis üzerinde yapılacak sıkılaştırmalar genel olarak redis.conf dosyasında yapılmakta.

Redis Portunu Değiştirme

Rediste kullanılan default port 6379. Yapılacak herhangi bir saldırı denemesinde hedef alınacak port bu olacağı için port değiştirilmeli.

redis-server — port 6380
Ya da

sudo nano /etc/redis/redis.conf

Şeklinde değiştirilebilir.

Redis giriş şifresini belirleme

Redis kurulduğunda default olarak şifre belirlenmez. Kurulum esnasında ya da daha sonra opsiyonel olarak değiştirilebilir.

config dosyasında # requirepass foobared satırının başındaki # simgesini kaldırıp foobared yerine bir şifre bilreyebilirsiniz. 32 karaktere kadar bir şifre belirleyebilirsiniz(Dışarıdan bir kullanıcının saniyede 150 binden fazla şifre denemesi yapabilir).

Utilize iptables

Linux’ta kullanılan bu güvenlik duvarı, yetkisiz girişleri engelleyecektir. Varsayılan olarak Redis, 6379 numaralı bağlantı noktası üzerinden bağlantıları kabul eder . Güvenliği en üst düzeye çıkarmak için iptables’ı yalnızca doğrulanmış IP adreslerinden gelen bağlantıları kabul edecek şekilde güncelleyebiliriz. Kaba haliyle iptables -A INPUT -s x.x.x.x -p tcp — dport 6379 -j ACCEPT şeklinde kullanılabilir. Redis bir veritabanı uygulaması olduğu için tek başına bizi koruyamaz. Dolayısıyla Kurulu işletim sisteminde gerekli tüm sıkılaştırmaları yapmanızı öneririm.

Kritik Komutları Yeniden Adlandırma

Rediste başkaları tarafından kullanılması kritik bazı komutlar bulunmakta. Kötü niyetli bir kullanıcı bunları kullanarak uygulamanıza zarar verebilir. digitalocean.com’a göre bu komutlar şunlardır: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME ve DEBUG

Sizin için önemli başka komutlar varsa yine listeye ekleyebilirsiniz. Bunları yine değişiklikleri yapacağımız redis.conf dosyasında yapacağız.

Umarım sizin içinde faydalı olmuştur.

Herkese iyi çalışmalar, hatasız kodlar dilerim.

--

--