«

»

Tem 22 2011

iptables loglarını farklı dosyaya ayrıştırma senaryosu

Iptables çekirdek seviyesinde çalıştığı için, tüm logları her halükarda kern.* şeklinde gönderecektir. Klasik sistemlerde syslog kullanıldığında, syslog servisi logları iki şekilde ayrıştırmaktadır: facility (log'un üretildiği yer) ve priority (log'un önceliği).

iptables'ın facility'si herzaman kern olacağından, bunları ayrıştırmak için tek seçenek priority olmaktadır. Bu durumda da, en fazla 7 adet priority değerinden birisi kullanılarak ayrıştırılabilir. Örneğin; iptables ile, warn önceliğinde log basılırsa şayet çekirdek tarafından üretilen diğer warn logları da aynı kurala uyacağından, sorun olmaktadır. Bu nedenle, iptables loglarını ayrıştırıp farklı bir dosyaya yazabilmek konusunda, syslog sağlıklı bir çözüm üretememektedir.

Bunun yerinde; rsyslog kullanılarak, log mesajları içerisinde, mesaj içeriğine göre ayrıştırma yapmak (Regex dahi kullanılabilir) mümkündür. Aşağıda rsyslog kullanılarak iptables loglama konusunda test edilmiş örnek bir senaryo gösterilmiştir.

Loglama'nın üç ana aşaması vardır:

  1. iptables üzerinde, nelerin ne şekilde loglanacağını belirt.
  2. rsyslog içerisinde, iptables tarafından gönderilen logları ayrıştır ve farklı bir dosyaya gönder.
  3. logrotate kullanarak, iptables loglarının istenen peryotlarda çevrilmesini sağla.

Şimdi bu üç aşamayı örneklerle inceleyelim. Bu noktada hatırlatmakta fayda var, aşağıdaki örnekler Debian 6.0.1 sürümü üzerinde uygulanmıştır.

1. iptables loglama ayarları

Iptables üzerinde istenen her kural tipi için ayrıca log bastırılması mümkündür. Bunun için yapılması gereken iş, -j parametresinden sonra log ile ilgili parametrelerin belirtilmesidir. Detaylı log parametreleri için iptables dokümanları incelenebilir. Aşağıda örnek bir iptables log satırı gösterilmiştir:

Bu örnekte, LAN interface'inden girip, WAN interface'inden çıkan tüm trafik kayıt altına alınmaktadır. Bu tarz logalrda dikkat etmekte fayda var, örnekteki loh dakikada megabaytlarca log absılmasına sebep olabilir. –log-prefix parametresi ile de, log mesajları gönderilirken önüne IPTABLES: şeklinde ek konulması sağlanmıştır. Bu ek sayesinde daha sonra rsyslog üzerinde iptables loglarının ayrıştırılmasını sağlayacağız.

Bu komut verildikten sonra, iptables loglarını kern seviyesinde doğrudan log servisine göndermektedir. Ancak daha rsyslog üzerinde ayar yapılmadığı için loglar büüyk ihtimalle /var/log/syslog dosyasına kaydedilmektedir. Artık rsyslog yapılandırmasına geçebiliriz.

2. rsyslog yapılandırması

rsyslog, eskiden beri kullanılan syslog servisinin daha gelişmişidir. Diğer dağıtımları bilmiyorum ama Debian ile standart gelmektedir. rsyslog yapılandırması ile ilgili iki tane yer (/etc/rsyslog/rsyslog.conf dosyası ve /etc/rsyslog/rsyslog.d klasörü) bulunmaktadır. rsyslog.conf dosyası, ana yapılandırma dosyasıdır. Normal şartlar altında düzenlemeye gerek yoktur. Herhangi bir özel log yapılandırması yapılacağında, rsyslog.d klasörü altına, ilgili logu üreten servis adı ile bir dosya oluşturulup, bu dosyaya özel log ayarları yazılabilir. Örneğimizde de rsyslog.d klasörü altında iptables adında bir dosya oluşturup aşağıdaki iki satırı bu dosyaya yazıyoruz:

Bu satırların birincisi, içerisinde zaman damgasından sonra, IPTABLES: sözcüğü geçen satırları yakalayarak satırın sonunda belirtilen dosyaya yazılmasını sağlıyor. Dosya önündeki tire (-) işareti, her satırın anında yazılması yerine, biriktirilerek yazılması için kullanılıyor.

İkinci satır da, bu kurallara uyan log satırları ile ilgili başka bir işlem yapılmaması için kullanılıyor.

rsyslog ile ilgili son yapacağımız işlem, servisin yapılandırma dosyasını yeniden okumasını sağlamak:

Eğer, dosyayı otomatik oluşturmazsa, touch komutu ile kendiniz oluşturabilirsiniz. Kontrol etmek için, /var/log/iptables/iptables.log dosyasının içeriğine bakabilirsiniz. Eskiden /var/log/syslog dosyasına yazdığından, iki ayrı yerde kayıt olmasını engellemek için, syslog dosyasını da kontrol etmekte fayda var. Eğer yapılan işlemlerde bir hata yoksa, sadece iptables.log dosyasına kayıt yazılıyor olacaktır.

3. Logrotate yapılandırması

Logrotate servisi, logların belirli peryotlarla çevrilmesi için kullanılmaktadır. 5651 sayılı yasa gereği bazı logların 6 ay saklanması gerekmektedir. Bu nedenle iptables loglarını da 6 ay saklamak isterseniz, dosya çok büyüyeceği için,  bunu tek bir dosya halinde tutmak hiç akıllıca değildir. Eski logların aylık, haftalık veya günlük parçalar halinde saklanması mantıklı olabilir. Çok fazla log basılıyorsa, günlük en ideal çözümdür. Örneğin; günlük parçalara bölünecek ve 6 ay boyunca kayıtlar saklanacaksa, kabaca 180 ayrı günlük parça saklanmalıdır.

logrotate yapılandırması için, /etc/logrotate.d kalsörü altına ilgili servisin adında bir dosya açıp, uygun logrotate komutlarını buraya yazmak gerekmektedir. Örneğimiz için, /etc/logrotate.d/iptables adında bir dosya oluşturulmuş ve aşağıdaki komutlar bu dosyaya yazılmıştır.

Logrotate servisi hakkında detaylı bilgi için, ilgili dokümanlar incelenebilir. Örnekteki yapılandırma, 300 günlük (yaklaşık 10 ay) log dosyasını her bir günü ayrıca sıkıştırarak saklayacaktır.

Yapılandırmamız burada sona eriyor.

Yazının kullanımı serbest olmakla beraber, kaynak gösterilirse sevinirim. Murat ÖZALP (22.07.2011)

Faydalanılan kaynak: http://blog.shadypixel.com/log-iptables-messages-to-a-separate-file-with-rsyslog/

1 ping

  1. Video

    Teşekkürler hocam

  2. yasin telli

    Merhabalar hocam, yazını için çok teşekkürler, ben logrotate ile ilgili birsey sormak istiyorum, eski logları uzak bir sunucuda depolamak (arşivlemek) için ne yapmamız gerekir. Mesela örnekteki gibi 300 günlük bir kayıt oluşturduğumuz zaman, aylık olarak arşivleme yapmak yani biryere göndermek için bir öneriniz var mı?

  3. Murat Özalp

    Betik yazıp istediğin yere gönderebilirsin. Şu sayfada güzel bir örnek yazmış mesela vatandaş: https://bradmontgomery.net/blog/automatic-backups-with-cron-tar-and-ssh/

  1. iptables ile NAT logları - Murat Özalp

    […] http://web.bilecik.edu.tr/murat-ozalp/2011/07/22/iptables-loglarini-farkli-dosyaya-ayristirma-senary… […]

iptables ile NAT logları - Murat Özalp için bir cevap yazın Cevabı iptal et

Bad Behavior has blocked 28 access attempts in the last 7 days.