SELÇUK ÜNİVERSİTESİ
TEKNOLOJİ FAKÜLTESİ
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ
MÜHENDİSLİK TASARIMI PROJESİ
LİNUX İŞLETİM SİSTEMİNDE
ELK STACK İLE LOG İZLEME
Mustafa ERDOĞAN
21/11/2021
2.1 Log Nedir?
2.2 Log Toplama
2.3 Log Yönetimi ve Analizi
3.1 SIEM’ in Uygulama Adımları
3.2 SIEM’ in Önemi
4.1 Elasticsearch
4.1.1 Temel Elasticsearch Kavramları
4.2 Logstash
4.2.1 Logstash Nasıl Çalışır?
4.3 Kibana
4.4 Beats
5.1 Elasticsearch Kurulumu
5.2 Logstash Kurulumu
5.3 Kibana Kurulumu
5.4 Filebeat Kurulumu
5.5 Kibana Günlük Panosu Oluşturma
6.1 Nginx Nedir?
6.2 Nginx Kurulumu ve Yapılandırılması
6.3 Nginx Loglarını İzlemeye Alma
7.1 Neden Log Dosyalarını İzliyoruz?
7.2 Çoklu Giriş ve Çıkış Ayarlı Logstash
7.3 İzlenmesi Gereken Bazı Önemli Log Dosyaları
7.3.1 Syslog
7.3.2 Messages.log
7.3.3 Auth.log
7.3.4 Secure Log
7.3.5 Apt Logları
7.3.6 Dmesg Logları
7.3.7 Kern.log
7.3.8 Faillog
Bilişim teknolojileri sistemlerinden çeşitli sebeplerle log toplama ve arama ihtiyacımız doğar. Örneğin bir alışveriş sitesinde kullanıcı davranışlarını loglamak (müşteriler hangi tarayıcılarla, hangi ülkelerden geliyorlar, hangi ürünleri geziyorlar vb.) bu amaçlardan birisi olabileceği gibi, Windows ve Linux hibrit bir ortamdaki gibi sistemlerden de güvenlik amaçlı log toplamak isteyebiliriz.
Performans sorunları, kaynak tüketim oranları, sistemlerin erişebilirlik durumlarını izleme, ağda yaşanan problem ve tehditlerin çözümü sistemde yapılan değişikliklerin takibi gibi dahası iş yüklerini otomatize ederek sorun ile karşılaşmadan önce bu sistem ile durumu çözerek sorun oluşmadan önce giderilmesi çok önemlidir.
Bu proje kapsamında kişisel bilgisayarımıza açık kaynaklı ELK Stack ve yardımcı araçlarını kurup bağlantılarını sağlayarak esnek log toplama işini otomatikleştireceğiz. Bunun üzerinde incelemeler yapılarak güvenliğini sağlama yolunda adımlar atılacaktır.
Log, bilişim sistemlerinde gerçekleşen her bir olayın kaydı anlamına gelir. Sistemlerinizde bilgi ve isteğiniz dışında çalışan bir program veya daha da kötüsü davetsiz bir misafir olabileceğinden, logların kayıt altında tutuluyor olması sitemleriniz açısından kritik önem arz etmektedir. Eğer log kaydı tutulmazsa sistemlerinize zarar verebilecek bu tür durumlardan yalnızca zarar gördükten sonra haberiniz olur. Bu da kurumunuza maddi ve manevi zararlar verebilir.
Örnek vermek gerekirse; bir internet sayfasına giriş yapan kullanıcının internet sayfasının sunucusunda; kullanıcının IP adresi, konum bilgisi ve yaptığı işlemler gibi bilgilerin logları tutulmalıdır. Çünkü bu kullanıcı sayfa üzerinde normal bir kullanıcının yaptıkları dışında sisteme zarar verecek işlemler yapabilir. Örneğin bir form doldurma yerinde istenilen dışında meta-karakterler girerek sistemi manipüle etmeye çalışabilir ve eğer başarırsa kritik verileri ele geçirebilir. Bu gibi durumlarda internet sayfanızda gerçekleşecek olayların loglarını kayıt altında tutmanız, saldırgan form ekranına istenilen dışında bir giriş yaptığın da, veya kötü niyetli başka bir eylem gerçekleştirdiğin bunun farkına önceden vararak saldırganın erişimini kısıtlayabilmenizi sağlayacaktır.
Log toplama, çeşitli yerlerden gelen kayıtların bir arada tutulmasındır. Ama log toplama, toplanan logların analizinin yapılması ve doğru cihazdan doğru formatta log gelmesi gibi birçok zorluğu vardır. Bundan dolayı gelen logların analizi ve logu doğru formata dönüştüren birçok yazılım bulunmaktadır. Çünkü asıl mesele gelen kayıtların analizinin doğru yapılmasıdır. Biz bu çalışmamızda ELK Stack open source yazılımlarını kullanacağız.
Loglar kayıt altına alınırken yaşanılan en büyük zorluk gereksiz, fazla log alınmasıdır. Önemli olan fazla log toplamaktansa ihtiyaçlara, olaylara göre belirlenerek çözüm için fayda verecek logların toplanması gerekir. İşte burada log yönetimi bu işleri yapmamıza yardım edecek ve olaylar arasında log bağlantısı kurarak log analizini rahat yapma imkânı sunar.
Log izleme, tüm kritik ağlar ve cihazları kapsayan bilişim sistemlerinin ürettiği olay kayıtlarının(loglarının) belirlenen kurallara göre analiz edilmesi olarak tanımlanmaktadır. Logların kapsamlı bir şekilde toplanması, birleştirilmesi, orijinal haliyle saklanması, metin olarak analizi ve sunumu gibi adımlardan oluşan log yönetimi ise saldırının göstergelerini ve delillerini elde etmeye olanak sağlamaktadır.
Logların kayıt altına alınıyor olması etkili bir çözüm olabilir fakat tek başına yeterli değildir. Loglar, güvenlik denetimi sağlamak amacıyla merkezi olarak kaydedilmeli ve arşivlenmelidir. Sistemde hangi logların tutulacağı ihtiyaca göre belirlenmeli ve log yönetimi ve analizi yapılmalıdır. Kuracağımız sistemde kayıt altına alacağımız olaylardan bazıları aşağıda verilmektedir.
• Uygulamalara ait Loglar
• Web aktiviteleri
• Jboss kullanıcı komut geçmişi
• Sistem logları
• Ağ üzerindeki hareketler
• Kullanıcı hareketlerin takibi
• Dizin / Dosya erişim takibi
• Tüm giriş denemeleri
• Port tarama logları
• Hatalar
SIEM belirlenen politika ve kuralların yardımıyla bağımsız gibi görünen olaylar arasında anlamlı bağlantılar kurarak muhtemel saldırıları tespit etmeye yardımcı olan korelasyon tekniğidir. SIEM ürünleri çevre birimlerden uç kullanıcılara kadar sistemlerin ürettiği logları merkezi olarak toplayan, saklayan ve analiz eden sistemlerdir. SIEM ’in çeşitli sistemlerden loglanan farklı formatlardaki olay kayıtlarını ortak bir veri modeline dönüştürmesi işlemine normalleştirme denir. Korelasyon aşaması önceden belirlenmiş kuralların yardımıyla farklı farklı sistemlerden veya uygulamalardan gelen olayları bağlantılandırarak güvenlik tehditlerinin tespitine ve harekete geçilmesine yardımcı olur. Birleştirme ise olayların birden fazla sayıda kaydı tutulmuşsa bunları bir kayıta indirerek analiz edilecek verinin hacmini düşürmekte ve işlemleri hızlandırmaya yardımcı olmaktadır.
- Toplanan logların global bir formata dönüştürülmesi ve olayların saldırı tipine göre sınıflandırılması yöntemlerini kullanarak normalleştirme ve kategorilendirme adımlarını uygulamak
- Bağımsız gibi görünen olayları birbiriyle bağlantılandırmak ya da olayları datayla ilişkilendirmek
- Yöneticilere mail, SMS veya SNMP mesajları ile bildirim veya alarm sağlamak
- Toplanan veri ve korelasyon sonuçlarını gerçek zamana yakın bir ölçüde güvenlik uzmanlarına sunan izleme paneli sağlamak
- SIEM ürünü tarafından toplanan verinin analiz aşamalarını kapsayan rapor üretmek
SIEM ürünleri gerçek zamanlı raporlama ve güvenlik olayları analizi sağlayarak ağlara yönelik en son tehditleri tespit edebilme imkânını sunarlar. Ağ güvenliğine yönelik tehditler hızla yayılmakta ve her geçen gün yenileri ortaya çıkmaktadır. Uzaktan erişim noktalarının ve ağlara bağlanan cihazların sayısındaki artış ağlara sızma noktalarının da çoğalmasına neden olmaktadır. Bilişimciler ağın karşı karşıya kaldığı tehditleri algılayabilmek için birden fazla kaynaktan toplanan veriyi analiz etmek ve bunların sonucunda atılacak adımları kararlaştırmak durumundadırlar.
Saldırıların tespit edilmesi, dijital delillerin kaybedilmesine olanak vermeyecek şekilde daha fazla zararın oluşmasının önlenmesi, bütünsel bir güvenlik analizi raporlaması ve güvenlik tehditlerinin gerçek zamanlı olarak izlemeye alınması gibi önemli hizmetleri sunan SIEM ürünleri ağ geçidi, sunucular, güvenlik duvarları ve diğer kritik BT bileşenlerinin nasıl bir saldırı ile karşı karşıya kaldığı konusunda ayrıntılı rapor üretirler.
Elk Stack, Modern uygulamaları ve BT altyapısını izlemek, mühendislerin yüksek düzeyde dağıtılmış, dinamik ve gürültülü ortamları izleme zorluğunun üstesinden gelmelerini sağlayan bir log yönetimi ve analiz çözümü gerektirir. Kullanıcılara birden fazla veri kaynağından veri toplayan ve işleyen, bu verileri veri büyüdükçe ölçeklenebilen tek bir merkezi veri deposunda depolayan ve verileri analiz etmek için bir dizi araç sağlayan güçlü bir platform sağlayarak yardımcı olur.
Elk Stack, açık kaynak kodlu log toplama, arama ve analiz bileşenlerinin tamamına verilen genel addır. Kabaca aşağıdaki bileşenlerden oluşur;
• Elasticsearch• Kibana
• Logstash
• Beats ailesi
o Winlogbeat
o Filebeat
o Packetbeat
Elasticsearch esasında bir arama ve veri indeksleme motorudur. Geri planında, Apache Lucene projesini kullanır. Bunu bir veri tabanı olarak düşünebilirsiniz. Verileri Logstash ya da doğrudan Beats Agent ’ları üzerinden alarak onları aranabilir halde indeksler. Ve REST ve JSON teknolojilerini kullanarak HTTP protokolü üzerinden veri üzerinde arama, ekleme, silme vb. operasyonları yapmanızı sağlar. Dinamik ve gürültülü ortamları izleme zorluğunun üstesinden gelmelerini sağlayan bir log yönetimi ve analiz çözümü gerektirir.
Kullanıcılara birden fazla veri kaynağından veri toplayan ve işleyen, bu verileri veri büyüdükçe ölçeklenebilen tek bir merkezi veri deposunda depolayan ve verileri analiz etmek için bir dizi araç sağlayan güçlü bir platform sağlayarak yardımcı olur. En büyük avantajlarından birisi esnekliği ve bu sebeple sağlanan kolay ölçeklenebilme avantajıdır.
- Index: Elasticsearch üzerinde veri indekslenerek JSON formatında tutulur. Yani dökümanlarınızın içindeki her bir kelime(terim) için hangi döküman ya da dökümanlarda o kelimenin olduğu bilgisini tutan indexler ayrıca JSON belgeler topluluğudur. Indexi Database kavramı gibi düşünebiliriz.
- Type: Veri tabanı yönetim sistemlerinde kullandığımız tablolar gibi düşünebiliriz. Index içerisindeki verileri mantıksal olarak bölümlememizi sağlar. Örneğin e-ticaret sistemleri için ürünler, kategoriler, log bilgileri gibi verilerin her birini bir type olarak düşünebiliriz. Bir index içerisinde birden fazla type barındırabiliriz.
- Mapping: Amacı, ilgili dökümanın arama motoruna nasıl aktarılacağının tanımlanmasıdır. Kısaca veri tabanında isimlendirdiğimiz bir schema diyebiliriz.
- Document: Elasticsearch’ deki her bir kayda, yani row’ a document denir.
- Field: Her bir döküman içindeki alana, field denir. Yani DB’deki bildiğiniz column.
- Cluster: Bir veya daha fazla düğümün bir koleksiyonudur. Cluster, tüm veriler için toplu dizin oluşturma ve arama yetenekleri sağlar.
- Node: Elasticsearch’ in tek bir çalışan örneğini ifade eder. Tek fiziksel ve sanal Sunucu; RAM, depolama ve işleme gücü gibi fiziksel kaynaklarının yeteneklerine bağlı olarak birden çok düğüm barındırır.
- Shard: Indexler yatay olarak parçalara ayrılır. Bu, her bir parçanın, belgenin tüm özelliklerini içerdiği, ancak dizinden daha az sayıda JSON nesnesi içerdiği anlamına gelir.
- Replica: Tamamen güvenlik amaçlı çalışan, her verinin bir kopyasının bulunduğu başka makinalardır. Böylece bir makina çöktüğünde replica veya replicalarından biri devreye girebilecektir. Örneğin aşağıda 3 Node 3 Shard’ lı bir yapı söz konusudur. Ve her bir Shard’ın 1 yedeği, yani 1 Replicası bulunmaktadır. Toplamda 6 sunucu bulunmaktadır. Her bir Shard’ın Replicasının başka bir Node ’da bulunması gerekir.
Şekil 1 - Shard ve Replica Kavramı
Açık kaynak kodlu bir veri toplama motoru diyebiliriz. Gönderilen logları toplar ve conf dosyasında belirtilen filtreleme işlemlerine göre çıktı üreten Elasticsearch’e bu logları indekslenmek üzere gönderen sistemdir. Bu işlemlere örnek olarak gelen log üzerinde ismini değiştirmek istediğiniz sütunlar olabilir, host adına göre yeni eklemek istediğiniz sütunlar olabilir veya Timestamp formatını değiştirmek için filtreler yazılabilir. Son olarak formatı ayarlar ve Elasticsearch’e iletir.
Logstash Pipeline ’ı temel olarak 3 aşamadan oluşur. Input, Filter ve Output,
Input: Eventlerin gelmesi, oluşturulmasıdır.Filter: Gelen eventlerin üzerinde aksiyonlar, transformasyonlar gerçekleştirir.
Output: Eventleri başka bir yere aktarır.
Toplanıp anlamlı hale gelen verinin, analizini yaptıktan sonra ki görselleştirme işlemini yapar. ELK, DevOps yaşam döngüsünde Monitoring kısmına hizmet ederler. İstenen verilerin toplanıp, anlamlı hale getirilmesi ve sonrasında bunların merkezi bir birimde toplanıp analiz süreçlerine sokularak görseller ile bize sunar.
Beats ürün ailesinin üyelerini sistemlerden Logstash ‘a gönderen ajanlar olarak düşünebiliriz. Biz çoğunluk olarak Filebeat kullanacağız.
Winlogbeat: Windows olay günlükleri için hafif göndericimizdir. Bir Windows hizmeti olarak yüklenir ve çalışır ve olay günlüğü verilerini Elasticsearch veya Logstash 'a gönderir.Packetbeat: Kurduğunuz sisteme dair network verisi getiren bileşendir. Bu sayede örneğin kritik bir sunucunuzdaki network anormalliklerini izleyebilirsiniz.
Filebeat: Bir dosyayı izleyerek bu dosya içeriğindeki değişiklikleri gönderen Beats ailesi ürünüdür. Örneğin /var/log/httpd.log dosyanızı bu ajana göstererek bu dosyayı loglayabilirsiniz.
Şekil 4 - ELK Stack Çalışma Mantığı
Beats ve Logstash veri toplama ve işleme ile ilgilenir, Elasticsearch verileri endeksler ve saklar ve Kibana verileri sorgulamak ve görselleştirmek için bir kullanıcı arayüzü sağlar. Şimdi bu sistemi ayağa kaldırmak için gerekli paket ve bağlılıkları kurduktan sonra kurulumlara başlıyoruz.
1) Java ve tüm bağlılıkların yüklenmesi: Elasticsearch, makinemizde bulunan OpenJDK gerektirir. Java’yı aşağıdaki komutu kullanarak HTTPS desteği ve APT için wget paketleriyle birlikte yüklüyoruz.apt install -y openjdk-11-jdk wget apt-transport-https curl
Şekil 5 - Java ve bağımlılıklarının kurulumu
- GPG Anahtarı Aktarımı: Elasticsearch genel anahtarını APT ’ye aktarıyoruz. ’OK’ çıktısını aldığımızda işlem tamamlanmıştır.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
Şekil 6 - GPG anahtarın aktarımı
- sources.list.d dizinine Elastic deposunu ekliyoruz.
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Şekil 7 - Elastic deposunu ekleme
Elasticsearch ve Kibanayı kurduktan sonra ilerleyen aşamalarda nginx’in arkasına yerleştirerek parolalı erişim ile güvenliğini artıracağız. Elasticsearch, 9200 numaralı bağlantı noktasındaki trafiği dinliyor. Dış tarafların REST API aracılığıyla verilere erişememesi veya elastik kümeyi kapatmaması için Elasticsearch örneğimize dışarıdan erişimi kısıtlayacağız.
- Sistem havuzunu güncelliyoruz.
sudo apt update
- Elasticsearch ’ü kurun:
sudo apt install elasticsearch
- Elasticsearch.yml yapılandırma dosyasını düzenliyoruz.
sudo nano /etc/elasticsearch/elasticsearch.yml
Şekil 8 - elasticsearch.yml yapılandırması
-
Elasticsearch hizmetlerini başlatın ve etkinleştirin.
systemctl start elasticsearch
systemctl enable elasticsearch
-
Elasticsearch durum kontrolü;
Elasticsearch, 9200 numaralı bağlantı noktasını dinliyor. Bunu localhost:9200 adresinden kontrolünü sağlıyoruz.
Şekil 9 - Elasticsearch durum kontrolü
Logstash JSON formatında yazılmış config dosyaları ile yönetilir. Filebeat kullanarak farklı dosyalardan günlükleri toplayarak ve bu günlükleri merkezleştirmek için Logstash’e göndereceğiz.
1) Logstash’i kurun;`sudo apt install logstash`
Pipeline Config dosyaları ise /etc/logstash/conf.d/ dizinindedir. Burada input, filter ve output olmak üzere 3 farklı formatta logstash yapılandırma dosyası oluşturulur. Pipeline ile ilgili esnek davranabilirsiniz. Örneğin tüm inputları tek bir input dosya da toplayabilir ya da ayrı ayrı inputlar oluşturabilirsiniz. Ya da Filter dosyasını gelen log tiplerine göre ayırabilir, ya da iç içe yazabilir tek bir output oluşturabilirsiniz. Yani esneksiniz. Logstash’i indirdik fakat input, filter ve output yapılandırmalarını ilerleyen bölümlerde yapılandıracağız.
Kibana 5601 portundan iletişim kurmaktadır ve localhost:5601 adresinden tarayıcı üzerinden arayüze erişebiliriz.
-
Kibanayı kurun;
sudo apt install kibana
-
Kibana yapılandırma dosyasında port ve host ayarlarını düzenliyoruz;
sudo nano /etc/kibana/kibana.yml
Şekil 10 - kibana.yml yapılandırması
-
Kibana hizmetini başlatın ve etkinleştirin;
systemctl enable kibana
systemctl start kibana
-
Kibana arayüzüne erişim;
localhost:5601
Şekil 11 - Kibana arayüzüne erişim
Data & Log transferi için farklı farklı Beat ajanları mevcut. Örneğin, Filebeat log dosyaları için, Packetbeat network paketleri için, Winlogbeat ise Windows logları için kullanılıyor. Şimdilik test amaçlı syslog’ları görmek için Filebeat’i kurup logları Logstash’e göndermeden direk Elasticsearch’e göndererek Kibana dan bu logları göreceğiz.
- Filebeat’i kurun;
sudo apt install filebeat
- filebeat.yml yapılandırma dosyasını düzenliyoruz.
• Yapılandırdığımız alanı etkinleştirmek için;
enable: true
•/var/log/*.log
Taranması ve getirilmesi gereken yoldaki tüm dosyalar olarak belirledik.
Şekil 12 - filebeat.yml yapılandırması-1
Şekil 13 - filebeat.yml yapılandırması-2
`systemctl enable filebeat`
`systemctl start filebeat`
Tarayıcımızı açıp `https://localhost:5601` ‘e gidiyoruz. Stack Management > Index Pattern yoluna ulaştığımızda aşağıdaki gibi ekranı göreceğiz.
Indeks modelimiz olarak filebeat-* tanımladık. Şimdi oluşturmadan önce bazı ayarları belirleyebiliriz. Zaman filtresi alan adı alanında @timestamp'ı seçip modeli oluşturuyoruz.
Şekil 15 - Index Pattern timestamp
Discover ekranına geldiğimizde oluşturduğumuz index şablonunu seçerek logların kibana arayüzüne aktarıldığını görüyoruz. Bu kurulumda örnek olarak /var/log dizinin altındaki tüm Syslog’ların logların merkezi bir alanda toplanılmasını sağladık. İlerleyen konularda bu örnekler filebeat’ den direk olarak değil de Logstash üzerinden gönderimlerini sağlayacağız.
Şekil 16 - Discover arayüzü log takibi
Elasticsearch http API arayüzü üzerinden çalıştığı için bir sunucu üzerinden çalıştırdığınızda dış dünya tarafından ulaşılabilir halde çalışıyor olacaktır. Burada Elasticsearch erişimini dış dünyaya yani sizin uygulamanız dışındaki kişilere erişimi kapatmak için birkaç yol bulunmaktadır. Bunlardan birisi de kullanıcı adı ve şifre ile koruma yöntemidir. Bu yöntem sizin sunucularınızı tabi ki tamamen koruyamayabilir. Ancak kısıtlama iç ağdan birilerinde elasticsearch içerisinde rahatça işlem yapmalarını engelleyemez. Bunun için kullanıcı adı ve şifre ile koruyarak buradaki erişimi iç ağ üzerinde de kısıtlamaya çalışacağız. Bunu nginx yazılımı ile yapacağız.
Yüksek eş zamanlı çalışma kabiliyeti, yüksek performans ve düşük hafıza kullanımına odaklanılarak tasarlanmış bir Web sunucusudur. Aynı zamanda ters vekil sunucusu, yük dengeleyicisi ve http ön belleği olarak da kullanılabilir. Biz burada ters vekil sunucu özelliğini kullanarak Elasticsearch ve Kibanayı nginx’ in arkasına koyarak kullanıcı ve şifre ile koruma altına alacağız.
-
Nginx ve ‘Apache2-utils’i yüklüyoruz;
sudo apt install nginx apache2-utils -y
-
elastic ve kibana adında serverlar oluşturuyoruz ve yapılandırıyoruz;
nano /etc/nginx/sites-available/kibana
nano /etc/nginx/sites-available/elastic
Localhost:9200 adresi üzerinde çalışan Elasticsearch ile localhost:5601 üzerinde çalışan kibana için elastic.local ve kibana.local domain’ inde ve 80.porttan çalışacak şekilde serverlar oluşturduk. Oluşturulan serverlara gelen bütün istekleri proxy_pass ile yönlendiriyoruz. Böylelikle uygulama içerisinde Elasticsearch ve Kibana ya erişmek için yeni server adreslerimizi kullanacağız.
Bu ayarlardan sonra firewall üzerinden 9200 ve 5601 portuna erişimi engelliyoruz ki bu portların üzerinden API arayüzü kullanılmaya devam etmesin. Sadece nginx’ in olduğu sunucu üzerinden erişilebilir olsun. Bu uygulamamda bu işlemi kendi bilgisayarımda yaptığım için bu erişişim konusunu göz ardı ettim.
Şekil 17 - Elastic server yapılandırması
Şekil 18 - Kibana server yapılandırması
- Şimdi buradaki asıl koruma aut_basic_user_file /etc/nginx/htpasswd.users yapılandırmasındadır. Bu dosyadaki bilgilere göre bu alana gelen istekleri koruma altına alıyoruz. Aşağıdaki kod ile kullanıcı adı ve şifre oluşturuyoruz ve etkinleştiriyoruz;
• sudo htpasswd -c /etc/nginx/.kibana-user elkadmin
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
dosyanın içeriği aşağıdaki gibidir;
Şekil 19 - htpasswd.user içeriği
- Oluşturduğumuz serverlar için DNS kayıtlarını giriyoruz.
sudo nano /etc/hosts
Şekil 20 - /etc/hosts kayıtları
-
Nginx hizmetini etkinleştirip başlatıyoruz;
nginx -t
systemctl enable nginx
systemctl restart nginx
-
Artık elastic.local ve kibana.local adresi üzerinden erişim sağlayabiliriz. Örnek olarak kibana.local üzerinden deniyoruz.
Şekil 21 - kibana.local erişimi
Bu işlemde Filebeat’in nginx modülünü kullanarak logları Logstash’e yönlendireceğiz. Logstash de Grok dili ile filtreleme şablonu oluşturarak gelen logları Elasticsearch’e aktaracağız. Bu işlemin amacı Elasticsearch ve Kibana’ya hem doğru hem de yanlış erişim denemelerin takibe alınmasıdır.
- Filebeat in çalıştığını kontrol edip nginx modulünu etkinleştiriyoruz.
systemctl status filebeat
sudo filebeat modules enable nginx
Şekil 22 - Filebeat modül listesi
- filebeat.yml dosyasını yapılandırıyoruz;
Şekil 23 - filebeat.yml input yapılandırması
Bu sefer Elasticsearch çıktısını pasif duruma getirip Logstash yapılandırılmasını aktifleştiriyoruz. Filebeat’den gelen loglar direk Elasticsearch’e gitmeyecek Logstash’e gönderilecektir. Bu işlem sonucunda filebeat hizmetini yeniden başlatıp çalıştırıyoruz.
`systemctl restart filebeat``filebeat setup`
Şekil 24 - filebeat.yml output yapılandırılması
- Dosya izinlerini güncelliyoruz;
chown -R www-data:adm /var/log/nginx
system restart nginx
usermod -aG adm logstash
Şekil 25 - Nginx dosya izinleri
- Grok komutları için desen dosyası oluşturuyoruz. Oluşan dosyayı yetkilendirerek Grok desen kodunu kaydediyoruz.
mkdir /etc/logstash/pattern
chmod 755 -R /etc/logstash/Pattern
sudo nano /etc/logstash/Pattern/nginx
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
Şekil 26 - Pattern desen dosyası
- Logstash ‘in Pipeline (Boru Hattı) sisteminin üzerinde çalıştığı conf.d klasörünün altında nginx.conf yapılandırma dosyasını oluşturuyoruz. Bu dosya içerisinde yazdığımız kodlar ile Logstash ’in input, filter ve output ayarlamasını sağlıyoruz.
Şekil 27 - Logstash yapılandırma dosyası
-
Logstash hizmetini yeniden başlatıyoruz.
systemctl restart logstash
-
Son olarak kibana günlük panosu oluşturacağız. kibana.local adresine gidip Indeks modelimiz olarak nginx-* tanımladık. Zaman filtresi alan adı alanında @timestamp'ı seçip modeli oluşturuyoruz. Discover ekranına geldiğimizde nginx üzerindeki Access.log ve error.log dosyalarından logları çektiğini görüyoruz. Örnek olarak bir logu açtığımızda “elkadmin” kullanıcı adımız sisteme düşmüştür.
Şekil 28 - Nginx log kayıtları
Log dosyaları, Linux’un yöneticiler için depoladığı, sunucu, çekirdek, hizmetler ve üzerinde çalışan uygulamalar hakkındaki önemli olayları izlemesi için kaydedilen kayıtlardır. Bu yazıda, sunucu yöneticilerinin izlemesi gereken Linux Log dosyalarını gözden geçireceğiz.
Log dosyaları, Linux yöneticilerinin önemli olayları izlemesini sağladığı bir dizi kayıttır. Çekirdek, hizmetler ve üzerinde çalışan uygulamalar dahil olmak üzere sunucu hakkında mesajlar içerirler. Linux, / var / log dizini altında bulunabilen merkezi bir Log dosyaları deposu sağlar.
Bir Linux ortamında oluşturulan log dosyaları genellikle dört farklı kategoride sınıflandırılabilir:
1. Application (Uygulama) Logları2. Event (Olay) Logları
3. Service (Servis) Logları
4. System (Sistem) Logları
Log yönetimi, bir sistem yöneticisinin en önemli sorumluluklarından biridir. Sistem üzerinde gerçekleşen olaylardan haberdar olmak, sistemin durumunu öğrenmek, alınan hata mesajlarının sorunun sebebinin ne olduğunu bilmek ve bunlara göre çözüm bulmak sistem yöneticisinin görevidir. Tabi ki günümüzde artık makine öğrenmesi sayesinde bu log analizi işlemleri daha hızlı ve daha aktif şekilde yapılmaktadır. Bu yüzden de bu log kayıtları hayati önem taşımaktadır.
Kısacası, Log dosyaları, ortaya çıkmadan önce ortaya çıkacak sorunları önceden tahmin edebilmenizi sağlar.
Logstash, bir giriş ve çıkış verileri üzerinden gönderim yapmanın yanışına bunu ihtiyacımız olanı kadar esnetebilmemiz için bize imkan sağlamaktadır. Yani her bir dosya için tek tek .conf dosyası oluşturmak yerine bu işlemi bir dosya içerisinde Şekil – 29 da ki yapıyı kullanarak halledebiliyoruz. Her input girişi için bir etiket(tags) değeri atıyoruz. Bu etiket değeri üzerinden koşul işlemleri ile yönlendirmeler yapıyoruz. Bu aşamadan sonra biz bu yapı üzerinden gideceğiz.
Şekil 29 - Multiple inputs and Outputs Logstash
Syslog, Linux işletim sistemimiz üzerinde neler olup bittiğini öğrenmek ve geriye yönelik sisteme giriş, uyarı, durum, hata ve rapor gibi kayıtların tutulduğu sistemlerdir. Bu sayede sistem yöneticileri için büyük önem taşır. Syslog sistem hatalarının, saldırıları veya işletim sisteminde oluşan problemler gibi durumları kayıt altında tutar. Bu gibi durumları tespit edebilmemiz için SysLog kayıtlarını geçmişe yönelik olarak incelememiz yeterli olacaktır. Bu kayıtlar sayesinde sistem yöneticileri sistem üzerindeki anormallikleri tespit ederek sistemin verimli veya güvenli çalışmasını sağlar, olası hata durumlarında çözüm üretebilirler.
Syslog sistemlerinin bir diğer özelliği de başka bir sisteme bu kayıtların aktarılabilmesidir. Bu sayede uzaktan log kayıtlarınıza erişebilir ve yönetim sağlayabilirsiniz. Klasik Linux sistemlerde bu kayıtlar /etc/syslog.conf şeklinde ayarlanabilir. Ancak modern Linux sistemlerde SysLog’a yeni özellikler eklenerek rsyslogd servisi geliştirilmiştir.
`nano /etc/rsyslogd.conf`Klasik Linux sistemlerde log kayıtları /var/log dizini altında tutulmaktadır. Bu dizin SysLog aracılığı ile ortak bir şekilde log kayıtların tutulduğu önemli bir dizindir. Biz bu örnekte Syslog.conf dosyasından yönlendirme ayarlarına dokunmadan filebeat ile bu dizindeki logları alacağız.
Örnek: Sistem günlüğüne bir mesaj yazalım ardından yazdığımız mesajı SysLog dosyasından görelim. Bu işi yapan logger programı hızlı bir şekilde basit bir komutla sistem günlüğüne mesaj yazmanızı sağlar. Aşağıdaki komutu kullanarak sistem günlüğüne “Mühendislik Tasarımı” yazalım, hemen ardından tail komutunu kullanarak yazdığımız mesajı SysLog dosyasında görelim.
Şekil 31 - Logger SysLog Örneği-1
Şekil 32 - Logger SysLog Örneği-2
- Filebeat yapılandırma dosyasında tüm SysLog dosyalarını okuması için tanımlamasını yapıyoruz.
sudo nano /etc/filebeat/filebeat.yml
Şekil 33 - filebeat.yml Yapılandırma Dosyası
- Logstash conf.d dizinine giderek daha önce oluşturduğumuz tek giriş ve çıkış yönlendirmeli yapılandırma dosyasını Şekil 33 de görmekteyiz.
cat /etc/logstash/conf.d/nginx.conf
Şekil 34 - Logstash Yapılandırma Dosyası
- Bu adımda logstash/conf.d dizininde oluşturduğumuz yapılandırma dosyasını Şekil 29 da ki yapıya uyarlayarak daha önceden oluşturduğumuz nginx erişim yönlendirmesinin üzerine SysLog dosyasını ekleyeceğiz.
sudo nano /etc/logstash/conf.d/nginx.conf
dosyasını açarak ilk olarak input kısmını ekliyoruz.
Burada nginx ve SysLog girişlerine bir etiket(tags) belirliyoruz. Bu etiket üzerinden filter ve output adımlarında koşullu işlemlere dahil edeceğiz.
Şekil 35 - Yapılandırma Dosyası İnput Alanı
Şekil 36 - Yapılandırma Dosyası Filter Alanı
• Output alanında ise etiket değerlerine göre elasticsearch de index oluşturma işlemini gerçekleştiriyoruz.
Şekil 37 - Yapılandırma Dosyası Output Alanı
- Logstash ve filebeat hizmetlerini yeniden başlatıyoruz.
systemctl restart filebeat
systemctl restart logstash
- Son olarak kibana günlük panosu da syslog-* Indeks modelimizi tanımladık. Discover ekranına geldiğimizde SysLog üzerinden okunan logları görebiliyoruz. “Logger” komutu ile oluşturduğumuz “Mühendislik Tasarımı” bilgisini de görebiliyoruz.
Bu log dosyasında genel sistem etkinlik logları tutulur. Bilgi amaçlı ve kritik olmayan sistem mesajlarını saklamak için kullanılır. Debian tabanlı Linux dağıtımlarında “/var/log/syslog” dizini ile benzerlik gösterir. Bir sorun olup olmadığının kontrolü için bakılması gereken ilk log dosyası burası olmalıdır. Bu log dosyası sayesinde aşağıdaki şeyleri öğrenebiliriz.
- Çekirdek dışı önyükleme hataları
- Uygulamalar ile ilgili servis hataları
Bu örneklerin üzerinden gittiğimiz Linux dağıtımı Ubuntu da /var/log/messages log dosyasının tuttuğu loglar SysLog kayıtlarında bulunmaktadır. Bu nedenle bu logları biz bir önceki Syslog başlığı altında izlemeye almış olduk.
Kimlik doğrulama işlemleri ile ilgili tüm olaylar buraya kaydedilir. Debian ve Ubuntu dağıtımlarında bu log dosyasını görebilirsiniz. Aslında önemli bir log dosyasıdır. Güvenlik açıkları ile ilgili tespit yapmaya çalışıyorsanız buraya bakmanız gerekir. Sisteme kim giriş yapmış, kim kaç kere yanlış şifre girmiş veya kaba kuvvet saldırı deneyen birini buradaki log kayıtları ile tespit edebilirsiniz. Buradaki kayıtları ile aşağıdaki olayları tespit edebilirsiniz:
1. Sisteme giriş yapan kişileri2. Yanlış şifre deneyen kişileri
3. Başarılı veya başarısız oturum açan kişileri
4. Kaba kuvvet saldırısı deneyen kişileri
- Filebeat yapılandırma dosyasında tüm auth.log dosyalarını okuması için tanımlamasını yapıyoruz.
sudo nano /etc/filebeat/filebeat.yml
- logstash/conf.d dizininde ki yapılandırma dosyamıza auth.log dosyalarını input alanında tanımlıyoruz. Elasticsearch’e gerekli index’i oluşturması için yönlendirme tanımlamasını ise output kısmında gerçekleştiriyoruz.
sudo nano /etc/logstash/conf.d/nginx.conf
Şekil 40 - logstash/conf.d/nginx.conf -> input
Şekil 41 - logstash/conf.d/nginx.conf -> output
- Burada önceki yapılandırma dosyalarındaki yaptığımız değişikliklerden bir fark var. O da auth.log dosyası için bir filter yapılandırması tanımlamadık ve ona uygun Grok şablonu kullanmadık. Bu şekilde de logstash yapılandırılması mevcuttur. Fakat okunabilirliği artırmak için, ihtiyaca göre değişiklik gösterdiği için tercih size kalmıştır.
- Kibana üzerinden “Stack Management-> Index Pattern” üzerinden auth.log dosyaları için modelimizi oluşturuyoruz. Discover sekmesinden ise bu logları detaylı bir şekilde görebilirsiniz.
Şekil 42 - Discover auth.log detay
NOT: Eğer güncel logları görmekte problem yaşıyorsanız Şekil 42’de ki saat ayarlarını güncelleyiniz.
Şekil 43 - Discover Zaman Bilgisi
RedHat ve CentOS tabanlı sistemler /var/log/auth.log yerine bu log dosyasını kullanır. Temel olarak ise authentication sistemlerinin kullanımını izlemek için kullanılır.
Kimlik doğrulama hataları dahil, güvenlikle ilgili tüm mesajları saklar.
Ayrıca sudo girişlerini, SSH girişlerini ve sistem güvenlik hizmetleri arka planında oturum açan diğer hataları izler.Bur örneğimizde Ubuntu üzerinde auth.log dosyasını bir önceki adımda izlemeye almıştık.
Sisteme yeni bir paket yüklendiğinde bu işlemin bilgileri buraya kaydedilir. Linux dağıtımlarına göre paket türleri değişmektedir. Biz Ubuntu üzerinden ilerlediğimiz için /var/log/apt dizini altındaki history.log ve term.log dosyasını izlemeye alacağız. Farklı bir dağıtım için /var/log/ dizinin altında uygun paketin log dosyasını izlemelisiniz.
Bu log dosyası sayesinde şunları öğrenebiliriz:1. Bir paketin doğru kurulup kurulmadığını
2. Yazılım yüklemeleriyle ilgili sorunları
3. Yakın zamanda kurulmuş paketleri bulmak
- Filebeat ile /var/log/apt dizinin altındaki log dosyalarını okumasını söylüyoruz.
- Logstash yapılandırma dosyasında giriş ve çıkış yönlendirme ayarlarını yapıyoruz.
Şekil 45 - logstash/conf.d/nginx.conf -> input
Şekil 46 - logstash/conf.d/nginx.conf -> output
-
Logstash ve filebeat hizmetlerini yeniden başlatıyoruz.
systemctl restart filebeat
systemctl restart logstash
-
Kibana üzerinden index modeli oluşturarak Discover alanında apt Loglarını görebiliyoruz.
NOT: Kalan diğer log dosyalarını bu şekilde elasticsearch havuzunda topluyoruz. İhtiyacınıza bağlı olarak farklı dosyaları da bu şekilde izleyebilirsiniz. Dmesg.log, kern.log, Faillog dosyalarını bu şekilde izlemeye alabiliriz.
Linux çekirdeği tarafından kaydedilen bilgileri bu log dosyası depolar.
Bu log dosyası sayesinde şunları öğrenebiliriz:
- Çekirdek ile ilgili hataları ve uyarıları görmek için.
- Çekirdeğin sorunlarını gidermek için.
- Ayrıca donanım ve bağlantı sorunlarında hata ayıklamak için
Donanım ve sürücüler ile ilgili bilgiler buraya kaydedilir. Çekirdek, önyükleme işlemi sırasında sunucuyla ilişkili fiziksel donanım aygıtlarını algıladığından, aygıt durumunu, donanım hatalarını ve diğer genel mesajları yakalar. Bir donanım düzgün çalışmıyorsa veya algılanmıyorsa, sorunu bu log dosyasında arayabilirsiniz.
Bu dosya başarısız giriş denemeleri hakkında bilgi içerir. Username/Password Hacking ve Brute-Force Attack içeren herhangi bir güvenlik ihlali girişimini bulmak için yararlı bir log dosyası olabilir.
Packetbeat, Elasticsearch tarafından geliştirilen ve ağ trafiği yakalama için libpcap kitaplığını kullanan bir ağ izleme aracıdır. Bu aracı kullanarak http, TLS veya DNS'yi diğer birçok ağ protokolünü izleyebiliriz. Ancak, aracın güvenliğe değil, uygulama izlemeye odaklandığını belirtmek gerekir. Bu, güvenlik açısından yararlı olmayacağı anlamına gelmez, ancak birkaç sınırlamanın farkında olmamız gerekir.
cd /etc/packetbeat/packetbeat.yml
yapılandırma dosyasına giderek aşağıdaki ayarlamaları yapıyoruz.
• Cihaz arayüzünü “herhangi biri” olarak ayarlıyoruz.
• Dinlenecek protokolleri belirliyoruz. • Dashboard özelliğini aktif ediyoruz. • Dinlenen paketlerin çıkış yönlendirmesini yapıyoruz. • Kibana panolarını kullanmak için gerekli yönlendirmeyi yapıyoruz. • Son olarak packetbeat servisini yeniden başlatıyoruz.systemctl restart packetbeat
2) Discover alanına baktığımızda Network loğlarının düştüğünü görmüş oluyoruz.
Şekil 53 - Packetbeat log kayıtları
• Dashboard alanına giderek “Overview ECS” seçtik den sonra “Create Dashboard” ile oluşturuyoruz.
Şekil 54 - Packetbeat Dashboard
• DNS işlemleri
• HTTP işlemleri
• TLS oturumları
• İşlem türleri
• Yanıt sürelerinin yüzdeleri
• Zaman içinde hata sayısı
• Networkü oluşturan cihazlar
gibi bir çok bilgilere istatistiksel bir şekilde ayrıntılı olarak ulaşabiliriz. Bu kısım detay ve geniş kapsamlı olabileceği için üzerinde fazladan zaman harcayarak pekiştirmek daha doğru olacaktır.
Şekil 56 - Top Hosts Creating Traffic
Suricata, Packetbeat’in aksine hem algılama hem de koruma özellikleri sunar ve ELK yığınıyla entegre edilebilir. Packetbeat'in aksine, Suricata ağ trafiğini izler ve önceden tanımlanmış güvenlik kurallarından bazılarıyla eşleşmeye çalışır. Bu trafik belirli bir güvenlik kuralıyla eşleşiyorsa, Suricata bir uyarı oluşturabilir veya bu trafiği engelleyebilir. Ayrıca, kötü amaçlı etkinlikleri algılayan birçok açık kural vardır, ancak kendi kurallarımızı da oluşturabiliriz.