Redis, veritabanı sunucusu, önbellek ve mesaj aracısı olarak kullanılabilen güçlü bir bellek içi anahtar-değer deposudur. Hızlı performansı, esnekliği ve çok çeşitli dilleri desteklemesiyle yaygın olarak bilinir. C programlama dilinde yazılmış ücretsiz ve açık kaynaklı bir yazılımdır.C programlama dili. Bu kılavuzda, Ubuntu 18.04 üzerinde Redis'in nasıl kurulacağını ve güvenli hale getirileceğini inceleyin.
Önkoşullar
Bu kılavuzu takip edebilmek için önceden birkaç şey hazırlamanız gerekecektir. Kolayca kurabileceğiniz bir Ubuntu 18.04 sunucusuna ihtiyacınız var, bunu eğitimimizi takip ederek kolayca kurabilirsiniz. Ek olarak, sudo yetkilerine sahip root olmayan bir kullanıcıya ve temel bir güvenlik duvarı yapılandırmasına ihtiyacınız vardır. Bunu, Linux sudoers dosyasını yapılandırma ve Ubuntu ve Debian bulut sunucusunda UFW kurulumu kılavuzlarımızı takip ederek ayarlayabilirsiniz.
Şimdi başlayalım!
Redis Kurulumu
Redis, doğrudan resmi Ubuntu deposundan edinilebilir. Bu, kurulum ve yapılandırma için en basit yoldur. Aksini gerektiren özel nedenler olmadıkça bu yolu izlemenizi öneririz. Redis kaynak kodu ücretsiz olarak sunulduğundan, Redis'i kaynak kodundan derlemek de mümkündür. Ancak, yönetimi ve güncellenmesi daha zahmetli olduğu için bunu önermiyoruz.
Redis'i Ubuntu deposundan kurun
İlk olarak, yerel APT paket önbelleğini güncelleyin:
|
1 |
sudo apt update |
Ardından, aşağıdaki komutla Redis'i kurun:
|
1 |
sudo apt install redis-server |
Redis'i kaynak kodundan kurun
Ubuntu varsayılan olarak derleme araçları ve gerekli kütüphanelerle birlikte gelmez. Aşağıdaki komut, Redis'i derlemek için gerekli tüm araçları kuracaktır:
|
1 |
sudo apt install git build-essential |
Redis'i derlemek için iki ek bağımlılık daha vardır. Bu bağımlılıklar, Redis'i TLS desteği, systemd entegrasyonu vb. gibi ek özelliklerle derlemek için gereklidir. Redis'i TLS desteğiyle derlemek için “libssl-dev” paketini kurun. Redis'i systemd desteğiyle derlemek için “libsystemd-dev” paketini kurun:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Redis kaynak kodu GitHub'da mevcuttur. Redis GitHub sayfasına göz atın. Ardından, kaynak kodu indirin:
|
1 |
git clone https://github.com/redis/redis.git |
Mevcut aktif dizini Redis kaynak kodu dizini olarak değiştirin:
|
1 |
cd redis/ |
Bundan sonra, derlemeyi başlatmak için make aracını çalıştırın. Redis'i herhangi bir ek öğe olmadan derleyecektir:
|
1 |
make -j$(nproc) |
TLS desteğini etkinleştirmek için (“libssl-dev” paketinin kurulu olduğunu varsayarak), bunun yerine aşağıdaki komutu kullanın:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
systemd desteğini etkinleştirmek için (“libsystemd-dev” paketinin kurulu olduğunu varsayarak), aşağıdaki komutu kullanın:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Ardından, derlemenin başarılı olup olmadığını test edin. Testi çalıştırmak için ek bir “tcl-dev” paketinin ve ilişkili bağımlılıkların gerekebileceğini unutmayın:
|
1 |
make test |
Son olarak, aşağıdaki komutu çalıştırarak Redis'i kurun:
|
1 |
sudo make install |
Redis TLS kullanılarak derlendiyse, sunucuyu çalıştırmak aşağıdaki şekilde yapılmalıdır:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Redis'i Yapılandırma
Kurulum tamamlandıktan sonra, Redis'i yapılandırma zamanı gelmiştir. Bir metin düzenleyicide Redis yapılandırma dosyasını açın ve “supervised” bölümüne gidin:
|
1 |
sudo vim /etc/redis/redis.conf |
“supervised” değerini “systemd” olarak değiştirin. Bu, Redis servisinin systemd tarafından yönetilmesini sağlayacaktır. Değişikliklerin geçerli olması için Redis servisini yeniden başlatın:
|
1 |
sudo systemctl restart redis.service |
Redis'i Test Etme
Redis'i daha fazla kullanmadan önce düzgün çalışıp çalışmadığını test etmek her zaman iyi bir fikirdir. İşte Redis davranışını test etmenin birkaç yolu. İlk adım, Redis servisinin çalışır durumda olup olmadığını kontrol etmektir:
|
1 |
sudo systemctl status redis |
Burada, Redis zaten çalışıyor. Varsayılan olarak, Redis servisi sistem açılışında çalışmaya başlayacaktır. Redis servisinin manuel olarak çalıştırılması gerekiyorsa, devre dışı bırakın:
|
1 |
sudo systemctl disable redis |
Bir sonraki test, Redis konsolunu kullanarak kontrol etmektir. Redis komut satırı istemcisini başlatın:
|
1 |
redis-cli |
“ping” komutunu çalıştırın:
|
1 |
ping |
Çıktı, sunucuyla olan bağlantının hala aktif olduğunu doğrular. Bir sonraki test, anahtar ayarlanmasına izin verip vermediğini görmektir. “hello world” değerine sahip bir “temp” anahtarı oluşturun:
|
1 |
set temp “hello world” |
“get” komutunu kullanarak değeri alın:
|
1 |
get temp |
Şimdiye kadar her şey düzgün çalışıyorsa, Redis anahtar değerini sorunsuz bir şekilde döndürmelidir. Redis komut satırı istemcisini kapatın:
|
1 |
exit |
Son test, Redis'in durdurulsa veya yeniden başlatılsa bile verileri kalıcı hale getirip getiremediğini kontrol etmektir. Redis servisini yeniden başlatın:
|
1 |
sudo systemctl restart redis |
Yukarıdaki komutu çalıştırırken bir hata alırsanız, “systemctl enable redis-server” komutunu kullanın:
|
1 |
sudo systemctl enable redis-server |
Redis komut satırı istemcisini başlatın ve daha önce oluşturduğumuz “temp” anahtarının değerini alın:
|
1 2 |
redis-cli get temp |
Bu, Redis testini sonlandırır. Redis sunucunuz artık istenen amaç için kullanılmaya hazırdır.
Redis'i Güvenli Hale Getirme
Bu noktada, Redis tamamen çalışır durumdadır. Ancak, varsayılan yapılandırmalarından bazıları en iyi güvenliği sunmaz. Güncellenmezse, herhangi bir kötü niyetli aktör sunucuya ve verilerine erişim sağlamak için bu fırsattan yararlanabilir. Bu bölüm, bu güvenlik açıklarının nasıl azaltılacağını gösterecektir. Bu adımlar isteğe bağlı olsa da, sistem güvenliğini artırmak için bunları uygulamanız şiddetle önerilir.
Localhost'a Bağlama
Varsayılan olarak, Redis'e yalnızca localhost'tan erişilebilir. Ancak, Redis uzak bir sunucuda yapılandırılmışsa, her yerden bağlantıya izin vermek için yapılandırmanın güncellenmesi gerekir. Yine de bu, localhost'a bağlamak kadar güvenli olmayabilir. Redis'i tekrar localhost'a bağlamak için Redis yapılandırma dosyasını bir metin düzenleyicide açın:
|
1 |
sudo vim /etc/redis/redis.conf |
Aşağı kaydırın ve aşağıdakini bulun. Yorum satırı olmadığından emin olun:
|
1 |
bind 127.0.0.1 ::1 |
Dosyayı kaydedip kapatın. Ardından, değişikliğin hemen etkili olmasını sağlamak için Redis servisini yeniden başlatın:
|
1 |
sudo systemctl restart redis |
Değişikliğin başarılı olduğunu doğrulayın:
|
1 |
sudo netstat -lnp | grep redis |
Eğer ‘netstat: command not found’ hatası alırsanız, net-tools yüklemek için “sudo apt-get install net-tools” komutunu kullanın. Çıktı, “redis-server”ın localhost'a (127.0.0.1) başarıyla bağlandığını doğrular ve yeni yapılan değişikliği yansıtır. Başka bir IP adresi varsa (örneğin, 0.0.0.0), yapılandırma dosyasını tekrar kontrol edin ve Redis sunucusunu yeniden başlatın.
Redis Parolasını Yapılandırma
Bir parola yapılandırmak, Redis'in yerleşik bir güvenlik özelliği olan “AUTH” komutunun kullanılmasını sağlar. İstemcilerin veritabanına erişmek için kimlik doğrulaması yapmasını gerektirir. Varsayılan olarak, Redis'te yapılandırılmış bir parola yoktur. Parolanın Redis yapılandırma dosyasında tanımlanması gerekir. Yapılandırma dosyasını bir metin düzenleyicide açın:
|
1 |
sudo vim /etc/redis/redis.conf |
Ardından, aşağıdaki satıra kaydırın ve yorum işaretini kaldırın:
|
1 |
requirepass foobared |
Yorum işaretini kaldırdıktan sonra, varsayılan parola “foobared” olacaktır. Bunu kendi seçtiğiniz bir parolayla değiştirin. Redis söz konusu olduğunda, parola gücü büyük bir endişe kaynağıdır. Redis yüksek performanslı bir sunucu olduğundan, kaba kuvvet (brute-force) saldırıları kullanılarak istismar edilmesi potansiyel olarak daha kolaydır. Bu nedenle yapılandırma dosyası doğrudan aşağıdaki uyarıyı içerir. İşte çok güçlü bir rastgele parola oluşturmaya dair hızlı bir örnek. Rastgele bir dize oluşturmak için OpenSSL komutunu kullanacağız:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Yeni bir şifre yapılandırdıktan sonra, değişikliklerin geçerli olması için Redis servisini yeniden başlatın:
|
1 |
sudo systemctl restart redis.service |
Şifrenin başarıyla uygulanıp uygulanmadığını test etme zamanı. Redis komut satırı konsolunu başlatın:
|
1 |
redis-cli |
Ardından, yeni bir anahtar ayarlamayı deneyin:
|
1 |
set user “cloudsigma” |
Redis, işlem için kimlik doğrulaması olmadığından isteği reddedecektir. Sunucuda herhangi bir işlem gerçekleştirmek için öncelikle kullanıcının yetkilendirilmesi gerekir. Aşağıdaki komutu kullanarak kullanıcıyı yetkilendirin:
|
1 |
auth <şifre> |
Şifre doğruysa, Redis işlemi onaylayacaktır. Artık Redis, sunucu işlevlerine erişime izin verecektir:
|
1 2 |
set user “cloudsigma” get user |
Şimdilik Redis konsolu ile işimiz bitti. Konsolu kapatabilirsiniz:
|
1 |
exit |
Tehlikeli komutları yeniden adlandırma
Redis, tehlikeli olarak kabul edilen belirli komutların yeniden adlandırılmasına veya tamamen devre dışı bırakılmasına izin verir. Bu, Redis'in bir diğer önemli yerleşik güvenlik özelliğidir. Komutlar neden tehlikeli kabul edilir? Yetkisiz bir kullanıcı tarafından çalıştırılırsa, bu komutlar sunucudaki verileri yeniden yapılandırabilir, yok edebilir veya silebilir. Bir dizi tehlikeli Redis komutunu devre dışı bırakmak/yeniden adlandırmak yaygın bir uygulamadır. Bir komutun oluşturduğu güvenlik tehdidinin duruma bağlı olduğunu unutmayın. Örneğin, aşağıdaki komutlardan bazıları düzenli olarak gerekli olabilir. Bu gibi durumlarda, bunları devre dışı bırakmak önerilmez. Böyle bir durumda, komutu yeniden adlandırmak daha faydalı olabilir. İşte tehlikeli kabul edilen komutların hızlı bir listesi. Bu, Redis sunucusunun güvenliğini artırmak için iyi bir başlangıç noktasıdır:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Bir komutu yeniden adlandırmak veya devre dışı bırakmak için bunun Redis yapılandırma dosyasında bildirilmesi gerekir. Redis yapılandırma dosyasını açın ve aşağıdaki satırları ekleyin. Burada, komutları boş bir dizeye yeniden adlandırmak için “rename-command” kullanılır. Gerektiği kadar giriş ekleyin:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Benzer şekilde, komutları farklı bir adla yeniden adlandırmak da mümkündür. Belirli durumlarda bu daha fazla esneklik sağlayabilir:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Dosyayı kaydedin ve düzenleyiciden çıkın. Değişikliklerin geçerli olması için Redis servisini yeniden başlatın:
|
1 |
sudo systemctl restart redis.service |
Değişiklikleri doğrulayın. Ardından, Redis konsolunu başlatın ve erişim yetkisini doğrulayın:
|
1 2 |
redis-cli auth <şifre> |
“CONFIG” komutunun devre dışı bırakıldığını veya yeniden adlandırıldığını varsayalım. Aşağıdaki “CONFIG” komutunu kullanmayı deneyin. Başarısız olacaktır:
|
1 |
config get requirepass |
Komut devre dışı bırakıldıysa, yeniden etkinleştirilene kadar erişilemez. Ancak yeniden adlandırıldıysa, yeni takma adı kullanın:
|
1 |
command_4 get requirepass |
Sonuç
Bu eğitim, bir Redis kurulumunun nasıl kurulacağını, güvenli hale getirileceğini, yapılandırılacağını ve doğrulanacağını göstermektedir. Ayrıca, Redis'i saldırılara karşı daha az savunmasız hale getirmek için yerleşik güvenlik özelliklerinin nasıl kullanılacağını da gösterir. Ancak, birisi sunucuda zaten oturum açmışsa, Redis'e özgü güvenlik özelliklerini atlatmak oldukça kolaydır. Bu nedenle, Redis sunucusuna erişimi korumak için bir güvenlik duvarına sahip olmak çok önemlidir.
Keyifli kullanımlar!






Yorumlar
Henüz yorum yapılmamış. İlk siz olun.