Rsyslog Nedir? Rsyslog Log Sunucusu Kurulumu Nasıl Yapılır? - SİBER GÜVENLİK EĞİTİMİ

NELER VAR

29 Kasım 2020 Pazar

Rsyslog Nedir? Rsyslog Log Sunucusu Kurulumu Nasıl Yapılır?


Herkese merhaba. Bu yazımda Rsyslog konusundan bahsedeceğim. Rsyslog'un temel olarak ne işe yaradığını öğrendikten sonra da lab ortamında rsyslog merkezi log sunucusu kurulumu gerçekleştirip client loglarını bu merkezi sunucuda toplayacağız.

Rsyslog, syslogd'nin geliştirilmiş halidir. Peki nedir bu sysloglar?

Syslog ve Syslogd Nedir?

Rsyslog u anlayabilmek için syslog kavramını iyi bilmek gerekiyor. Syslog, unix sistemlerdeki çeşitli kaynaklar ya da uygulamalarca üretilen logları (bunlara kayıtlarda diyebiliriz) işlemekle görevli bir uygulamadır. Syslog, "syslogd" isimli bir daemon olarak çalışır ve üretilen logların ne şekilde değerlendirileceğini belirler.

Syslog üzerinde çalıştığı sistemin loglarını işlediği gibi, uzaktaki bir sistemden gönderilen logları da alıp işleme özelliğine de sahiptir. Uzak sunucudaki logları alabilmek için, syslog sunucunuzun network özelliğini oluşturmanız gerekmektedir. Syslog logları, UDP ya da TCP olacak şekilde iletişimin sağlanacağı portu belirleyerek (genel olarak 514) dinlemeye başlar ve log monitoring uygulamalarına yönlendirebilir.

Syslog un çalışma mantığına örnek olarak, üzerinde bir smtp sunucusu çalışan unix sisteminizde, klasik olarak smtp daemon'ı, mail aktivitesi ile ilgili logları syslog'a gönderir. Syslog bu logları alıp bir dosyaya da yazabilir ya da belirlenen port aracılığı ile log monitoring cihazına da gönderebilir.

Rsyslog Nedir?

Rsyslog, syslogd'nin geliştirilmiş halidir. Çoğunu syslogd ile de yapabileceğiniz gibi rsyslog kullanarak, logları MySQL, postgreSQL, Oracle gibi database'lere yazdırabilirsiniz. Alınan log formatları ile istediğiniz şekilde oynayabilirsiniz. Mesela alınacak client logların, uzantılarını belirterek merkez log sunucusuna gönderebilirsiniz. Text dosyaları dahil hemen hemen her şeyi syslog formatına sokabilirsiniz.

Bir süreç tarafından log yazılacağında, log ilk olarak /dev/log'a yazılır. Örneğin postfix tarafından bir log yazılmak istendiğinde ilgili log /dev/log a yazılır. Rsyslog tarafından dinlenen /dev/log'daki log mesajı, rsyslog tarafından /var/log/mail'e yazılır. Burada bahsedilen /dev/log bir sockettir. Logların nereye, hangi aciliyet ile yazılacağını belirtmek için 2 etiket kullanılır; facility ve severity. Facility ile hangi türde bir log mesajı olduğu belirtilir, severity ile de hangi aciliyette bir log olduğu belirtilmektedir. Facility ve severity tablosuna https://community.splunk.com/t5/Getting-Data-In/syslog-facility-and-severity-loglevel/m-p/80333 link üzerinden göz atabilirsiniz.

Logları neden bu kadar önemsiyoruz? Sistem adminleri, güvenlik uzmanları, analistler ve hatta hackerlar için bile sistem izleri yani loglar olmazsa olmazdır. Loglar aracılığı ile birçok sorunun yanıtını bulabiliriz. Analizler gerçekleştirir, sistemlere olan saldırıları hatta öncesinde yapılmış saldırıları dahi keşfedebiliriz. Bu nedenle loglama, log yönetimi oldukça önemlidir. Rsyslog'ta tam hem merkezi log sunucusu olma gibi özelliğinden dolayı hem de herhangi bir saldırı durumunda saldırgan sunucu üzerindeki logları silse dahi siz merkezi log sunucusundan bu logları görüntüleyebileceksiniz.

Rsyslog ve syslog gibi kavramlara değindikten sonra kurulum ve uygulama aşamasına geçebiliriz.

Rsyslog Kurulumu

Debian ya da Fedora kullanıyorsanız eğer rsyslog için ekstra kurulum yapmanıza gerek olmayacaktır. Ben kurulumu centos sunucumda gerçekleştireceğim. Sunucu içerisinde rsyslog paketinin yüklü olup olmadığını "rpm -qa rsyslog" komutu ile kontrol edebilirsiniz. Herhangi bir sonuç dönmez ise; 


"yum install rsyslog" komutunu kullanarak paketi yükleyebilirsiniz. Rsyslog u merkezi sunucu haline getirmeden önce centos versiyonunu mutlaka kontrol etmeniz gerekmektedir. Ben öncelikle 7.9 versiyonda denediğim de birçok hata ile karşılaştım. CentOS 7.3'e downgrade ettiğimde ise herhangi bir problem ile karşılaşmadım.

Kurulumu gerçekleştirdikten bir sonraki adım ise sunucu her restart olduğunda "rsyslog" u start etmemek için enable etmemiz gerekmektedir. Yukarıdaki komutları yazarak rsyslogu enable hale getirip, servisi başlattım.

CentOS'taki kurulum aşaması tamamlandı. Merkezi log sunucusu olarak tanımlamamız için /etc/rsyslog.conf içerisindeki ayarları düzenlememiz gerekmekte. Şimdi o konfigürasyonları da düzenleyelim.

Merkezi Log Sunucusu

Server tarafındaki kurulum tamamlandı ve servis şuanda çalışıyor durumda. Burada önemli ipuçlarından biriside firewall servisidir. Eğer sunucu üzerinde firewall servisiniz kapalı ise herhangi bir işlem yapmanıza gerek yoktur. Fakat firewall un aktif olması gerekiyorsa tcp ve udp 514 portlarının kalıcı olarak açılması için;

  • firewall-cmd --zone=public --add-port=514/tcp
  • firewall-cmd --zone=public --permanent --add-port=514/tcp

komutlarını yazıp firewall servisini restart etmeniz gerekmektedir.

Rsyslog konfigürasyon dosyası /etc/rsyslog.conf dur. Ayrıca /etc/rsyslog.d/ dizini altında conf uzantılı bir dosya oluşturulursa da aynı görevi görebilir.

Konfigürasyon dosyasının içerisini açtığımızda karşımıza modüller çıkmaktadır. "imtcp ve imudp" modülleri sayesinde tcp ve udp üzerinden log alınabilir. Dosyayı açtığımız zaman başında $ işareti bulunan modüllerin önünde "#" yorum satırı ifadesi bulunmaktadır. Logları bu portlar üzerinden alacağımız için yorum satırı ifadeleri satırın başından kaldırılmalı ve yukarıdaki hale getirilmelidir.

Konfigürasyon dosyası içerisinde kurallar bulunmaktadır. Örneğin "cron.*" wildcard ına sahip loglar /var/log/cron dosyası içerisine otomatik olarak yazılmaktadır. Diğer uzantılar içinde belirlenmiş kurallar vardır. Bizde bu kurallara yenilerini ekleyebilir ya da düzenleyebiliriz. Burada dikkat edilecek nokta ise tüm sistemlerden gelen cron.* loglarının hepsinin /var/log/cron'a yazılacağı unutulmamalıdır. Bu durumda logların ayrıştırılmasında zorlanılması muhtemeldir. Bu gibi durumların önüne geçmek için fasilitiler oluşturmak gerekmektedir. Conf dosyasının içerisinde yukarıda görülen çıktıların en tepesine "+sunucu-ismi" şeklinde yazılırsa ya da bizim oluşturacağımız gibi bir kural oluşturulursa loglar ayrıştırılacaktır.

Modların hemen altına kendi kuralımızı oluşturup artık rsyslog u merkezi sunucumuz haline getirelim. yukarıdaki komutu yazarak diğer sistemlerden gelen logları /var/log/ dizini altında gelen sistemin hostname'ine göre adlandırıp yazmasını sağlayabiliriz. Bu şekilde dosyayı kaydedip port durumlarımızı inceleyelim.

Dosyayı kaydedip "systemctl restart rsyslog" ile servisi restart ettikten sonra "netstat" ile 514 portlarımıza bakabiliriz. Görüldüğü gibi tcp ve udp portları şuanda "Listen" durumunda. Bu durumda konfigürasyonu başarılı bir şekilde oluşturduğumuzu anlayabiliriz.

Client Sistemlerde Konfigürasyon

Merkezi log sunucusundaki konfigürasyonu tamamladıktan sonra iki CentOS client cihazının loglarını rsyslog server a yönlendireceğim. Burada, Windows, database, firewall gibi logları da aynı şekilde rsyslog aracılığı ile merkezi log sunucusuna gönderebilirsiniz.

Client sunucularda da /etc/rsyslog.conf dosyası içerisine girip gerekli düzenlemeleri yapalım.

Konfigürasyon dosyasının en alt satırına görüldüğü gibi "*.*" yazarak sistemdeki tüm logları merkezi sunucunun ip adresine 514 portundan yönlendirmeyi yapabiliriz. Burada "*.*" yerine "cron.*, mail.*" yazıp sadece belirtilen logları da yönlendirme işlemlerini gerçekleştirebiliriz. Önemli noktalardan biriside " @ " işaretidir. Buradaki " @ " in anlamı UDP, " @@" tcp anlamına gelmektedir. Ben burada logları "UDP 514" portundan yönlendirmeyi tercih ettim.

Dosyayı kaydedip, rsyslog servisini restart edebiliriz.

Merkezi log sunucunun /var/log/ dizini altına baktığımda "sergen****" ve "****logger1" dosyalarını görüntülemekteyim. Bu dosyalar conf dosyasının içerisinde oluşturduğum kuraldaki gibi client sunucuların hostname idir. "sergen****" dosyasının içerisine bir göz atalım.

Görüldüğü gibi client loglarının hepsini bu dosya altında görebilmekteyim. Anlık olarak client tarafında ne yazılırsa burada da aynı zamanda yazılmaktadır. Örneğin ben client tarafında "su" komutu ile farklı bir sunucuya geçiş sağlayıp hareket oluşturacağım.

Diğer client sunucumda oluşturduğum "su sergen" hareketinden sonra merkez sunucumda "***logger" pathi içerisine baktığım zaman bu hareketin logunu anlık olarak monitor edebilmekteyim. Log analistleri bu tür logları SIEM ürünleri aracılığıyla örneğin üzerinde çalıştığım ArcSight ürünü ile log monitoring işine yarayan logger a yönlendirip logları analiz edebilir, yorumlayabilirsiniz. Rsyslog olmasaydı da bu logları her bir sunucudan ayrı ayrı toplayıp monitor edebilirdik fakat rsyslog ile çok fazla iş yapmak yerine tek bir iş yapıp yapıyı merkezileştirebiliriz.

Bu şekilde rsyslog kullanarak merkezi log sunucusu oluşturmak ile ilgili temel işlemler bunlardan oluşmaktadır. Merkezi log sunucunda, disk problemi yaşayabilirsiniz. Bunun için belli rotate zamanları oluşturup logları rotate edebilir ya da backup ını alabilirsiniz.

Bir sonraki yazımda görüşmek üzere.

Hiç yorum yok:

Yorum Gönder