Ubuntu 18.04’e ElasticSearch Kurulumu Ve Ayarlamaların Yapılması

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
202
Tepkime puanı
9
Puanları
18
Okan Adıgüzel tarafından yazılmıştır.

Ubuntu 18.04’e ElasticSearch Kurulumu Ve Ayarlamaların Yapılması​


Elasticsearch, verileri tam zamanlı olarak aramaya ve analiz etme amacıyla Java dilinde geliştirilmiştir. Kullanılabilirlik ve farklı özellikleri bakımında BigData tüzel kişileri tarafından sıkça kullanılmakta ve tercih edilmektedir. Bu makalede Elasticsearch’ü kurmayı, kişiye (size) özgü ayarlarını, güvenli kurulum yapmayı ve Elasticsearch’teki çalışma ortamını anlatacağım.

Gerekli Materyaller

  • Minimum 4GB Ram, 2CPU’lu ve root erişimine sahip olmayan (standart kullanıcı izinleri olan) Ubuntu 18.04 sunucusu.
  • OpenJDK 11

Bu gereksinimler, Elasticsearch’te sizin depolayacağınız veriler için minimal düzeyde olacak fakat yeterli olacağından şüpheniz olmasın, rahat bir şekilde çalışma yapabileceksiniz. (Yüksek veriler için gereksinimlerin yükseltilmesi tavsiye edilir.)

Aşama 1 – Elasticsearch’ün Yüklenmesi


Elasticsearch’ün gerekli paketleri Ubuntu’nun standart paketinde yüklü olarak gelmez bununlu beraber Elasticsearch’ün kaynak paket listesi yüklendikten sonra APT’de yüklenmelidir.

Package spoofing’den sisteminizi korumanız için tüm Elastic paketleri Elasticsearch lisansıyla şifrelenir. Güvenilir olmayan paketler ise package manager (paket menajeri) tarafından şifrelenir. Bu adımda Elastic’i yüklemek için Elasticsearch’ün açık GPG anahtarını import edip Elastic kaynak paketini ekleyeceğiz.

Başlangıçta, verileri URL yoluyla transfer eden komut satırı aracı cURL’i APT’nin içindeki Elasticsearch açık GPG anahtarını import etmek için kullanıyoruz. -fsSL argümanını diğer programları durdurmak, muhtemel hataları önlemek (sunucu hataları haricinde) ve eğer yeniden yönlendirme yapıldıysa yeni istekleri temiz bir dosyaya çekmek için cURL’ı kullanacağız. cURL’in çıktısını public GPG anahtarına ekleyen apt-key programına ekliyoruz.


Sonra, Elastic kaynak listesini yeni kaynaklara bakan APT için sources.list.d ‘e ekliyoruz.

“echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list”

Sonra, paket listesini güncelliyoruz ve APT yeni Elastic kaynaklarını okumaya başlamış olacak.

“sudo apt update”

Akabinde de Elastic’i aşağıdaki komutla yüklemeye başlıyoruz.

“sudo apt install elasticsearch”​

Artık Elastic’i sunucumuza kurduk ve konfigüre edilmeye hazır!

Aşama 2 – Elasticsearch’ün Konfigürasyonu


Elastic’i konfigüre etmek için en fazla konfigürasyon seçeneklerinin depolandığı elasticsearch.yml dosyasında düzenlemeler yapacağız. Bu dosyaya /etc/elasticsearch konumundan erişebiliyoruz.

Elastic’i yapılandırmadan önce tercih ettiğiniz bir text editörünü kullanabilirsiniz. Biz nano ‘yu kullanacağız.

“sudo nano /etc/elasticsearch/elasticsearch.yml”

NOT: Elasticsearch’ün konfigürasyon dosyası YAML formatında olduğu için ‘indentation’ formatında girdi yapmamız gerekiyor bu yüzden dosyaya ekstra bir boşluk eklemediğinizden emin olun.

Elasticsearch listens for traffic from everywhere on port 9200. You will want to restrict outside access to your Elasticsearch instance to prevent outsiders from reading your data or shutting down your Elasticsearch cluster through its REST API. To restrict access and therefore increase security, find the line that specifies network.host, uncomment it, and replace its value with localhost so it looks like this:

elasticsearch.ymldosyası, cluster, node, paths, bellek, ağ, discorvery ve gateway alanlarında konfigürasyon yapma olanağı sağlamaktadır. Bahsettiğim çoğu opsiyon önceden konfigüre edilse de ihtiyacınıza göre tekrardan yapılandırabilirsiniz. single-server konfigürasyonun doğru yapılandırılabilmesi için sadece network sunucusunu ayarlayacağız.

Elasticsearch herhangi bir yerdeki trafiği 9200portu üzerinden dinler. Elastic’e dışarıdan gelen bağlantıları (dış mihrakların verileri okuması veya Elastic sunucusunu kapatması) REST API yoluyla engelleyebilirsiniz. Dışarıdan gelen erişimleri engellemek ve güvenliği arttırmak için network.hostsatırını bulun ve değeri localhost olarak değiştirin ve bingo! Aşağıdaki gibi bir ekran bizi karşılayacak:

Kod:
[CENTER]/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
[/CENTER]


Artık localhost olarak belirleme yaptık bundan sonra Elastic arayüzü ve kısıtlanan tüm IP adreslerini dinlemeye alacak. Eğer özel bir arayüzü dinlemek istiyorsanız localhost.’a bu IP adresini ekleyebilirsiniz. Şimdi elasticsearch.ymlkısmını kaydedip çıkalım. Nano’yu ilk defa kullanıyorsanız ilk olarak CTRL+X, akabinde Y ve ENTER ile bu işlemi yapabilirsiniz.

Bu yaptıklarımız Elasticsearch’ü kullanmak için yaptığımız minimal ayarlamalardı. Artık Elasticsearch’ü adam akıllı kullanmaya başlayabiliriz.

Elasticsearch’ü systemctlile başlatıyoruz. Başlaması için biraz beklemeniz gerekecek, öbür türlü beklemediğiniz taktirde bağlantıyla alakalı birtakım hatalar alabilirsiniz.

“sudo systemctl start elasticsearch”

Sonra, Elasticsearch’ün sürekli olarak sunucunuzda çalışabilmesi için aşağıdaki komutu çalıştırın:

“sudo systemctl enable elasticsearch”

Elasticsearch’ü etkinleştirdiğimize göre artık Elastic’in güvenlik muhabbetini ele alabiliriz.

Aşama 3 – Elasticsearch’ün Güvenliği


Standart olarak HTTP API’ye erişimi olan herkes Elastic’i kontrol edebilir ama bu sorun güvenlik açısından sorun teşkil etmeyecektir zira Elastic sadece loopback arayüzünü (127.0.0.1) dinlediği için oraya sadece local’de erişime sahip olan erişebilir. Böylelikle herhangi açık adresten erişim mümkün olmayacak ve böylelikle sunucu kullanıcıları güvenilir olacak ve güvenlik kısmı sekteye uğraşmamış olacaktır.

HTTP API’ye uzaktan bağlanma izni vermek için ağ exposure’unu, Ubuntu’nun standart güvenlik duvarı UFW ile limitlendirebilirsiniz. Eğer aşağıdaki makaledeki adımları yaptıysanız hali hazırda bu güvenlik duvarı zaten daima kullanabilir halde olacaktır.


Şimdi ise standart Elasticsearch HTTP API portuna erişim izni için güvenlik duvarını uzaktan güvenilir bağlantı için konfigüre edeceğiz, genellikle single-server kurulumunda kullandığımız sunucu olacak, örnek vermek gerekirse 198.51.100.0. Erişime izin vermek için aşağıdaki komutları takip ediniz:

“sudo ufw allow from 198.51.100.0 to any port 9200”

Bir kere bu işlem tamamlandığı zaman UFW’yu aşağıdaki komutla aktif edebilirsiniz:

“sudo ufw status”

Eğer adımları doğru bir şekilde uyguladıysanız aşağıdaki gibi bir çıktı alacaksınız:

Kod:
Status: active

To                         Action      From
--                         ------      ----
9200                       ALLOW      198.51.100.0
22                         ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)

UFW artık aktif ve Elasticsearch’ü 9200 portundan korumaya programlandı.

Eğer farklı güvenlik eklentileri eklemek istiyorsanız Elastic’in Shield plugin sayfasına bakabilirsiniz.

Aşama 4 – Elasticsearch’ü Test Etme Zamanı


Şimdiye kadar Elastic’in 9200 portundan çalışıyor olması gerekiyor, bunu cURL ve GET istekleriyle test edelim.

“curl -X GET ‘http://localhost:9200”

Eğer doğru gidiyorsak aşağıdaki çıktıyı almamız lazım:

Kod:
{
  "node.name" : "My First Node",
  "cluster.name" : "mycluster1",
  "version" : {
    "number" : "2.3.1",
    "build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
    "build_timestamp" : "2020-04-04T12:25:05Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

Eğer yukarıdaki gibi bir çıktı aldıysanız Elastic doğru bir şekilde çalışıyor demektir. Eğer alamadıysanız kurulumu doğru yaptığınızdan emin olun ya da Elasticsearch’ü başlatırken başta dediğimiz gibi bir süre bekleyin.

Elastic’in daha düzgün çalıştığını görmek istiyorsanız aşağıdaki komutu çalıştırın:

“curl -XGET ‘http://localhost:9200/_nodes?pretty”

Yukarıdaki komuttan alacağınız çıktıda bir çok seçeneği görebilirsiniz. Bkz: Node, cluster, uygulama paketleri, modüller ve dahası.

Aşama 5 – Elasticsearch’ün Kullanılması


Elastic2i kullanmaya başlarken ilk önce biraz veri ekleyelim. Elastic, sıradan CRUD komutları kullanan RESTful API’ı kullanır: create, read, update ve delete. Bunları kullanabilmek için cURL’i komutunu tekrar kullanmamız gerekecek.

İlk eklemeyi şöyle yapabiliriz:

curl -XPOST -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1’ -d ‘{ “message”: “Hello World!” }’


Şöyle bir çıktı alacaksınız:

Kod:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

With cURL, we have sent an HTTP POST request to the Elasticsearch server. The URI of the request was /tutorial/helloworld/1 with several parameters:

cURL ile Elastic sunucusuna HTTP POST isteği yollamış olduk. İsteklerin URL’lerini /tutorial/helloworld/1 dizininde farklı parametrelerle görüyoruz:

  • tutorial , Elastic’in içindeki verilerin index’i.
  • helloworld, başlık.
  • 1ise index ve başlığın üzerindeki ID numarasıdır.

Bu ilk girdiyi HTTP GET isteğiyle geri alabilirsiniz.

“curl -X GET -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1’ -d ‘{ “message”: “Hello World!” }'”

Şöyle bir çıktı alacağız:

Kod:
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

Çıktıyı düzenlemek içinse HTTP PUT isteğini kullanabilirsiniz:

curl -X PUT -H “Content-Type: application/json” ‘localhost:9200/tutorial/helloworld/1?pretty’ -d ‘

{

“message”: “Hello, People!”

}’

Elastic böyle bir düzenlenmenin doğruluğunu ise aşağıdaki çıktıda bize göstermiş olacak:

Kod:
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

Yukarıdaki örneklerle mesaj kısmını düzenleyip “Hello People!” şeklinde ilk girdimizi yazdık. Böylelikle versiyon numarası otomatik olarak 2’ye yükseltilmiş oldu.

Ayrıca yukarıdaki ekstra argüman olan pretty istediğini de göz ardı etmemek gerekir. Bu istek human-readable formatındadır yani birçok veriyi eklememize imkan sağlar. Ayrıca verileri düzeltirken sonuca görsellik kazandırmak isteyip daha da okurnuk kılmak isterseniz aşağıdaki komutu girmeniz yeterli olacaktır:

“curl -X GET -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1?pretty'”

Artık çıktımız ‘human’ formatında parse edilmeye artık hazır.

Kod:
{
  "_index" : "tutorial",
  "_type" : "helloworld",
  "_id" : "1",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "message" : "Hello, People!"
  }
}


Elastic’e queried ‘sorgulanmış’ verileri ekledik. Diğer kısımları öğrenmek için API dökümasyonuna ( ) bakabilirsiniz.

SONUÇ


Elastic’i yükledik, konfigüre ettik ve kullanıma hazır hale getirdik. Elastic’in asıl piyasaya sürülme amacında Elasticsearch ile beraber kullanılsın diye 3 tane de araç geliştirilmişti — Logstash, Kabana, and Beats — . Eğer bu araçlarla beraber kullanırsanız bunlar size arama, analiz ve herhangi bir kaynaktaki kayıtları (logları) tutmanıza izin veriyor ve merkezi giriş sistemi formatında pratik yapmanıza imkan sağlıyor.


Kaynak:
 
Moderatör tarafında düzenlendi:
Geri
Üst