Graylog Kurulumu ve Yapılandırması Ubuntu 20.04
Graylog, sistemlerin loglarını merkezi bir sunucudan izlemek için kullanılabilen ücretsiz ve açık kaynaklı günlük yönetim yazılımı aracıdır. Graylog, Log verilerini depolamak ve arama yetenekleri sağlamak için Elasticsearch’ü ve meta bilgileri depolamak için MongoDB’yi kullanır. Büyük miktarda veriyi basit ve okunabilir bir formatta izlemenize, aramanıza ve analiz etmenize yardımcı olur. Bu yazıda, Graylog’u Ubuntu 20.04 sunucusuna kurulumu ve yapılandırması hakkında bilgi veriyor olacağım.
Önkoşullar
- Minimum 4 GB RAM ile çalışan Ubuntu 20.04 sunucusu
- Root haklarına sahip bir hesap
Başlarken
Öncelikle, sistem paketlerimizi en son sürüme güncellememiz gerekecektir. Aşağıdaki komutla sistemimiz üzerinde hali hazırda kurulu olan paketleri güncelleyebiliriz:
apt-get update -y apt-get dist-upgrade -y
Tüm paketleri güncelledikten sonra, sunucumuza bazı bağımlılıkları da kurmamız gerekecektir. Hepsini aşağıdaki komutla kurabilirsiniz:
apt-get install apt-transport-https gnupg2 uuid-runtime pwgen curl dirmngr -y
Gerekli tüm bağımlılıklar yüklendikten sonra bir sonraki adıma geçebiliriz.
Java Kurulumu
Graylog kurulumu için, sunucumuzda Java’nın yüklü olması gerekmektedir. Eğer yüklü değilse, aşağıdaki komutla kurabiliriz:
apt-get install openjdk-11-jre-headless -y
Java yüklendikten sonra, aşağıdaki komutu çalıştırarak yüklü Java sürümünü doğrulayabiliriz:
java -version
Şuna benzer bir çıktı görüyor olmalıyız:
root@ubuntu-4gb-fsn1-1:~# java -version openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Bir sonraki adıma geçebiliriz.
Elasticsearch Kurulumu ve Yapılandırması
Graylog, harici kaynaktan gelen logları saklamak için Elasticsearch’ü kullanır. Bu yüzden Elasticsearch’ü sistemimize kurmamız gerekecektir.
Elasticsearch’ün en son sürümü Ubuntu varsayılan deposunda mevcut değildir. Bu yüzden, sistemimize Elasticsearch deposunu eklememiz gerekecektir.
İlk olarak, Elasticsearch GPG anahtarını aşağıdaki komutla indirip ekliyoruz:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
Ardından, aşağıdaki komutla Elasticsearch deposunu ekliyoruz:
echo "deb https://artifacts.elastic.co/packages/oss-6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Ardından, eklemiş olduğumuz depoyu aşağıdaki komutla güncelliyor ve Elasticsearch’ü sunucumuza kuruyoruz:
apt-get update -y apt-get install elasticsearch-oss -y
Elasticsearch’ü kurduktan sonra, Elasticsearch konfigürasyon dosyasını düzenlememiz ve cluster adını tanımlamamız gerekecektir. Bunu aşağıdaki komutla yapabiliriz:
nano /etc/elasticsearch/elasticsearch.yml
Cluster adını graylog olarak tanımlıyoruz ve aşağıdaki satırı da dosyanın en altına ekliyoruz:
cluster.name: graylog action.auto_create_index: false
Düzenleme işimiz bittiğinde dosyayı kayıt ettikten sonra kapatıyoruz. Ardından, Elasticsearch servisini başlatın ve aşağıdaki komutla boot esnasında otomatik olarak başlamasını sağlıyoruz:
systemctl daemon-reload systemctl start elasticsearch systemctl enable elasticsearch
Buraya kadar herhangi bir sorun olup olmadığını aşağıdaki komut ile sorgulayabiliriz:
systemctl status elasticsearch
Komutun çıktısı aşağıdaki gibi ya da benzeri olmalıdır:
root@ubuntu-4gb-fsn1-1:~# systemctl status elasticsearch ● elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-19 01:53:42 +03; 1min 3s ago Docs: http://www.elastic.co Main PID: 9703 (java) Tasks: 41 (limit: 4567) Memory: 1.1G CGroup: /system.slice/elasticsearch.service └─9703 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.networkaddress.cache.ttl=60 -Des.n> Dec 19 01:53:42 ubuntu-4gb-fsn1-1 systemd[1]: Started Elasticsearch. Dec 19 01:53:42 ubuntu-4gb-fsn1-1 elasticsearch[9703]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a fut> lines 1-12/12 (END)
Şimdi komut satırında aşağıdaki komutu çalıştırarak Elasticsearch’ün verdiği yanıtı doğrulayalım:
curl -X GET http://localhost:9200
Evet karşımıza bir JSON çıktısı geliyorsa (aşağıdaki gibi) Elasticsearch’ümüz hazır demektir:
{ "name" : "e_QJT23", "cluster_name" : "graylog", "cluster_uuid" : "SC6Mm6xmSkKglJ8DWPKFqw", "version" : { "number" : "6.8.13", "build_flavor" : "oss", "build_type" : "deb", "build_hash" : "be13c69", "build_date" : "2020-10-16T09:09:46.555371Z", "build_snapshot" : false, "lucene_version" : "7.7.3", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Artık MongoDB kurulumuna geçebiliriz.
MongoDB Kurulumu
Yazının başında da bahsettiğim gibi Graylog, MongoDB’yi bir veritabanı olarak kullanır. Bu yüzden MongoDB veritabanını sunucumuza kurmamız gerekecek. Aşağıdaki komutla kurulumu başlatabiliriz:
apt-get install mongodb-server -y
MongoDB kurulduktan sonra, MongoDB servisini başlatıp ve aşağıdaki komutla sistemin yeniden başlatıldığında başlamasını sağlıyoruz:
systemctl start mongodb systemctl enable mongodb
Evet bu adımı da tamamlamış olduk artık Graylog kurulumuna hazırız demektir.
Graylog Kurulumu ve Yapılandırma
Graylog paketi Ubuntu varsayılan deposunda mevcut değildir. Bu nedenle, graylog deposunu sunucumuza yüklememiz gerekecektir.
Graylog depo paketini aşağıdaki komutla indirebiliriz:
wget https://packages.graylog2.org/repo/packages/graylog-3.3-repository_latest.deb
İndirme işlemi tamamlandıktan sonra, indirilen paketi aşağıdaki komutla kuruyoruz:
dpkg -i graylog-3.3-repository_latest.deb
Ardından, depoyu güncelleyip Graylog sunucusunu aşağıdaki komutlarla sırasıyla çalıştırarak kuruyoruz:
apt-get update -y apt-get install graylog-server -y
Graylog sunucusunu kurduktan sonra, kullanıcı şifrelerini güvence altına almak için bir secret oluşturmamız gerekecektir. Aşağıdaki komutla üretebiliriz:
pwgen -N 1 -s 96
Yukarıdaki komutun çıktısı aşağıdakine benzer olmalı: (Not: Çıktıyı kayıt edin)
root@ubuntu-4gb-fsn1-1:~# pwgen -N 1 -s 96 VejU0BrRsMHiGp4m1LQsVhxMdYysWRFdOgFkj6WNnQol6MmMC9kQlgjCEK7lVYb0ozd0l6m0gk70C0KszGfxF2SXJ83VdMxp
Ardından, Graylog admin kullanıcısı için güvenli bir şifre oluşturmamız gerekecektir. Graylog web ara yüzüne giriş yapmak için bu şifreye ihtiyacımız olacak. Aşağıdaki komutla üretebilirsiniz:
echo -n password | sha256sum
Yukarıdaki komutun çıktısı aşağıdaki gibi olmalıdır: (Not: Çıktıyı kayıt edin)
root@ubuntu-4gb-fsn1-1:~# echo -n password | sha256sum 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 -
Şimdi, Graylog yapılandırma dosyasını düzenleyip her iki parolayı da tanımlıyoruz:
nano /etc/graylog/server/server.conf
password_secret = parametresine oluşturmuş olduğumuz secret anahtarını, root_password_sha2 = parametresinin karşısına da admin kullanıcısı için oluşturmuş olduğumuz güvenli şifreyi giriyoruz. Yine aynı dosyada bulunan #http_bind_address = 127.0.0.1:9000 parametresinin başında bulunan diyez (#) işaretini kaldırıp dosyayı kayıt ediyoruz.
Bendeki son durum:
password_secret = VejU0BrRsMHiGp4m1LQsVhxMdYysWRFdOgFkj6WNnQol6MmMC9kQlgjCEK7lVYb0ozd0l6m0gk70C0KszGfxF2SXJ83VdMxp root_password_sha2 = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 http_bind_address = 127.0.0.1:9000
İşiniz bittiğinde dosyayı kaydedin ve kapatın, ardından Graylog servisini başlatın ve aşağıdaki komutla sistemin yeniden başlatıldığında otomatik olarak başlamasını sağlayın:
systemctl daemon-reload systemctl start graylog-server systemctl enable graylog-server
Ve aşağıdaki komut ile Graylog servisinin çalıştığını doğrulayabiliriz:
systemctl status graylog-server
Bu da çıktısı:
root@ubuntu-4gb-fsn1-1:~# systemctl status graylog-server ● graylog-server.service - Graylog server Loaded: loaded (/lib/systemd/system/graylog-server.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-19 02:22:08 +03; 18s ago Docs: http://docs.graylog.org/ Main PID: 11396 (graylog-server) Tasks: 92 (limit: 4567) Memory: 667.0M CGroup: /system.slice/graylog-server.service ├─11396 /bin/sh /usr/share/graylog-server/bin/graylog-server └─11430 /usr/bin/java -Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled -XX:-OmitS>
Bu noktada artık Graylog sunucusu 9000 portundan yayın yapmaya başlamıştır.
Nginx’i Graylog için Reverse Proxy Olarak Yapılandırma
Ardından, Graylog sunucusuna erişmek için Nginx’i reverse proxy olarak kurmamız ve yapılandırmamız gerekecektir.
Öncelikle, aşağıdaki komutla Nginx sunucusunu kuralım:
apt-get install nginx -y
Nginx sunucusunu kurduktan sonra, aşağıdaki komutla yeni bir Nginx virtual host yapılandırma dosyası oluşturun:
nano /etc/nginx/sites-available/graylog.conf
Aşağıdaki satırları boş dosyanın içine yapıştırdıktan sonra kayıt edip dosyadan çıkıyoruz. Ben buraya örnek olması açısından server_name parametresine graylog.ornek.org olarak FQDN girdim ve host kaydımı ona göre düzenledim, siz IP adresi ya da localhost yazabilirsiniz.
server { listen 80; server_name graylog.ornek.org; location / { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Graylog-Server-URL http://$server_name/; proxy_pass http://127.0.0.1:9000; } }
Ardından, aşağıdaki komutla herhangi bir yazım hatası için Nginx’i doğruluyoruz:
nginx -t
Çıktı aşağıdaki gibiyse herhangi bir syntax hatası yok demektir:
root@ubuntu-4gb-fsn1-1:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Ardından, aşağıdaki komutla az önce oluşturmuş olduğumuz Nginx virtual host yapılandırma dosyasını etkinleştiriyoruz:
ln -s /etc/nginx/sites-available/graylog.conf /etc/nginx/sites-enabled/
Son olarak, yapılan değişikliklerin geçerli olması için Nginx servisini yeniden başlatıyoruz:
systemctl restart nginx
Aşağıdaki komut ile nginx servisinin başarılı bir şekilde ayağa kalkıp kalkmadığını öğreniyoruz:
root@ubuntu-4gb-fsn1-1:~# systemctl status nginx
Çalıştırılan komut sonrası örnek çıktı aşağıdaki gibiyse işlem tamam demektir:
root@ubuntu-4gb-fsn1-1:~# systemctl status nginx ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2020-12-19 02:33:04 +03; 13s ago Docs: man:nginx(8) Process: 11694 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 11704 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 11708 (nginx) Tasks: 3 (limit: 4567) Memory: 3.5M CGroup: /system.slice/nginx.service ├─11708 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─11709 nginx: worker process └─11710 nginx: worker process
Artık Graylog web arayüzüne erişebiliriz.
Graylog Web Arayüzüne Erişim
Şimdi, web tarayıcımızı açıyoruz ve http://graylog.ornek.org URL’sini yazın (dediğim gibi FQDN tanımlamadıysanız IP ile de gidebilirsiniz). Graylog giriş sayfasına aşağıda gösterildiği gibi yönlendirileceksiniz:
Yönetici kullanıcı adınızı (varsayılan: admin), şifrenizi (varsayılan: password) girin ve Sign in düğmesine tıklayın. Aşağıdaki sayfada Graylog Getting started sayfası bizi karşılıyor olacak:
Şimdi System > Overview yolunu izleyerek takip eden sayfada Graylog durumunu görebilirsiniz:
pfSense Loglarının Graylog’a Gönderimi
Graylog:
514 portu hali hazırda kullanıldığından dolayı Input’u eklerken 514 portunda servisi başlatamadım. Ben de port kısmına aşağıdaki gibi 5514 olarak girerek bu porttan gelecek olan trafiği kayıt altına almaya çalıştım: (System > Inputs > Select Input açılır penceresinden en son bulunan Syslog UDP’yi seçebilirsiniz)
pfSense:
Status > System Logs > Settings alanının en sonunda bulunan Remote Log Servers ve Remote Syslog Content kısmını aşağıdaki gibi ayarlayıp pfSense loglarını başarılı bir şekilde Graylog’a aktarabildim.
Graylog Search:
Ubuntu sunucumun sistem saati doğru olmasına karşın Graylog sistem zamanı yanlış gözüküyordu. Bu yüzden dolayı pfSense’ten almış olduğum logun zamanı farklıydı. Varsayılan Graylog sistem saati UTC olarak set edilmiş aşağıdaki parametrenin başındaki diyez (#) işaretini kaldırıp Europe/Istanbul olarak dosyayı kayıt edip graylog servisini yeniden başlattığımda sorunum çözüldü
/etc/graylog/server/server.conf
root_timezone = Europe/Istanbul/etc/init.d/graylog-server restart
Servisin ayağa kalkması biraz zaman alabilir.