:::: MENU ::::
Posts tagged with: linux

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.

 

 


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:

Yöntem #2: .rpm paketini silme

ilk olarak paket adını tespit edelim:

puppet reposunu silmek için sırasıyla:

 


Strace Nedir? Strace Kullanımı

Linux/Unix’te bir sürecin (process) yaptığı sistem çağrılarını(syscall) izlemek için kullanabileceğiniz bir araçtır. Ayrıca ptrace, ltrace komutlarını inceleyebilirsiniz.

Sürecin çıktılarını stdout’a, kendi çıktılarını stderr’e yazar. more ile sayfa sayfa görmek istiyorsanız. en basit (primitive) kullanımı aşağıdaki gibidir.

Strace Parametreleri:

  • -e parametresi ile sadece bir fonksiyon için çıktı üretebiliriz.

  • -o parametresi ile aşina olduğumuz üzere çıktıları bir dosyaya yönlendirebiliriz.

  • -t parametresi ile zamansal olarak sistem fonksiyonlarının çalışma dilimlerini gösterir.

  • -c ise raporsal bir çağrı çıktısı üretir.

  • -p herhangi bir çalışan uygulamayı <PID> değerini vermek suretiyle trace edebiliriz.


Linux Swap Alanı Temizlemek

Linux Swap Alanı Temizlemek

Sunucunuzun belleği belirli bir anda ihtiyaçları için RAM yetersiz olduğunda, RAM yerine sabit sürücüden(disk) bir parça, “takas alanı(swap)” kullanmaya başlar.

Linux sistemi üzerinde takas alanı(swap) temizlemek için gerekli zamanlar olabilir. Bunu yapmak için, ilk önce takas alanı (swap) tarafından kullanılan memory alanı kadar  yeterli boş hafıza olduğundan emin olmanız gerekir. 
Bunu görmek için

Swap alanı check etmek için:

Sonra kullanılan swap alanı free etmek için aşağıdaki komutları çalıştırın:

Sonra bu yaptıktan sonra kullanılıyor ne olduğunu kontrol edin.

 


Linux’da Processleri Gizleme (hidepid)

Linux’da Diğer Kullanıcılardan Processleri Gizleme

Yönettiğimiz sistemde tanımlı birçok kullanıcı olabilir. Çoğu kullanıcı ssh ile kaynaklara erişebilir. Fakat Debian/Ubuntu/RHEL/CentOS Linux sunucuya erişen kullanıların kendilerine ait olmayan süreçleri görmesini engelleyebiliriz.

Eğer, Linux kernel version 3.2+ (veya Debian (unstable)/Ubuntu 14.04/RHEL/CentOS v6.5+ üstü) sürümleri kullanıyorsanız, root user dışındaki diğer kullanıcılardan süreçleri(process) gizleyebilirsiniz.

Linux’da Processleri Gizleme işlemi hayatımıza yukarda belirttiğim kernel versiyonu ile hayatımıza giren hidepid ile yapabiliyoruz

hidepid, procfs (/proc) için yeni bir mount seçeneğidir. hidepid seçenekleri aşağıdaki gibidir.

hidepid = 0 (default) Varsayılan seçenek 0’dır. Herkes tüm süreçleri gözlemleyebilir.
hidepid = 1 Etkin,Tüm süreçler gizlidir fakat /proc/<PID> süreç kimliklerini görmek mümkün.
hidepid = 2 Etkin, Tüm süreçler gizlidir ve /proc/<PID> süreç kimliklerini görmek mümkün değil.

Değişikliğin kalıcı olması için