Firmalar, verilerini güvenli bir şekilde işlemek için sistemlerinde çeşitli güvenlik önlemleri alırlar. Couchbase veritabanında alınacak güvenlik önlemlerinden biriside sunucular arasında veri şifrelemedir. Couchbase Server 6.5 versiyonu ile beraber gelen node-to-node encryption özelliği ile couchbase üzerinde node’lar arasında verilerinizi daha güvenli bir şekilde barındırabilirsiniz. Bu yazıda node-to-node encryption’ı anlatacağım. Ek olarak, eğer daha önceden node-to-node encryption yaptıysanız ve sertifikaları yenilemek istiyorsanız gerekli bakım ve sertifika yenileme operasyonunu anlatacağım.
Couchbase Server üzerinden veriler cluster metada, settings vs. ve JSON dökümanları içerisinde barınan user data olarak ikiye ayrılır.
Couchbase’in önceki sürümlerinde data encryption XDCR ile yapılabiliyordu. 6.5 ve sonraki sürümlerinde ise node-to-node encryption özelliği eklendi. Couchbase Server özelliği olan node-to-node encryption’ı third parti bir yazılım kullanmadan kullanabilirsiniz. Bu, node’lar arasındaki veri trafiğini şifreleyerek, kurumunuzun verilerini daha güvenli bir halde işleyebileğiniz anlamına geliyor.
Node-to-Node Encryption Kurulumu
Node-to-Node Encryption kurulumu arayüzden veya CLI kullanarak oldukça basit bir şekilde yapılabilir. Adım adım bu işlemleri örnekler ile göstermek istiyorum.
1. Örnek olarak 2 node’a Couchbase Server 6.5 kuralım.
2. Enable Cluster Encryption checkbox’ına tıklayalım.
Bu özellik yanlızca cluster’da ki tüm node’lar 6.5 ve üzeri ise aktif olur. Eğer görseldeki gibi yeni bir cluster oluşturuyor iseniz, daha sonrasında bu cluster’a ekleyeceğiniz tüm node’lar için bu özellik otomatik olarak enable olacaktır.
Bu işlemi alttaki CLI komutuyla da yapılabilir.
$> ./couchbase-cli node-to-node-encryption -c localhost:8091 -u <username> -p <password> –enable
3. Node şifrelemenin tamamlandığından emin olmak için ayarları kontrol edelim.
./couchbase-cli setting-security –get -c localhost:8091 -u <username> -p <password> {“disableUIOverHttp”: false, “disableUIOverHttps”: false, “clusterEncryptionLevel”: “control”}
clusterEncryptionLevel ‘ın “control” olarak set edildiğini göreceksiniz. Bu, node’lar arasındaki verilerin unencrypte dolduğunu fakat kontrol mekanizmasının encrypted olduğunu göstermektedir.
4. netstat komutunu kullanarak node1 ve node2 için açık olan portları kontrol edelim. Eğer şifreleme yok ise port 21100 – 21299 arasındaki portlar kullanılır. TLS bağlantısı olan node’lar arasında ise 21150 portu kullanılır.
Bu komutu kullanabilmeniz için sudo yetkinizin olması gerekir.
$> netstat -atep –numeric-ports | grep ‘beam.smp’ | grep ‘node-2’ tcp 0 0 node-1.us-central:59586 node-2.us-central:11209 ESTABLISHED couchbase 26650 3953/beam.smp tcp 0 0 node-1.us-central:21150 node-2.us-central:48498 ESTABLISHED couchbase 24960 3953/beam.smp
Eğer talep ederseniz tshark (wireshark) paketini kullnarak TCP paketlerini yakalayıp encrypted olan verileri görebilirsiniz. Bunun için alttaki komutları kullanabilirsiniz.
$> tshark -P -i eth0 -f tcp -w /tmp/eth0.pcap $> tshark -x -r /tmp/eth0.pcap | less
Çıktısı alttaki gibi olacaktır.
Güvenliği üst seviye tutmak için düzenli olarak kullanılan sertifikaları yenilemek önerilir. Bunun için şifreleme modunu kapatmak, yeni sertifikaları yüklemek ve şifreleme modunu yeniden açmak gerekir. Yapılması gereken adımlar aşağıda verilmiştir.
1. cluster encryption level kontrol edilir.
./couchbase-cli setting-security –get -c localhost:8091 -u <username> -p <password> {“disableUIOverHttp”: false, “disableUIOverHttps”: false, “clusterEncryptionLevel”: “all”}
Eğer sizinde bu çıktıdaki gibi clusterEncryptionLevel “all” statüsünde gözüküyor ise bunu “control” olarak set etmeniz gerekir. Bunun için altdaki komutu kullanabilirsiniz.
couchbase-cli setting-security --set
2. Cluster Encryption Disable edilir.
$> couchbase-cli node-to-node-encryptionchange-cluster-encryption -c localhost:8091 -u <username> -p <password> –disable
3. Yeni temin edilen sertifikalar tüm node’ların inbox’ına kopyalanır ve cluster’a sertifikaları yeniden yüklenmesi komutu verilir.
$> couchbase-cli ssl-manage –cluster <hostname>:<port> –upload-cluster-ca <path_to_root_ca>
Yükleme işlemi için alttaki komut yazılır.
$> couchbase-cli ssl-manage –cluster <hostname>:<port> –set-node-certificate
4. Cluster Encryption Enable edilir.
$> couchbase-cli node-to-node-encryptionchange-cluster-encryption -c localhost:8091 -u <username> -p <password> –enable