Merkezi Log Server Oluşturma – Rsyslog

Sistem adminleri, Network yöneticileri, Güvenlik uzmanları, Yazılımcılar ve hatta Hacker için bile olmazsa olmaz bişey varsa oda sistemde var olan log lar yada oluşacak log lardır. Log ların hayatımızdaki yeri ve önemi tartışılmazdır. Çünkü log lar aracılığı ile bir çok sorunun ve problemin üstesinden geliriz. Analiz gerçekleştirir, sistemlere olan saldırıları hatta öncesinde yapılmış saldırıları keşfederiz. Aslında daha fazla yazılacak teorik çok şey var fakat ben çok fazla uzatmak istemiyorum. Log, loglama deyince akan sular durur ve herkesin az çok bilgisi vardır. Ben hemen yapmak istediğim ortamı hayata geçireyim.

Ne yapmak istiyorum.? Ortamda merkezi bir log server oluşturmak istiyorum. Yani tüm sunucularımın, firewall yada benzeri cihazlarımın yada göndermek istediğim ne varsa log olarak, tek bir merkezi log sunucu oluşturup ona göndermek istiyorum. Bunun faydalarına gelince zaten aklınızda bir sürü ışık yanmıştır. Örneğin bence bu log server ı daha sonra 5651 yasasına göre değerlendirebilirsiniz yada sistemleriniz herhangi biri saldırıya uğradığında hacker bulunduğu o server daki log ları temizleyebilir fakat log server a erişimi olmadığından ordaki log lara dokunamayacak ve siz bu log ları rahatlıkla değerlendirebileceksiniz.

Ben senaryoyu iki sanal Linux sunucuda Syslog(rsyslog) servisini kullanarak gerçekleştireceğim. Sunuculardan biri client olacak, log basacak diğeri de log server olacak ve log ları üstüne çekip barındıracak. Bunu kullanıcı tarafında ve Log server tarafında bir kaç ayarlama ve yapılandırmayla sağlayacağız.

Ama öncesinde Log yapılarından, seviyelerin bahsedelim. Log lar facility ve severity – level olarak iki sütunda inceleyecek olursak eğer facility.level olarak belirlesek yanlış olmaz. Yani facility olarak (none, kernel, mail, cron, authpriv, user) desek, level olarak (emerg, critical, alert, err, info, debug) olarak ele aldığımızda; örneğin sistemdeki tüm herşeyin sadece hata log larını almak için (*.err kullanabiliriz.) yada bilgi mesajları ve yukarı doğru içerdiği log ları almak için (*.info kullanabilirsiniz.). Yukarı doğru derken hemen onu da açıklayalım. Mesela level-seviye olarak info seçilmiş ise içinde(emerg, critical, alert, err uda barındırmaktadır.), Seviyelerden en konuşkanı debug tır. Tüm her hareketi log lar.

 user.emerg yada user.err yada user.info gibi gibi kullanabilirsiniz.

 

 

Her Linux sistemde (“/etc/rsyslog.conf”) mevcut olan bir kaç satırdan bahsedeyim ve bahsedersek mevzu daha iyi anlaşılacaktır.

*.info;mail.none;authpriv.none;cron.none /var/log/messages      Burada sistemdeki her facility i (*) info seviyesinde al (*.info;) fakat mail,authpriv ve cron u alma, neden çünkü onları /var/log/ içerisinde başka bir dosyaya aldıracak, yapılandırmayı yapacak. Aşağıdaki screenshot ta durum daha net anlaşılacak.

Ayrıca Linux ta log lar için özelleştirilmiş local soketler bulunmaktadır. Daha fazla ayrıntı için syslog linkini ziyaret edin.

Bu kadar teorik bilgiden sonra hemen yapılandırmaya girişelim. Çünkü loglardan gene ve /var dizini /var/log dizininden ayrıntılı olarak yeri geldi mi bir başka makalede bahsedeğiz. Bir kullanıcı makinasından(192.168.2.71) log göndereceğimiz için orada yapılandırma yapacağız, ikinci olarak da log sunucuda(192.168.2.150) logları alabilmek için yapılandırma yapıp, işlemleri de teyit ettikten sonra makaleyi noktalayacağız.

 

*Server tarafında yapılandırma

Yapılandırmayı “/etc/rsyslog.conf” dosyasından gerçekleştireceğiz. Vi, vim yada nano editörü ile dosyanın içine giriyoruz. Ben vim i tercih ediyorum çünkü satırları renklendiriyor.

> vim /etc/rsyslog.conf

Bu dosyanın içerisinde; son iki satırda bulunan Modload ve Input satırlarındaki “#” işaretini siliyoruz.

Durum aşağıdaki gibi olacak, dosyayı kaydedip çıkın.

Ardından aşağıdaki komutla servisi restart edin.

> systemctl restart rsyslog.service

 

*Kullanıcı tarafından yapılandırma(Logları yönlendirelim);

Tüm log ları info seviyesinde göndereceğim.

Gene bir editör aracılığı ile “/etc/rsyslog.conf” yapılandırma dosyasına girelim. Ve aşağıda resimdeki gibi yapılandırıp, kaydedip çıkalım. Bu arada @(udp), @@(tcp) dir.

> vim /etc/rsyslog.conf

NOT: bu log ları lokalde tutmak istemiyorsanız, dosyanın içindeki yapılandırma satırları silebilir yada satırların başına “#” işareti koyarsanız, satılar yorum satırı olarak algılanacak ve log lar sadece log ları yönlendirdiğiniz sunucuda barınacaktır.

Şimdi burada da servisi restart edelim.

> systemctl restart rsyslog.service

NOT2: Ayrıca input girdilerini(log yönlendirme) aşağıdaki gibi daha spesifik olarak /etc/rsyslog.d/ (/etc/rsyslog.d/YntmLog.conf gibi) içine dosya olarak oluşturup, yönlendirebilirsiniz.

—–   >> “/etc/rsyslog.conf içine yazılacak.”

$ModLoad imfile

—–   >> “/etc/rsyslog.d/YntmLog.conf içine yazılacak, aslında /etc/rsyslog.conf içine de yazılabilir.”

##remote syslog settings

$InputFileName /var/log/httpd/access_log

$InputFileTag celery

$InputFileStateFile celery-file1

$InputFileSeverity info

$InputFileFacility local5

$InputRunFileMonitor

$InputFilePersistStateInterval 1000

local5.* @192.168.2.150

 

Şimdi sıra yaptığımız işlemi teyit etmekte. Bunu da “logger” komutu ile yapacağız. Yani o komut ile dışarıdan custom bir log üreteceğiz.

> logger -p user.info “Bu mesajı info seviyesinde oluşturduk ve log sunucuda görmeliyiz.”

Şimdi Log sunucusunda görebildiğimizi teyit edelim.

Bu arada sunucular arasında network erişimi ve 514 port’undan erişime açık olmalıdır.

Linux Trap Command Usage (Signals Catch) – Linux tuzak komutu kullanımı (Sinyalleri Yakalama)

Linux tarafında kullanışlı bir komuttan bahsetmek istiyorum. Bu komut daha çok sistem yöneticilerinin işine yarayacak türden olabilir. Kullanıcı tarafında bir işlem çalıştırıp, bitene kadar sürmesini isteyebilirsiniz (bu bash script leriniz olabilir) ve bunun kullanıcı tarafından sonlandırılmasını da engellemeniz gerekiyor gibi bir örnek vererek açıklamak doğru olacaktır. Tam da burada devreye trap komutu giriyor. Kafanızda nedir bu trap dediğinizi duyar gibiyim sanki. Trap komutu Linux sistemlerinde var olan sinyalleri yakalamaya yarayan bir komuttur. Ctrl + C (SIGINT) gibi, kill -15 (SIGTERM) gibi, kill -9 (SIGKILL) gibi gibi. Aslında Kill komutundan daha öncesinde bahsetmem gerekiyordu. Bir başka makalede ona değineceğiz, aklıma gelmişken trap komutunu aradan çıkarayım. Hem pekişmiş olur.

Aşağıdaki komut ile trap in yakalayabileceği sinyalleri listeleyelim.

> trap -l

Şimdi Ctrl + C sinyalini engelleyelim, yani kullanıcı istediği kadar ctrl+c ye bassın çalışan herhangi bir işlemi bu yöntemle sonlandıramayacaktır. Bunu aşağıdaki komut ile hayata geçire biliriz.

> trap — ” SIGINT yada trap ” 2 yada çift tırnak fark etmez ama tırnak koymalısınız.

Şimdi sleep 10 komutu(10 saniye bekle) ile işlemimizi test edelim. Ve aşağıda göreceğiniz gibi kaç kere olursa olsun ctrl+c tuşuna basıp kesme sinyali gönderirsem göndereyim, sinyal işe yaramıyor.

> sleep 10

Oluşturduğunuz trap lerin listesine aşağıdaki komutla ulaşabilirsiniz.

> trap -p

Trap leri kaldırmak için yani eskisi gibi sinyallerin çalışması için yaptığını sinyallere karşın komutu aşağıdaki gibi çalıştırın.

> trap SIGINT yada trap 2

FreeIPA(LDAP, DNS) – iDM(identity management) Kurulum ve Yapılandırması

FreeIPA Linux/Unix network ortamları için iDM(identity management) kimlik, kimlik doğrulama, DNS gibi servisleri barındıran bir merkez yönetim uygulamasıdır. Barındırdığı tüm servisleri management olarak web gui üzerinden basitçe yönetimini sağlar. Redhat iDM Ipa Server ın açık halidir diyebilirim. Barındırdığı servisler aşağıdaki gibidir.

389 Directory Server

MIT Kerberos

NTP

DNS

Dogtag (Certificate System)

Kuruluma geçmeden önce aşağıdaki komutu çalıştırın.

> yum update

Daha sonra “/etc/hosts” dosyasının içine gerekli bilgileri bir editör aracılığı ile yada aşağıdaki gibi benim girdiğim şekilde girin.

Daha sonra “/etc/hostname” kaynak dosyası içinden hostname inizi değiştirin. “hostname -f” komutu ile doğruluğunu kontol edebilirsiniz. Tekrar logout/login olduğunuzda TCentOS’u dc01 olarak göreceksiniz.

Şimdi ipa server paketlerini aşağıdaki komut ile yükleyelim. Komut bittikten sonra neler yaptığını rapor olarak ekrana basacaktır(Installed, Dependency Installed, Updated, Dependency Updated vs).

> yum install ipa-server bind-dyndb-ldap ipa-server-dns -y

Ardından DNS server olarak locali yapılandıralım. Bunu “/etc/resolv.conf ve /etc/sysconfig/network-scripts/ifcfg-(nic neyse artık)”

Selinux’u da yapılandırıp permissive moda çekelim yani pasif modda çalışsın yani log alsın fakat sisteme müdahelede bulunmasın. Fakat makina reboot olunca bilgiler kaybolur. Kaybolmaması için “cat /etc/selinux/config” dosyası içine SELINUX=permissive yazıp kaydedip çıkın.

Daha sonra aşağıdaki komutla İpa Server’ı yükleyelim ve aynı anda gerekli yapılandırmayı yapıp çalıştıralım.

> ipa-server-install –setup-dns

Aşağıda gördüğünüz üzere aynı anda yapılandırmaya başlıyoruz ve ilk olarak host name bilgisini istemektedir. Biz zaten başta sunucu hostname’ini yapılandırmıştık ve burda ENTER deyip geçiyoruz.

Daha sonra domain name bilgisi istemektedir. Biz senaryomuzda fatlan.local’u seçtiğimiz için zaten kendisi buldu ve burda da ENTER deyip devam ediyoruz.

Ardından realm name bilgisini istemektedir. Tekrar ENTER deyip devam ediyoruz.

Bu kısım önemli administrative user olan yani Directory Manager için şifre bilgileri girilmesi gerekmektedir. Bu kısımda password bilgisini girin.

Bu kısım da önemli çünkü bu seferde administrator’un GUI den yönetim için şifre bilgisini istemektedir. Burada login user “admin” dir. Buraya da belirlediğiniz şifreyi girin.

Daha DNS forwarders bilgisini istemektedir. Yani kendinde barındırmadığı kayıtlar için hangi DNS’e sorup çözdürmesi gerektiğini belirleyen kısımdır. Ben “no” diyorum, çünkü içerde GUI den de yapabilirim bu ayarları ama siz “yes” derseniz belirlediğiniz DNS server’ların ip bilgisini ardından girmeniz gerekmektedir.(örneğin, turktelekom dns yada google dns vs.)

Daha sonra reverse zone olup olmaması için sizden talimat beklemektedir. Ortam da mail server‘ınız varsa mutlaka yes ve ENTER demelisiniz. Reverse zone nun daha ayrıntılı araştırmalısınız. Konu uzamaması için burda “yes” deyip geçiyorum.

Daha sonra tüm girilen isteklerle yapılandırılsın mı diye soruyor, “yes” deyip kuruluma devam ediyoruz.

Ve kurulumumuz başarılı bir şekilde gerçekleşti ve burada çok önemli bir detay daha aşağıda görüldüğü üzere belirtilen portları açmanız şart diye bir uyarı veriyor. Bu işlemi de akabinde gerçekleştireceğiz.

Şimdi Firewalld’yi yapılandırıp aşağıdaki komutla, aşağıdaki portları açalım.

 

 

 

İlk önce şimdiki halini aşağıdaki komutla yapılandırılmamış halini görelim.

> firewall-cmd –list-all

Şimdi portları aşağıdaki şekilde açalım.

> firewall-cmd –add-service={http,https,ssh,ntp,dns,freeipa-ldap,freeipa-ldaps,kerberos,kpasswd,ldap,ldaps,freeipa-replication} –permanent

Daha sonra işlemlerin geçerli olması için aşağıdaki komutu çalıştırın.

> firewall-cmd –reload

Daha sonra tekrar listelediğimizde, servisler açıldığını otomatikman kullandığı tüm portların açıldığını anlıyoruz.

Daha sonra reboot edin.

Şimdi GUI bağlanalım, ama öncesinde kullandığınız makinanın DNS bilgisini kurduğunuz sunucu yapın yada “/etc/hosts” dosyanıza “ip domain_name” bilgisini yazın. Ve sonuç başarılı.

Hemen aşağıdaki komutla versiyon bilgisine bakalım, hem repo’daki güncel versiyonu çözmüş oluruz. Versiyon bilgisi önemli çünkü makalenin devamı gelecek ve versiyonuna göre işleyiş gerçekleştireceğiz. 4.5 olduğunu gördük.

> İpa –version

Aşağıdaki komutlada çalışan tüm servislerin durumuna bakalım.

> ipactl status

Aşağıdaki komut servisleri durdurur.

> ipactl stop

Aşağıdaki komuttaservisleri başlatır. Bu şekilde de yönetim gerçekleştirebilirsiniz.

> ipactl start

Daha fazla ayrıntı : https://access.redhat.com/