Bu makalede açık kaynak yazılımlı, aklınıza gelebilecek her cihazdan ve uygulamadan log toplayabilen, loglama çözüm olan Graylog’un kurulumunu anlatacağız. Graylog’u log merkeziniz olarak yapılandırıp, güvenlik duvarı, switch, sunucu, kablosuz cihazlar, mail sunucusu gibi birçok uygulamadan, cihazdan log toplayabilirsiniz. Topladığınız loglarla SSH etkinliklerini, Windows olaylarını ve aklınıza gelebilecek her türlü etkinliği kayıt altına alıp, izleyip, buna göre aksiyon alabilirsiniz.
Graylog 4 ana bileşene sahiptir;
- Graylog Server: Mesajları alan, işleyen, veriyi anlamlı hale getiren, tüm log gönderen cihazlarla iletişim kuran bir çalışan olarak hizmet eder. Çalışma gücü CPU performansına bağlıdır.
- Elasticsearch: Tüm günlükleri ve mesajları saklar. Toplanan loglar Elasticsearch yapısında saklanır, veriye ulaşacağınız zaman Elasticsearch indeks yapısı ile veriye ulaşılır. Performansı RAM’e ve disk okuma/yazma hızına bağlıdır.
- MongoDB: Graylog konfigürasyon verilerini saklar, günlük verilerini saklamaz. Kullanıcı bilgisi, stream bilgileri gibi meta verileri saklar.
- Web Arayüzü: Inputları (log gönderen cihazlar, sunucular vs.), indeksleri (Elasticsearch veri indeksleme yapısı), dashboardları (stream ile toplanan verilerin anlamlı bir biçimde izlendiği yapı), sistem kullanımını takip ettiğimiz ve yapılandırabildiğimiz Graylog web arayüzü.
Sistem Gereksinimleri
- Debian, Ubuntu veya CentOS dağıtımlarından biri
- 4 GB RAM
- 4 core CPU (2 core ile çalışan Graylog’um mevcut fakat yine de kaynağınız varsa 4 öneririm)
- 100 GB disk (Başlangıç için ideal. Zaman ilerledikçe artırmanız gerekebilir)
- Elasticsearch 5 or 6 (Graylog ile beraber kuracağız)
- MongoDB 3.6 or 4.0 (Graylog ile beraber kuracağız)
- Oracle Java SE 8 veya OpenJDK 8 (Graylog ile beraber kuracağız)
İşletim Sistemi Güncellemeleri ve Gerekli Paketlerin Kurulumları
İşletim sistemimizin güncellemelerini yapıyoruz.
sudo apt-get update && sudo apt-get upgrade
Güvenli parola oluşturmak için PWGEN ve Elasticsearch’ün çalışması için gerekli olan Java’yı, yani OpenJDK’yı kuruyoruz.
sudo apt-get install apt-transport-https openjdk-8-jre-headless uuid-runtime pwgen
MongoDB kurulumunu yapıyoruz. MongoDB’nin son sürüm versiyonlarının bulunduğu reposityler ile kurulması önerilir.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update sudo apt-get install -y mongodb-org
MongoDB kurulduktan sonra son aşamaya geçiyoruz. Sistem açılışında MongoDB’yi aktif hale getirip, servisin çalıştığını doğruluyoruz.
sudo systemctl daemon-reload sudo systemctl enable mongod.service sudo systemctl restart mongod.service sudo systemctl --type=service --state=active | grep mongod
Elasticsearch Kurulumu
Graylog 3.x versiyonları Elasticsearch 7.x versiyonları ile çalışmaz, bu yüzden Elasticsearch 6 versiyonunu kuracağız.
wget -q https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
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 sudo apt-get update
sudo apt-get install elasticsearch-oss
Aşağıdaki dosyayı açıyoruz.
sudo nano /etc/elasticsearch/elasticsearch.yml
cluster.name: graylogmakineadı olarak değiştiriyoruz ve dosyanın en sonuna action.auto_create_index: false satırını ekliyoruz.
Kaydedip çıkıyoruz.
Elasticsearch servisini aktif hale getirip, başlangıçta çalışacak şekilde ayarlıyoruz.
systemctl daemon-reload systemctl enable elasticsearch.service systemctl restart elasticsearch.service ps aux | grep elasticsearch netstat -an | grep 9200
Elasticsearch servisini başlattıktan sonra çalıştığını teyit ediyoruz. Elasticsearch kısmını tamamladık, Graylog Server kurulumuna geçelim.
Graylog Server Kurulumu
Graylog paketini indiriyoruz ve açıyoruz.
wget https://packages.graylog2.org/repo/packages/graylog-3.0-repository_latest.deb sudo dpkg -i graylog-3.0-repository_latest.deb
Güncelleme yapıp Graylog’un eklentilerini yüklüyoruz.
sudo apt-get update && sudo apt-get install graylog-server graylog-enterprise-plugins graylog-integrations-plugins graylog-enterprise-integrations-plugins
Konfigürasyon dosyasında gerekli iki alanı dolduracağız. Bunları düzenlemezsek Graylog çalışmayacaktır. İlk olarak password_secret alanı için
pwgen -N 1 -s 96
kodu ile şifrelenmiş parola oluşturuyoruz. Daha sonrasında
sudo nano /etc/graylog/server/server.conf
kodu ile konfigürasyon dosyasını açıyoruz. Oluşturduğumuz şifrelenmiş parolayı password_secret karşısına yazıyoruz.
Bu işlemlerin ardından root_password_sha2 alanı için de şifrelenmiş bir parola üretmemiz gerekiyor. Aşağıdaki kod ile dilediğimiz bir parolayı girip, şifrelenmiş halini konfigürasyon dosyasındaki root_password_sha2 alanına yazacağız.
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
Şifreli parolayı alıp
sudo nano /etc/graylog/server/server.conf
konfigürasyon dosyasını açalım ve root_password_sha2 karşısına yazalım.
Parola işlemlerini tamamladık.
Konfigürasyon dosyasını kapatmadan önce son bir işlemimiz var.
root_timezone değişkenini bulup, root_timezone = Europe/Istanbul şeklinde güncelleyelim.
Dosyayı kaydedip çıkalım.
Graylog servisini başlangıçta aktif hale getirip, servisi başlatıyoruz. Daha sonra servisi başlatıp, logdan kontrol ediyoruz. Graylog servisinin başlaması biraz vakit almaktadır. “Graylog server up and running.” yazısını gördüğünüzde servis başlamış demektir.
sudo systemctl daemon-reload sudo systemctl enable graylog-server.service sudo systemctl start graylog-server.service tail -f /var/log/graylog-server/server.log
Varsayılan Port (514 TCP/UDP) Yönlendirme İşlemleri
Sırada varsayılan porta gelen logları istediğimiz porta yönlendirme işlemimiz var. Bunun için önce
ifconfig
ile makinemizin IP adresini öğreniyoruz.
Daha sonra
sudo nano /etc/rsyslog.conf
ile syslog konfigürasyon dosyamızı açıyoruz. Dosyanın son satırına
*.* @makineipadresi:1514;RSYSLOG_SyslogProtocol23Format
yazıyoruz. Dosyayı kaydedip, kapatıyoruz. Burada 1514 port kısmına istediğiniz portu yazabilirsiniz.
Syslog servisini yeniden başlatıyoruz.
systemctl restart rsyslog
Şimdi firewall kurallarını yazacağız. 514 TCP/UDP portuna gelen isteklerin 1514 TCP/UDP portuna yönlendirilmesini belirtiyoruz.
iptables -t nat -A PREROUTING -p tcp --dport 514 -j REDIRECT --to 1514 iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to 1514
sudo iptables-save > /etc/iptables.rules
ile kurallarımızı kaydediyoruz.
less /etc/iptables.rules
ile kontrolünü sağlıyoruz.
Yeni dosya açıyoruz.
sudo nano /etc/network/if-pre-up.d/iptables
Yazıp kaydediyoruz.
iptables-restore < /etc/iptables.rules exit 0
Dosyaya yazma izni veriyoruz.
chmod +x /etc/network/if-pre-up.d/iptables
Son Adımlar
Artık birkaç ufak adımımız kaldı. Aşağıdaki kod ile Graylog Server’ımızın ana sayfa içeriğini basıyoruz.
curl http://127.0.0.1:9000
Daha sonrasında
netstat -an | grep 9000
ile 9000 portunun dinlendiğini teyit ediyor, Graylog’un çalıştığını görüyoruz.
Konfigürasyon dosyasını açıyoruz. http_bind_address adresini değiştirip, servisi yeniden başlatıyoruz.
sudo nano /etc/graylog/server/server.conf http_bind_address = ipadresi:9000
systemctl restart graylog-server
Graylog servisi yeniden başladığında
netstat -an | grep 9000
ile portu kontrol ediyoruz ve Graylog adresinin ipadresi:9000 olarak değiştiğini görüyoruz.
Artık web tarayıcısından Graylog’a girdiğimizde kullanıcı adı admin, parola ise daha önce belirlediğimiz parola ile oturum açabiliriz.
Graylog artık çalışır halde ve log toplamaya hazır.
Yukarıdaki System menüsünden Inputs seçiyoruz.
Syslog UDP tıklayıp Launch new input diyoruz. Title kısmına istediğinizi yazabilirsiniz. Ben Syslog UDP yazıyorum.
Bind address 0.0.0.0. Port 1514 ve Save diyoruz.
Start input ile log toplamayı aktif hale getiriyoruz. Varsayılan olarak 514 portuna gelen logların 1514 portuna yönlendirilmesi için düzenlemeleri yapmıştık. Bu input ile gelen logları görüntülenebilir hale getirdik.
Graylog kurulumumuzu tamamlamış olduk. İndeks, stream ve input yönetimi için diğer yazılara göz atabilirsiniz.