:::: MENU ::::
Browsing posts in: Linux/Unix

Sysdig Nedir ? Sysdig Kullanarak Sunucu İzleme

sysdig_logo

Sysdig Nedir ?

Bazı durumlarda bir işlem tarafından yapılan ve alınan sistem çağrılarını takip etmek gerekebilir bunun için  akla gelen ilk şey nedir? Muhtemelen haklı olarak düşünceniz strace olur ve haklısın. strace hakkında bilgi sahibi değilseniz ilgili paylaşımımı inceleyebilirsiniz.

Hangi araç ile komut satırından ham ağ trafiğini izlemek için kullanırsınız? Hakkında bilgi sahibiyseniz tcpdump , kullanarak yine doğru bir seçim yapmış oluruz. (unix’de her şey bir dosyadır)

Açık dosyaları izlemek zorunda kaldığımızda ise ilk kullanacağımız lsof‘dur. lsof ile daha önce payaştığım yazıya göz atabilirsiniz.

Sysdig, açık kaynak kodlu linux (RHE,Debian,Container),OSX ve Windows sistemlerde çalışan ve strace , tcpdump ve lsof gibi (strace+tcpdump+lsof+iftop+htop) sysadmin’in sıklıkla kullandığı klasik ama gerçekten harika araçları tek çatıda toplayan ve  farklı birçok  kabiliyet ve özelliğe sahip gelişmiş bir araçtır.

Ayrıca, çok güzel de bir filtreleme sistemine sahiptir. Bu şekilde spesifik olarak system çağrıların(syscall) ve olayların(event) belirttiğiniz kriterlere göre görüntülenmesini veya istersek bir dosyaya(trace file) yazılmasını sağlayabiliriz. Bu trace file’ları MacOS X ya da Windows gibi farklı platformlar üzerinde de analiz edebiliriz.

Sysdig’in bir diğer güzel özelliği ise “chisels” adını verdikleri analiz scriptleridir. Bu scriptler toplanan verinin anlamlandırılması için kullanılan Lua dilinde yazılmış scriptlerdir ve sisteminiz hakkında detaylı bilgi edinmek için kullanabileceğiniz ve analiz ihtiyaçlarınıza göre kendi scriptlerinizi geliştirebileceğiniz bir mekanizmadır. Yazının sonunda örnekler ile bu kısmı daha iyi analayacaksınız.

Bu yazıda sysdig ile Linux sistem izleme ve sorun gidermek için kurulum ve temel kullanımını inceleyeceğiz.

Sysdig Kurulumu

Bu yazı için ben, kısalık ve kolaylık uğruna resmi internet sitesinde açıklanan otomatik yükleme işlemini kullanmayı tercih ettim.

Sysdig kurulumu gerçekleştirmek için sudo olarak aşağıdaki komutu çalıştırmanız yeterli oluyor. Herşey otomatik olarak kuruluyor. Tüm kurulum seçenekleri için sayfayı inceleyebilirsiniz.

Sysdig Kullanımı

Yükleme tamamlandıktan sonra, sysdig’in en basit (primitive) kullanımı komut satırından doğrudan sysdig komutunu çalıştırmaktır.

Bu şekilde o an çalışan sistem çağrıları ve event’ler ekrandan akacaktır. Bu çıktıda her bir olay bir satır olacak şekilde görüntülenmektedir ve her bir satırda aşağıda sıralaması verilen bilgiler ekrana basılacaktır:

İlgili bilgilerin açıklaması da şu şekildedir:

  • evt.num :  Event numarası
  • evt.time : Event tarihi
  • evt.cpu : Event’in hangi kaç numaralı CPU core üzerinde çalıştığı
  • proc.name: Süreç ismi.
  • thread.tid : Thread ID ( tek thread’li süreçler için PID)
  • evt.dir : Event yönü, giriş eventleri için > ve çıkışlar için <
  • evt.type : Event tipi, örm: ‘open’, ‘read’, ‘write’
  • evt.args : event’in aldığı argüman.

Sysdig Filtreleme (class.field) Parametreleri

Sysdig’i yukarıda verilen şekilde tüm sistem olaylarını görüntüleyecek şekilde kullanmak aynı anda binlerce olayın ekrandan akıp gitmesine ve bu bilgi akışı içerisinde kaybolup gitmenize neden olacaktır; işte strace’den alışık olduğumuz bu verimsiz durumu ortadan kaldırmak için sysdig’in çok gelişmiş bir filtreleme sistemi bulunmaktadır.

Bu sistem sayesinde binlerce sistem çağrısını en ince ayrıntısına kadar filtreleyerek spesifik aramalar yapabiliriz.

Örnek olarak vim komutuna ait aktiviteyi görüntülemek için sysdig’i aşağıdaki şekilde kullanabilirsiniz:

Yukardaki komutu verip aşağıdaki gibi bir vim komutu çalıştırırsanız.

Aşağıdaki şekle benzer bir çıktı görürsünüz.

Sysdig’in fitreleme yapısı standart karşılaştırma operatörlerini ( =, !=, <, <=, >, >= ) ve boolean operatörleri (“and”, “or” ve “not”) desteklediği için filtrelemeyi genişletmek çok kolaydır.

Örnek olarak cat ve vim komutunun aktivitelerini görüntülemek için komutu şu şekilde kullanmak mümkündür:

ya da ping haricindeki tüm diğer süreçlerin kapadığı dosyaları görüntülemek için örnek şu şekildedir:

Tüm filtreleme (class.field) seçeneklerini aşağıdaki komut ile görebiliriz:

Sysdig Kullanışlı Örnekler

Belirli bir dizin altında işlem yapan süreçleri görüntülemek için:

Bellibir süreç haricinde dosyalar üzerinde aktivite gerçekleştiren süreçler ve yaptıkları işlemler:

Java ve MySQL süreçlerine ait aktivite:

Komutların aldığı parametreler üzerinden filtreleme yapmak için proc.args filtresi yani class.filed’i kullanılmaktadır.

Örnek olarak parametre olarak www.omeroner.com alan bir uygulamanın hareketlerini izlemek için (örn: dig www.omeroner.com)

Spesifik bir ip adresi tarafından yapılan bağlantılar sonucu oluşan ve sshd süreci ile alakalı olmayan aktiviteyi incelemek için:

Mysql dışındaki süreçler tarafından karşılanan gelen network bağlantılarını incelemek için:

Belli bir  kullanıcıya ait tüm aktivitenin izlenmesi:

Belli bir gruba ait tüm aktivitenin izlenmesi:

Event tipine göre çağrıları görüntülemek için: (LINUX System Call Quick Reference için bu dosyayı inceleyebilirsiniz.)

Tüm event listesini görmek için:

Sysdig Çıktı Formatlarını Düzenleme

Sysdig ile filtreleme sonuçlarının  çıktılarını customize edebililiyoruz. Örnek olarak event tipi chdir (change dir) olan sistem çağrılarını, komutu (cd) çalıştıran kullanıcı ve ilgli dizini görüntülemek üzere formatlı bir şekilde ekrana basmak için şu komut kullanılabilir:

shell üzerinden gerçekleştirilen tüm komutları, kullanıcı, komut ve komut agrümanını içerecek şekilde ekrana basmak için:

Sysdig ile Trace Dosyaları

Yazının başında’da ifade ettiğim gibi sysdig ile elde ettiğimiz sonuçları daha sonra incelemek için bir dosyaya (trace file) yazdırabiliriz.

Örnek olarak tüm sysdig çıktısını trace.scap dosyasına yazılması için kullanılacak komut:

Sadece 50 adet event’in ilgili dosyaya yani trace.scap yazılmasını sağlamak için komut:

Trace dosyasına yazdırdığımız bir sysdig çıktılarını okumak için kullanılacak komut:

 

Sysdig ‘de Chisels Kullanımı

chisels , sysdig üzerinden elde edilen verinin anlamlandırılması üzere kullanılan scriptlere verilen addır ve öntanımlı olarak bir çok chisel bulunmaktadır.

Öncelikle bu chisel’lerin bir listesini -cl parametresi kullanarak görebiliriz:

chisel’ler hakkında daha detaylu bilgi almak üzere -i parametresi kullanılabilir. Örnek olarakbottlenecks isimli chisel’in ne iş yaptığına bakmak için aşağıdaki komut kullanılabilir:

 

Sysdig  Chisels Kullanışlı Örnekler

Ençok cpu kullanan süreçleri görmek için:

1 ms’den uzun süren I/O aktivitesi:

1 ms’den uzun süren network aktivitesi:

Syscall bazında en çok error üreten süreçler:

Süreçlere ait standart çıktıları ekrana basmak için (class.field kullanılabilir):

Yazma + Okuma anlamında en çok disk I/O’nun yapıldığı dosyalar:

En çok disk I/O üreten (Read + Write) süreçler:

Byte cinsinden toplam I/O miktarı:

Hangi süreçlerin hangi log dosyalarına ne yazdığının ekrana basılması:

Syslog’a yazılan her mesajın görüntülenmesi:

Spesific bir ip’nin ürettiği trafiğin görüntülenmesi (dikkat edeceğiniz üzere chisel’leri filtreleme seçenekleri kullanabiliyoruz):

Spesifik bir port üzerinde gerçekleşen trafiğin görüntülenmesi:

Byte cinsinden en çok trafik üreten bağlantıların listenmesi:

En çok trafik üreten portların listelenmesi:

En çok trafik üreten süreçlerin görüntülenmesi:

Sistemdeki kullanıcılara ait aktivitenin interaktif olarak izlenmesi:

Örnekleri çoğaltmak kendinize kalmış ve daha fazlası için bu sayfayı ziyaret edebilirsiniz.

 

 


HTTP İsteklerinin Zamanlamalarını cURL İle Görme

 Basit bir istek 4 temel aşamadan oluşur,


Bazen sayfa yüklenme sürelerinin tespitini (daha doğrusu sayfanın indirilme )sürelerinin tespiti için curl mükemmel bir tercih olabilir.

Basit Kullanım:

ZSH ile döngüye sokabiliriz:

BASH ile:

CURL komutu için varsayılan davranış GET’dir, ancak POST, DELETE PUT ve daha karmaşık istekleri yapabilirsiniz. Eğer cURL ‘e aşina değilseniz, başlamak için en iyi yer manpage ‘dir.

Bu şekilde HTTP zamanlama testi için bir “şablon” oluşturabilirsiniz :

Şablon dosyası olarak  yukarıdaki içerik ile  “curl-format” adında dosya oluşturup bu dosya ile bir istek yapabiliriz. Aşağıdaki gibi dns araması,transter öncesi,yönlendirme,toplam süre gibi zamanlamaları ayrı ayrı görebiliriz.

Options:

  • -w “@curl-format”Biçim dosyası olarak curl-format’ın kullanma cURL söyler
  • -o /dev/null isteğin output’unu /dev/null’ a yönlendirir.
  • -s ilerleme çubuğu göstermemek için kullanılır.
  • http://www.mynet.com/ istek yapılan URL..

Daha ayrıntılı bir sonuç arıyorsanız Apache Benchmark deneyebilirsiniz: Daha önceki paylaşımımda ab ile ilgili yazımı inceleyebilirsiniz.



Centos 7 Üzerine Cockpit Kurulumu

Cockpit ile kolayca web tarayıcısı üzerinden GNU/Linux sunucularını yönetebilirsiniz. Docker sistem kullanıyorsanız docker sistemlerinizide cockpit üzerinden kolayca yönetebilirsiniz.

Centos 7 Üzerine Cockpit Kurulumu

[1] Cockpit Kurulumu


[2] Web tarayıcısı ile “https: //(Sunucunun adı veya IP adresi):9090/” , daha sonra cockpit giriş formu görüntülenir.Aşağıdaki gibi mevcutda kullanılan bir kullanıcı ile oturum açın.Bu örnek root kullanıcı ile gösterir

cockpit_0

[3] Cockpit ana sayfası. Bu ekran üzerinden sistemi yönetmek mümkündür.

cockpit_1

[4] Sol menüdeki “Services”  bölümünden, Sistem hizmetlerini yönetmek mümkündür.

cockpit_2

[5] Sol menüdeki “Containers” bölümünden,  Docker container’ları yönetmek mümkündür.

cockip_3

[6] Sol menüdeki  “Log” bölümünden, Sistem günlüklerini(loglarını) yönetmeniz mümkündür.

cockpit_4

[7] Sol menüdeki “Networking” bölümünden,  Ağ ayarlarını ve yapılandırmalarını yönetmeniz mümkündür.

cockpit_5

[8]Sol menüdeki “Storage” bölümünden,  Depolama ayarlarını ve yapılandırmalarını yönetmeniz mümkündür.

cockpit_7

[9]Sol menüdeki “Tools-Accounts” bölümünden,  Kullanıcı hesaplarını yönetmek mümkündür.

cockpit_6

[10] Sol menüdeki  “Terminal” bölümünden, doğrudan komutlar ile sistemi yönetmek mümkündür.

cockpit_8


Dig İle DKIM Kaydı Sorgulama

DKIM Nedir?

Dig İle DKIM Kaydı Sorgulama kısmında gelmeden önce dkim nedir ? kısaca bilgi vermek gerekir ise;

Dkim, RFC4871‘de standartları belirlenmiş bir e-mail kimlik denetleme yöntemidir. Kısacası Sunucu tarafından şifreleme sistemi kullanılarak gönderilen her emailin barkodlanmasıdır.

Bu yöntem, gönderilen postaların gerçekten ilgili adresten gönderilip gönderilmediğinin tespit edilebilmesi için kullanılmaktadır.

Örneğin bir spammer ya da phising saldırısı amaçlayan birisi sizin e-posta adresinizi From: adresine yazarak herhangi birine bir mail gönderebilir. İşte DKIM aslında gerçek adres sahibinden gönderilmeyen forge edilmiş bu tip postaların saptanmasını amaçlamaktadır.

Dig İle DKIM Kaydı Sorgulama

Aşağıdaki şekilde shell üzerinden dig komutunu kullanarak ilgili domain’e ait dkim kaydı(TXT record) sorgulayabiliriz.


örnek çıktı:

 


Dig İle Çoklu Dns Kaydı Sorgulama

Birden fazla alan adına ait dns kayıtlarının sorgulanması için ufak bir script.

script içeriği:

Örnek Output:

 


Linux InActive Memory

Uzun süredir çalışmadığı halde hafızada yer tutan işlemlerin bellekten silinmesi:

İnactive olmuş olan processlerin memory üzerinde  ne kadar yer kapladığını görebilmek için;

örnek çıktı;

Aşağıdaki komut dizisiyle bu processleri hafızadan silebilirsiniz.

 


DDos ve SYN Saldırılarını Engelleme

Merhabalar internet üzerinden sanal saldırılar ile sunucumuz erişilemez duruma gelip  sonucunda sunucumuz üzerinde bulunan internet sitelerine erişim olamayacağından bize maddi ve manevi zararlar verebilirler. DDos ve SYN saldırılarını engelleme için ücretsiz Firewall yazılımlarından yararlana bilirsiniz.

İnterbase firması tarafından geliştirilmiş olan ücretsiz firewall yazılımı tam bu noktada bize yardımcı oluyor.

Kuruluma geçicek olursak;

Öncelikle firewall yazılımızı indireceğimiz klasörü yaratıyoruz.

cd komutu ile yaratmış olduğumuz ddos_syn klasörüne giriyoruz

Firewall kurulum dosyasını oluşturduğumuz klasöre indiriyoruz. İndirme işlemi tamamlandıktan sonra artık ücretsiz Firewall yazılımızı sunucumuza kurabiliriz.

install.sh içeriği;

Kurulum için .sh dosyasını çalıştırıyoruz.

Firewall kurulumunu tamamlandık. Şimdide firewall’umuzun ayarlarını yapalım.

vim ilefirewall’umuzun config dosyanı açalım.

Artık sunucumuzda DDOS Ve SYS saldırıları için Firewall hazır.

Linux Sunucusunu Ping(ICMP) Erişimlerine Kapatma

Linux Sunucusunu Ping(ICMP) Erişimlerine Kapatma için;

/etc/sysctl.conf dosyasındaki ;

net.ipv4.icmp_echo_ignore_all=0 değerini yapmanız yeterli.

Bu komutu özellikle sadece mysql server olarak kullanılan sunucular tarafından tercih edilmektedir.

 


Belirli Bir Klasör İçin INODE Sayısını Öğrenme

SSH erişiminiz olan bir sunucuda belirli bir klasördeki inode sayısını görmek için aşağıdakı komut bütünü’nü kullanabilirsiniz:

 


Yum Reposu Silme

Yum Reposu Silme için CentOS/RHEL sistem’leri üzerinde için aşağıdaki yöntemleri kullanabilirsiniz.

CentOS/RHEL sistemler üzerinde repo ayar dosyaları /etc/yum.repos.d/ dizininde bulunur.

Yum Reposu Silme için Yöntemler

Yöntem #1: rm komutu kullanarak silme

Örnek output:

puppetlabs.repo reposunu silmek için sırasıyla: