Giriş

Bu yazıda değinilecek konuların bir özeti şu şekilde: Önce Syslog ve Rsyslog hakkındaki temel bilgilere değineceğim, daha sonra rsyslog sunucusunun kurulması, mysql desteği sağlanması ve yapılandırılması konularına ait temel bilgileri ve kurulum notlarını paylaşacağım.

 

Ardından FreeBSDCentOS, Windows sistemlerden ve bir adet Cisco ASA’dan rsyslog sunucusuna log göndermenin nasıl yapılabileceğinden bahsedeceğim. Logların hem text tabanlı log dosyalarına hem de MySQL database’ine yazılması işlemine değineceğim.

Yazının herhangi bir yerinde aklınıza takılan herhangi bir konu olursa, bana bir e-mail gönderebilir ya da sayfa sonundaki yorum kısmından yararlanarak sorunuzu iletebilirsiniz.

Son olarak, makale işinize yararsa, sol üst köşedeki RSS ikonuna tıklayarak beslemeye üye olabilir, benzer konularda yayınlanacak yeni yazılara hızlıca erişebilirsiniz.

Syslog Nedir ?

Syslog, bildiğiniz gibi *nix sistemlerdeki çeşitli kaynaklar ya da uygulamalarca üretilen log’ları (ileti) işlemekle görevli bir uygulamadır. Syslogd isimli bir daemon olarak çalışan syslog, üretilen iletilerin ne şekilde değerlendirileceğini belirler. Örneğin, üzerinde de bir smtp sunucusu çalışan *nix sisteminizde,  klasik olarak smtp  daemon’ı, mail aktivitesi ile ilgili logları syslog’a gönderir, syslog bu logları alıp, bir dosyaya yazar ya da belirli bir e-mail adresine postalar ve ya direk olarak konsola basar.  Sonuç olarak siz, herhangi bir kaynaktan gelen logların ne şekilde değerlendirilmesini istediğinizi syslog’a söylersiniz ve syslog bu istekleri yerine getirir.

 

Syslog’un ön tanımlı ayarlarına göre hemen hertür *nix sistemde,  ilgili kaynaklar (fasilite) tarafından üretilen ve syslog tarafından düzenlenen loglar /var/log dizini içerisinde ayrı dosyalar halinde bulunur.  Bu şekilde sunucunuzda herhangi bir sorun olduğu zaman ilk başvurduğumuz kaynaklar olan logların düzenli bir şekilde tutulması sağlanmaktadır.

Syslog üzerinde çalıştığı sistemin loglarını işlediği gibi uzaktaki bir sistemden gönderilen logları da alıp işleme yetisine sahiptir. Bu iş için syslog sunucunuzun network özelliğini devreye almak ve bir iki küçük ayarlama yapmak yeterli olacaktır . Böylece, syslog tcp ya da udp 514. portu dinleyerek bu porta ulaşan log çıktılarını alabilir ve istediğiniz doğrultuda işleyebilir. Zaten, bu yazının konusu da bu.

Ancak yazının başlığından da anlaşılacağı gibi ben log işlemek için syslog yerine rsyslog kullanmaktayım. Şimdi rsyslog’un ne olduğu ve neden rsyslog kullandığım konusuna değinmek istiyorum.

Rsyslog Nedir ?

Rsyslog, syslogd’nin geliştirilmiş halidir. Çoğunu syslogd ile de yapabileceğiniz gibi rsyslog kullanarak, logları MySQL, postgreSQL, Oracle vs gibi database’lere yazdırabilirsiniz. Alınan logların formatları ile istediğiniz gibi oynayabilirsiniz. Logları encrypt edebilirsiniz. Text dosyalarını syslog formatına sokabilirsiniz vs.  Örnekleri çoğaltmak da mümkündür. Rsyslog’un yetenekleri ile ilgili tam bir listeye için şu adresten ulaşabilirsiniz:  http://www.rsyslog.com/module-Static_Docs-view-f-features.html.phtml

 

Sunduğu özelliklerin yanı sıra rsyslog’a sempatimin bir diğer nedeni de rsyslog ve phplogcon* ile uğraşırken, hem rsyslog baş geliştiricisi Rainer Gerhards’ın hem de phplogcon geliştiricisi Andre Lorbach’ın sorduğum sorular karşısında gösterdikleri yardımseverliktir. Sonuç olarak rsyslog ile ilgili herhangi bir sorunla karşılaşınca direk olarak geliştiricisine ulaşabilmek ve kendisinin epey yardım sever birisi olması gayet güzel bir durum.

(*) Phplogcon, rsyslog ile birlikte kullanılabilen web arayüzüdür. Sunucu loglarının web tabanlı olarak online monitor edilebilmesi için oldukça kullanışlı bir yazılımdır. Bir sonraki yazımda konu PhpLogcon kurulumuna değineceğim.

Syslog ve Rsyslog ile ilgili temel bilgilere değindikten sonra, rsyslog kurulum notlarına geçebiliriz.

Rsyslog Kurulumu

Eğer Fedora ya da Debian Lenny kullanıyorsanız, rsyslog kullanmak için herhangi bir kurulum yapmanıza gerek kalmıyor. Çünkü, rsyslog bu iki dağıtımda ön tanımlı syslog daemon’ı olarak geliyor.  Ancak, rsyslog’un iletileri bir database’de tutmasını istemeniz durumunda db desteği sunan rsyslog paketlerini ayrıca kurmanız gerekmektedir. Örnel olarak, rsyslog’a MySQL desteği kazandırmak için rsyslog-mysql kurulmalıdır. Şimdi bu işlemi yapalım.

 

Debian Sistemlerde MySQL Desteği

Dediğim gibi Debian default olarak rsyslog ile birlikte geldiği için ayrıca rsyslog kurmaya gerek bulunmuyor. Ancak, rsyslog’a mysql desteği sağlamak için rsyslog-mysql paketinin ayrıca kurulması gerekiyor. Bu işi herzamanki gibi apt-get ile yapıyoruz.*

#apt-get install rsyslog-mysql

(*) Yukarıdaki komut ile birlikte sisteme mysql sunucusu da yüklenecektir. Install sırasında, rsyslog’un local sistem loglarını mysql’e yazması için otomatik mysql konfigurasyonu yapmayı öneren bir ekran çıkacaktır. Ancak ben rsyslog sunucusunda, sadece uzaktaki sistemlerden gönderilen logları yazmak için mysql kullanıyorum. Dolayısı ile ilgili ekran geldiği zaman NO diyip geçiyorum; siz de bu şekilde yapabilirsiniz.

Kurulum sonrasında, rsyslog mysql modülünün devreye alınması için /etc/rsyslog.d/mysql.conf dosyasına gerekli satır ekleniyor. Aynı zamanda, lokal iletilerin mysql’e yazılması için gerekli bir satır daha ekleniyor, ancak biz kurulum sırasında otomatik konfigurasyon işlemine NO dediğimiz için bu eklenen satırda gerekli DB bilgileri bulunmuyor. Eğer rsyslog’u bu ayarlar ile başlatırsanız mysql’e yazılamama problemi ile ilgili hata verecektir. Bu hatayı /var/log/syslog dosyasında aşağıdaki şekilde görebilirsiniz.

Sep  7 14:41:11 debvm rsyslogd: [origin software="rsyslogd" swVersion="3.18.6" x-pid="4286" x-info="http://www.rsyslog.com"] restart
Sep 7 14:41:11 debvm rsyslogd: Trouble with MySQL connection properties. -MySQL logging disabled
Sep 7 14:41:11 debvm rsyslogd: the last error occured in /etc/rsyslog.d/mysql.conf, line 5
Sep 7 14:41:11 debvm rsyslogd: warning: selector line without actions will be discarded

Bu durum rsyslog’un çalışmasını engellemez ancak biz gene de hatayı ortadan kaldıralım. Şimdi, /etc/rsyslog.d/mysql.conf dosyasının editleyelim ve dosya içerisinde bulunan aşağıdaki satırın başına # koyup comment out ederek devre dışı bırakalım.

 *.* : ommysql:localhost,,,

Aynı dosyanın içerisinde bir de, $ModLoad ommysql ibrerli satır ise rsyslog mysql modülünün aktifleştirilmesini söylemektedir. Yazının ilerleyen bölümlerinde mysql’e loglama işleminin nasıl yapılacağı da anlatılacaktır. Eğer siz de uzak sunuculardan gelen logları mysql db’de bulunan tablolara yazmak isterseniz bu satırı silmeyin.

Debian sistemler için temel kurulum şekli bu kadardı.

Diğer dağıtımlar ve BSD tabanlı sistemlerden herhangi birini kullanıyorsanız, rsyslog’u ayrıca kurmanız gerekmektedir. Aşağıda FreeBSD ve CentOS sistemler için rsyslog kurulumunu anlatan dökümanların linklerini bulabilirsiniz.

FreeBSD üzerine Rsyslog Kurulumu

Bkz: http://www.syslogs.org/2009/08/freebsd-uzerine-rsyslog-kurulumu-ve-yapilandirmasi/

CentOS üzerine Rsyslog Kurulumu

Bkz: http://www.syslogs.org/2009/08/centos-uzerine-rsyslog-kurulumu-ve-yapilandirmasi/

NOT: Ben rsyslog ile merkezi log sunucusu oluşturmak için Debain kullanıyorum ve bu yazıda anlatılanlar Debian sistemlere göredir. Ancak siz FreeBSD ya da CentOS kullanıyorsanız, yukarıdaki linklerden takip ederek rsyslog kurulumlarınızı yapabilirsiniz. Rsyslog yapılandırması hemen hemen tüm platformlarda aynı olduğundan dolayı, buradaki yapılandırma işlemlerini baz alarak ayarlama işlemlerini yapabilirsiniz.

Yazının bundan sonraki kısmı, sisteminizde rsyslog’un ön tanımlı ayarlarla düzgün olarak çalıştığını varsaymaktadır. Takıldığınız herhangi bir konu olursa, bana e-mail atabilir ya da sayfanın sonundaki yorum bölümünden sorunuzu iletebilirsiniz.

Rsyslog Yapılandırma İşlemleri

Öncelikle, sistemdeki rsyslog’u merkezi log sunucusu olarak kullanabilmek için network desteğinin devrede olması gerekmektedir. Bu destek, /etc/rsyslog.conf dosyasında aktifleştirilmelidir.

 

Şimdi, rsyslog.conf dosyasını editleyelim.

# vi /etc/rsyslog.conf

Dosya içerisinde network desteği ile ilgili satırlar aşağıda görüldüğü gibi ön tanımlı olarak mevcuttur. Ancak # ile comment out edilmiş ve devre dışı bırakılmışlardır. Networking desteğini aktif etmek için açıklama satırları hariç diğer satırların başındaki # işaretini kaldırmalı ve uncomment etmelisiniz.

Yani şu şekilde görünmelidir.

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

Artık dosyayı kaydedip çıkabilirsiniz. Şimdi değişikliklerin aktif olması için rsyslog’u yeniden başlatıyoruz:

# /etc/init.d/rsyslog restart

Rsyslog restart edildikten sonra, hem tcp hem de udp 514. portlar rsyslog tarafından dinlenmeye başlanmış olmalıdır. Kontrol etmek için netstat komutundan yararlanalım.

# netstat -an |grep 514

Çıktı şu şekilde olmalıdır:

tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN
tcp6 0 0 :::514 :::* LISTEN
udp 0 0 0.0.0.0:514 0.0.0.0:*
udp6 0 0 :::514 :::*

Görüldüğü üzere ilgili portlar bind edilmiş durumdalar.

Şu anda, rsyslog temel olarak ayarlanmış durumda. Şimdi  merkezi log sunucu oluşturma ile ilgili bölümlere geçebiliriz.

Merkezi Log Sunucu Yapılandırması

Bu kısımda, sırası ile bir FreeBSD, bir CentOS Linux, bir Windows 2003 ve bir adet Cisco Asa 5505’in loglarının rsyslog sunucusuna gönderilmesini ve rsyslog sunucusunun gelen logları belirli log dosyalarına dağıtması ve ayrı olarak mySQL database’ine de yazması ile ilgili yapılması gerekenlerden bahsedeceğim.

 

Yapılacakların kısa bir özeti şu şekilde; önce Rsyslog sunucusunda, uzaktaki sistemden gönderilecek logları almak ve bir dosyaya yazmak üzere rsyslog. conf isimli dosyada gerekli tanımlamaları yapıyorsunuz. Bu noktada, uzak sistemlerden gelen logları sadece tek bir dosyaya yazabileceğiniz gibi fasilitelerine göre ayrıştırıp farklı dosyalara da yazılmasını sağlamak mümkün. Örneğin, uzak sistemden gelen ve mail ile alakalı olan dosyaları atıyorum /var/log/sunucuismi/mail.log dosyasına, ftp ile alakalı logları aynı dizinde ftp.log dosyasına ya da login bilgileri ile ilgili gelen logları aynı dizinde oluşturukacal auth.log dosyasına yazdırmanız mümkün.

Not: Eğer loglarınızı ayrı klasörlerde tutmak istiyorsanız, oluşturduğunuz klasörlerin yazma izinlerini vermeyi unutmamalısınız. Ben, bu yazıda ayrı klasörlere yazma işlemi yapmayacağım için klasör oluşturma ve yazma izni verme gibi işlemler yapmayacağım.

Sonuç olarak loglarınızı tek bir dosyada toplayabildiğiniz gibi fasilitelerine göre ayrı log dosyalarına da yazdırabilirsiniz.  İlgili bölümlerde her iki yönteme de değineceğim.
Ayrıca, logların bir MySQL database’ine yazılması için gereken yapılandırma adımlarına da değineceğim.

Uzak sunucularla ilgili işlemlere geçmeden önce, rsyslog.conf’un yapısı ile ilgili bilinmesi gereken kısa bir iki bilgi paylaşmak istiyorum.

Ön tanımlı olarak rsyslog.conf dosyasının log işleme ile ilgili kısımlarının içeriği aşağıdaki gibidir:
(Çıktı da comment out edilmiş satırlar gösterilmemektedir.)

auth,authpriv.*			/var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
*.emerg *
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole

Görüldüğü gibi hangi fasiliteler tarafından üretilen iletilerin, hangi log dosyalarına yazılacağı burada belirlenmektedir. Örneğin, en üstteki satırı ele alacak olursak, auth ile ilgili logların /var/log/auth.log dosyasına yazılacağı belirtilmiştir. Burada dikkat edilmesi gereken konu; bu yapılandırmada auth ile ilgili gelen tüm iletilerin hangi sistemden geldiğine bakılmaksızın auth.log dosyasına yazılacağının belirtilmiş olmasıdır. Yani bu durumda, hem rsyslog sunucusunun kendi auth iletileri hem de uzaktaki sistemlerinizden gelecek auth logları aynı auth.log dosyasına yazılacaktır.

rsyslog bu şekilde set edilirse ve ekstadan 10 adet uzak sunucudan log gönderirseniz tüm bu loglar rsyslog’un kendi log dosyalarına yazılacaktır. Bu durumda, rsyslog sunucusunun kendisine ait olması gereken log dosyasında, başka sunuculara ait olan iletiler de bulunacak ve ilgili log dosyası karman çorman olacaktır. Bu da rsyslog sunucunuzun kendisine ait logları izlemenizde zorluklar çıkmasına neden olacaktır.

İşte bu sorunu aşmak için rsyslog’a, sadece lokal sistemden kaynaklanan iletileri bu dosyalara yazmasını söylemek için, conf dosyasının içerisinde yukarıda görülen çıktıların en tepesine “+sunucu-ismi” şeklinde bir giriş yapıyoruz.

Benim rsyslog sunucumun adı, logserver’dir. Bu nedenle yukarıdaki çıktının en tepesine +logserver yazıyorum:

Önce rsyslog.conf dosyanızı editleyelim.

# vi /etc/rsyslog.conf

Sonra da aşağıda görüldüğü şekilde, ilgili yere +sunucuismi ibaresini ekleyelim.

+logserver
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
*.emerg *
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole

Yukarıda bold ve kırmızı olarak belirtilmiş sunucu adını içeren ibare eklendiği zaman, logserver isimli rsyslog sunucusu, sadece kendisinden kaynaklanan iletileri hostname’in aşağısındaki satırlarda belirtildiği şekilde ilgili dosyalara yazacaktır. Böylece uzaktan gelecek olan iletiler lokal sistem loglarında karışıklığa neden olmayacaktır.

rsyslog.conf dosyası bu hali ile, local sistem ile ilgili logları text tabanlı log dosyalarına yazacaktır fakat logların bir MySQL database’ine yazılmasını da sağlayabilirsiniz. Ben log sunucusunda sadece uzak sistemlerden gelen logları MySQL’e yazdırdığım için lokal iletiler için bu işin nasıl yapıldığına değinmeyeceğim.  Bunun yerine ilgili başlıklarda anlatılacak uzak sistemlerden gönderilecek logların ayrı arı hem text tabanlı log dosyalarına hem de bir MySQL tablosuna yazdırılmasından bahsedeceğim.

Şimdi uzak bir sistemden rsyslog sunucusuna log göndermek ve rsyslog’un gelen logları işlemesi ile ilgili konulara geçebiliriz. Demin de dediğim gibi örnek olarak ele alacağım sistemler bir FreeBSD, bir CentOS, bir Windows 2003 ve bir Cisco ASA 5505.

Önce FreeBSD ile başlıyoruz.

FreeBSD’den Log Forwarding

Bu işlemi iki şekilde yapabilirsiniz, birincisi logların text tabanlı log dosyalarına yazdırılmasını sağlamak. İkincisi ise logları bir MySQL db’sinde bulunan tabloya yazdırmak. Sırası ile her iki şekle de değineceğim.

Log Sunucusundaki İşlemler

Bu işlemin, rsyslog sunucusu üzerindeki tanımlar, ve freebsd sistemdeki forward ayarları şeklinde iki adımı bulunuyor. Önce log almak üzere rsyslog sunucusunu set edelim.

Logları Text Dosyalarında Tutmak

Yazının ilgili bölümünde de bahsettiğim gibi uzak sunuculardan gelen logları isterseniz tek bir log dosyasında, isterseniz de gelen iletilerin fasilitelerinden hareketle ayrı log dosyalarına yazabilirsiniz.  İlk olarak tüm logları tek bir log dosyasında toplamak üzere rsyslog sunucusunu yapılandıralım.

Örneğin elimde hostname’i freetest olaran bir FreeBSD sistem var, bu sistemde üretilen logları rsyslog sunucusuna göndereceğim. Bu nedenle rsyslog.conf dosyasına “hostname’i freetest olan sistemden gelen syslog iletilerini, /var/log/freetest.log dosyasına yaz.” anlamına gelen bir giriş yapacağız.

Gene rsyslog.conf dosyamızı editliyoruz.

# vi /etc/rsyslog.conf

ve dosyanın en sonuna şu satırları ekliyoruz.

+freetest
*.* /var/log/free-test.log

Böylece, rsyslog, hostname’i freetest olan sistemden gelen “tüm” iletileri /var/log/freetest.log isimli dosyaya yazacaktır.

Evet, rsyslog sunucusunda, logları tek bir dosyada toplamak için yapmanız gereken ayarlar bu kadar.

Şimdi de iletileri fasilitelere göre ayrıştırarak yazdırma işine bakalım.

Gelen logları lokal sistemin log hiyerarşisine benzer şekilde ayrı dosyalara yazdırmak isterseniz. Rsyslog.conf dosyanızda fasilitelerden hareketle eklemeler yapmanız gerekir.

Aşağıdaki örnekte, free-test sunucusundan gelen cron loglarını /var/log/freetest-cron.log, login vs gibi bilgileri /var/log/freetest-auth.log ve notice, kernel debug, lpr ve mail sunucusu ile ilgili kritik logların /var/log/freetest-messages dosyasına yazılması için girilmesi gereken satırlar görülüyor.

+freetest
cron.*                          /var/log/freetest-cron.log
auth,authpriv.*                 /var/log/freetest-auth.log
*.notice;kern.debug;lpr.info;mail.crit   /var/log/freetest-messages

Böylece ilgili sunucudan gelen istekleri ilgili dosyalara yönlendirmiş oluyorsunuz. Aynı düzenle, istediğiniz her fasiliteye ait logları belli dosyalara yönlendirmeniz mümkün. rsyslog.conf dosyanızın lokal loglar için oluşturulmuş bölümüne bakarak örnekleri çoğaltabilirsiniz.

Son olarak, logları hangi şekilde işlerseniz işleyin dikkat edilmesi gereken bir konu bulunmaktadır: rsyslog.conf dosyanıza +sunucu isminin, rsyslog sunucusu tarafından çözümlenebilir olması gerekmektedir. Çözümleme işlemi için DNS sunucunuzda uzak sistemlerinizin reverse dns kayıtları bulunmalıdır. Ortamda DNS yoksa ya da DNS kayıtları ile uğraşmak istemiyorsanız da ilgili ip ve hostname bilgilerini rsyslog sunucusunun /etc/hosts dosyasına eklemeniz gerekmektedir.

Bu nedenle, şimdi biz işimizi sağlama alalım ve free-test isimli FreeBSD sistem için rsyslog sunucusunun hosts dosyasına bir ekleme yapalım.

/etc/hosts dosyasını açıyoruz:

# vi /etc/hosts

ve içerisine, aşağıdak gibi bir satır ekliyoruz: (free-test isimli sunucunun ip’si 192.168.12.233’dür)

192.168.12.233	freetest

Bu şekilde olası bir isim tutmazlığının önüne geçmiş oluyoruz. İşinizi sağlama almak için rsyslog sunucusuna ileti göndereceğiniz tüm sistemlerinizin hostname’lerini hosts dosyanıza girmenizi öneririm.

Şimdi, rsyslog servisini yeniden başlatıyoruz ve yaptığımız eklemeler devreye alınıyor.

/etc/init.d/rsyslog restart

Rsyslog sunucusu tarafında yapılması gerekenler bunlardı. Şu an rsyslog sunucumuz normal olarak, free-test hostname’li FreeBSD sistemden gelecek logları işleyebilecek.

Şimdi de aynı işlemi bir MySQL db’sine yazdırma işlemine bakalım.

Logların MySQL`e Yazdırılması

Logları db’lere yazdırmak için öncesinde bir MySQL DB’sineihtiyaç bulunuyor. Şimdi freetest isimli sistemden gönderilecek logların tutulacağı FreetestLogs isimli bir DB oluşturup gerekli olan tabloları ekleyelim.

Mysql sunucusuna bağlanıyoruz.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Şimdi FreetestLog isimli bir DB oluşturalım.

mysql> CREATE DATABASE FreetestLogs;

Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,

mysql> USE FreetestLogs;
mysql>CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);

Sonra da SystemEventsProperties isimli tablo

mysql> USE FreetestLogs;
mysql> CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);

Son olarak, FreetestLogs isimli DB’ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)

mysql> USE mysql;
mysql> CREATE USER 'log_user'@'localhost' IDENTIFIED BY 'sifre';
mysql> GRANT ALL PRIVILEGES ON FreetestLogs.* TO 'log_user'@'localhost';
mysql> FLUSH PRIVILEGES;

Database ile ilgili işlemler bitti.

Şimdi, rsyslog.conf dosyasında ilgili yere, freetest isimli sistemden gönderilecek logların, FreetestLogs isimli DB’deye yazılmasını söyleyen bir ekleme yapacağız.

/etc/rsyslog.conf dosyasını editliyoruz ve örneğimize uygun olan aşağıdaki satırı ekliyoruz.

+freetest
*.* :ommysql:127.0.0.1,FreetestLogs,log_user,sifre

Bu işlemi yaptıktan sonra rsyslog servisini yeniden başlatıyoruz. Böylece freetest isimli hosttan gönderilecek “tüm” iletiler, FreetestLogs DB’sindeki SystemEvents isimli tabloya yazılacaktır.
Not: rsyslog.conf dosyasına eklenen freetest hostname’i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)

Şimdi de logları forward etmesi için FreeBSD tarafındaki yapılandırma işlemlerine geçebiliriz.

FreeBSD`nin Yapılandırılması

FreeBSD sistemlerde, ön tanımlı olarak syslog kullanılmaktadır. Syslog’un conf dosyası ise /etc/syslog.conf’tur.

Bir FreeBSD’den uzaktaki bir log sunucusuna ileti göndermek için tercih edebileceğiniz iki yol bulunmaktadır. Bunlardan birisi, syslog’un ürettiği tüm iletileri uzaktaki log sunucusuna göndermektir. Diğeri ise, sadece belirli fasilitelerce üretilen logların sunucuya iletilmesidir. Bu durumda tüm loglar yerine örneğin sadece auth. loglarını gönderebilirsiniz.

Ben her iki yönteme de değineceğim, siz sisteminizi ihtiyacınız olan şekilde yapılandırabilirsiniz.

Üretilen tüm iletilerin log sunucusuna gönderilmesi için aşağıdaki adımları uygulamanız yeterlidir.

/etc/syslog.conf dosyanızı editleyin.

vi /etc/syslog.conf

Dosyanın en üstüne aşağıdakine benzer bir satır ekleyin. (Satırın en üste eklenmesi önemlidir.) Benim rsyslog sunucumun ip adresi 192.168.12.242 dolayısı ile satır şu şekilde:

*.*                                             @192.168.12.242

Bu satırda, tüm logların (*.*) 192.168.12.242 ip adresli sisteme yollanmasını söylüyoruz. Ip adresinin başındaki @ işareti logların UDP protokolü ile gönderilmesini söylemektedir. @@ şeklinde iki at işareti koyarsanız iletiler TCP üzerinden gönderilirler. Çok fazla log trafiği olan sistemler için tcp yerine udp kullanmak  mantıklıdır.)

Artık FreeBSD’de üretilen tüm loglar, rsyslog sunucusuna gönderilecektir.

Diğer alternatif ise sadece belirli fasilitelerce üretilen iletilerin, log sunucusuna gönderilmesidir. Tüm loglar yerine örneğin sadece auth ya da mail loglarını log sunucusuna göndermek isteyebilirsiniz. Bu durumda, syslog.conf dosyasında yukarıda olduğu gibi *.* kullanmak yerine sadece istediğiniz  fasiliteyi belirtebilirsiniz.

Örnek olarak sadece auth ile ilgili logların gönderilmesi için syslog.conf dosyasının en tepesine şu şekilde bir satır eklemek yeterli olacaktır.

auth.info;authpriv.info                         @192.168.12.242

Böylece, sadece login vs. işlemleri ile ilgili loglar iletilecektir.

Son olarak değişikliklerin geçerli olması için syslog servisini yeniden başlatın.

Şimdi değişikliklerin aktif olması için syslog’u restart ediyoruz.

/etc/rc.d/syslogd restart

Evet, normal şartlarda herşey düzgün çalışıyor olmalıdır. Şimdi test edelim.

Log Sunucusunun Test Edilmesi

Test işlemi için logger komutundan yararlanılabilir.  Ben, FreeBSD üzerinde tüm logların rsyslog sunucusuna gönderilemesi için ayarlama yaptım. Dolayısı ile şimdi FreeBSD’de logger komutu ile bir notice mesaji göndereceğim.

# logger "Bu mesaji rsyslog sunucusunun ilgili log dosyasinda ya da db tablosunda gormeniz gerekir."

Üretilen bu log, FreeBSD’nin kendi üzerinde messages dosyasına yazılacaktır. Rsyslog sunucusunda da eğer log dosyasına yazdırma yöntemini seçtiyseniz, /var/log/free-test.log dosyasına, Mysql db’sine yazdırıyorsanız da sunucudaki FreetestLogs DB’sinin SystemEvent tablosuna yazılmalıdır.  Tabii bu örnek tüm logların log sunucusuna gönderilmesi durumunda geçerlidir.

Eğer siz, sadece belirli fasilitelere ait logları gönderiyorsanız, bu durumda ilgili fasiliteler için bir ileti oluşturup kontrol etmelisiniz.

Testlerinizi yaptınız ve iletilerin, log sunucusundaki ilgili dosyalara yazılmadığını gördünüz. Bu problemin nedenini anlamanın en güzel yolu, rsyslog’u debug mod’da çalıştırmaktır.

Debug özelliğini devreye almak için şu işlemleri yapabilirsiniz.

Önce, rsyslog servisini durdurun:

# /etc/init.d/rsyslog stop

Sonrasında da şu komutu verin:

/usr/sbin/rsyslogd -c3 -d

rsyslog debug modda çalışınca, uzaktaki sistemden tekrar log göndermeyi deneyebilir, debug çıktılarından problemi tespit edebilirsiniz.

FreeBSD sistemlerden log forwarding ile ilgili genel geçer yapılandırma işlemleri bu şekildeydi.
Şimdi aynı işlemin bir CentOS sunucudan nasıl yapılabileceğine değinmek istiyorum.

CentOS`tan Log Forwarding

Bu işlem, FreeBSD’ler için yaptığımız işlem adımlarının aynısını içeriyor. O nedenle sadece kısa açıklamalarla komutları verip geçeceğim. Zaten, CentOS sistemlerde de ön tanımlı olarak syslog kullanılmaktadır ve conf dosyası /etc/syslog.conf’tur.

CentOS’daki işlemlerden önce rsyslog’un yapılandırmasını halledelim.

Log Sunucusundaki İşlemler

Bu kısımda ayrı ayrı hem logları text tabanlı dosyalara yazdırmaktan, hem de MySQL DB’sine yazma işleminden bahsedeceğim.

Logları Text Dosyalarında Tutmak

Gene tüm logları, tek bir dosyaya ya da fasilitelerine göre birden fazla log dosyasına yazdırmanız münkün.
Test için kullandığım CentOS’un hostname’i centtest, bu sistemden gelen “tüm” logları /var/log/centtest.log dosyasına yazdırmak için rsyslog.conf dosyasına şu satırları ekliyorum:

+centtest
*.* /var/log/centtest.log

Logları tek dosyaya yazdırmak  için bu giriş yeterli.

Eğer fasilitelere göre ayrıştırmak isterseniz, örneğin, cron ile ilgili logları, /var/log/centtest-cron.log dosyasına yazdırmak için rsyslog.conf dosyasına şu satırı ekleyebilirsiniz.

+centtest
cron.* /var/log/centtest-cron.log

Örnekleri kendi isteklerinize göre çoğaltabilirsiniz.

Şimdi 192.168.12.234 ip adresli centtest makinası için rsyslog sunucusunun /etc/hosts dosyasına aşağıdaki satırı girelim.

192.168.12.234	centtest

Sonra da rsyslog’u restart edelim.

/etc/init.d/rsyslog restart

İletileri, text tabanlı dosyalara yazdırmak için gerekli Rsyslog yapılandırması bundan ibaret.

Şimdi de, logların bir MySQL db’sine nasıl yazılabileceğine bakalım.

Logların MySQL`e Yazdırılması

Bu adımda da gene bir DB ve gerekli tabloları oluşturacağız. Sonrasında da, FreeBSD konusunda oluşturulan log_user kullanıcısına bu DB’ye yazma çizme izni vereceğiz.

Mysql sunucusuna bağlanıyoruz.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Şimdi CenttestLog isimli bir DB oluşturalım.

mysql> CREATE DATABASE CenttestLogs;

Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,

mysql> USE CenttestLogs;
mysql> CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);

Sonra da SystemEventsProperties isimli tablo

mysql> USE CenttestLogs;
mysql> CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);

Son olarak, CenttestLogs isimli DB’ye erişmesi için log_user isimli bir kullanıcıya yaza çizme izni veriyoruz. (log_user isimli kullanıcı, yazının FreeBSD ile ilgili bölümünde oluşturulmuştu..)

mysql> USE mysql;
mysql> GRANT ALL PRIVILEGES ON CenttestLogs.* TO 'log_user'@'localhost';
mysql> FLUSH PRIVILEGES;

Database ile ilgili işlemler bu kadar.

Şimdi, rsyslog.conf dosyasının ilgili yerine, centtes isimli sistemden gönderilecek logların, CenttestLogs isimli DB’deye yazılmasını söyleyen bir ekleme yapacağız.

/etc/rsyslog.conf dosyasını editliyoruz ve örneğimize uygun olan aşağıdaki satırı ekliyoruz.

+centtest
*.* :ommysql:127.0.0.1,CenttestLogs,log_user,sifre

Bu işlemi yaptıktan sonra rsyslog servisini yeniden başlatıyoruz. Böylece centtest isimli hosttan gönderilecek “tüm” iletiler, CenttestLogs DB’sindeki SystemEvents isimli tabloya yazılacaktır.
Not: rsyslog.conf dosyasına eklenen centtest hostname’i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)

CentOS`un Yapılandırılması

Burada da aynı şekilde rsyslog sunucusuna tüm logları  gönderebileceğiniz gibi sadece seçtiğiniz fasilitelere ait logların gönderilmesini sağlayabilirsiniz.

Tüm Logların İletilmesi

Bunun için /etc/syslog.conf dosyasının içine şu satırı eklemek yeterli.

*.*                                                     @192.168.12.242

Böylece tüm loglar 192.168.12.242 ip’li rsyslog sunucusuna udp üzerinden forward edilecektir.

Belirli fasilitelere ait logların iletilmesi

Örneğin sadece cron ile ilgili logları forward etmek için şu /etc/syslog.conf dosyasına şu şekilde bir satır girebilirsiniz.

cron.*                                                  @192.168.12.242

Böylece sadece cron ile ilgili loglar, rsyslog’a iletilecektir.

Gerekli eklemeleri yaptıktan sonra syslog’u restart ediyoruz.

# service syslog restart

Herşey yolunda gittiyse, loglar forward edilecektir. Test etmek için gene logger komutundan yararlanabilirsiniz. (bkz: Yukarıdaki FreeBSD bölümü – Log Sunucusunun Test Edilmesi)

Evet CentOS ile ilgili yapılması gerekenler de bu kadardı.
Şimdi bir windows üzerinden log forward işlemine bakalım.

Windows’tan Log Forwarding

Bildiğiniz gibi Windowsların, ön tanımlı syslog desteği bulunmamaktadır. Dolayısı ile Windows üzerinden rsyslog sunucusuna eventlog çıktılarını göndermek için 3. parti yazılımlar kullanmak icap ediyor. Google’da kısa bir araştırma yaparsanız, bu iş için kullanılabilecek bir çok yazılım bulabilirsiniz.  Ben burada birisi ücretli birisi ücretsiz iki adet 3. parti yazılımdan bahsedeceğim. Ancak öncesinde, rsyslog sunucusunu örnek windows bilgisayardan log alabilmek üzere yapılandıralım.

Log Sunucusundaki İşlemler

Ayarlar gene aynı diğer örneklerde olduğu gibi yapılıyor. Bu nedenle hızlıca geçeceğim.

Logları Text Dosyalarında Tutmak

Ben test için ismi wintest olan bir Windows Server 2003 kullanıyorum.  Windows’dan gelen tüm mesajların /var/log/wintest.log dosyasına yazılması için gerekli rsyslog.conf satırları şöyle:

+wintest
*.* /var/log/wintest.log

Şimdi de bu windows makina için /etc/hosts dosyasına bir kayıt girelim. Windows’un ip adresi 192.168.12.235’dir; bu durumda hosts dosyasına şu şekilde bir satır ekliyorum:

192.168.12.235	wintest

Son olarak da rsyslog servisini yeniden başlatıyoruz.

# /etc/init.d/rsyslog restart

Logları text tabanlı olarak dosyalarda tutmak için bu ayarlar yeterli, şimdi de logların bir MySQL database’inde tutulması işlemine bakalım.

Logların MySQL`e Yazdırılması

Bunun için herzamanki gibi bir db ve ilgili tabloları oluşturmamız gerekiyor.

Benim kullandığım Windows’un hostname’i wintest olduğundan dolayı, WintestLogs isimli bir db oluşturuyorum.

Mysql sunucusuna bağlanıyoruz.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Şimdi WintestLogs isimli bir DB oluşturalım.

mysql> CREATE DATABASE WintestLogs;

Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,

mysql> USE WintestLogs;
mysql>CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);

Sonra da SystemEventsProperties isimli tablo

mysql> USE WintestLogs;
mysql> CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);

Son olarak, WintestLogs isimli DB’ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)

mysql> USE mysql;
mysql> GRANT ALL PRIVILEGES ON WintestLogs.* TO 'log_user'@'localhost';
mysql> FLUSH PRIVILEGES;

Database ile ilgili işlemler bitti.

Şimdi de rsyslog.conf dosyasının ilgili yerine, wintest isimli hosttan gelecek logların WintestLogs isimli DB’deki SystemEvents isimli tabloya yazılması için gerekli satırı ekliyoruz.

+wintest
*.* :ommysql:127.0.0.1,WintestLogs,log_user,sifre

Rsyslog servisini yeniden başlattığınız zaman ayarlar devreye girecek ve DB’ye loglama işlemi başlayacaktır.
Not: rsyslog.conf dosyasına eklenen wintest hostname’i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)

Rsyslog sunucusu tarafındaki işlemler bu kadar.  Şimdi Windows tarafındakilere bakalım.

Windows’un Yapılandırılması

Bu bölümün başında da söylediğim gibi Windows’a 3. parti bir yazılım kurmamız gerekiyor. Ben iki alternatif üzerinde duruyorum; Birincisi Snare (Syslog for Windows) isimli ücretsiz bir yazılım. İkincisi ise EventReporter isimli Rsyslog’un geliştiricileri tarafından yazılmış ücrteli bir yazılım. EventReporter yazılımını almanız durumunda rsyslog’un geliştirilmesine katkı vermiş oluyorsunuz; ben de işte bu yüzden EventReporter’a yer vermek istiyorum.

Öncelikle EventReporter kurulumu ve yapılandırmasından, sonrasında ise Snare ile aynı işlemleri yapmaktan bahsedeceğim.

EventReporter Kurulumu

EventReporter, Windows’lar için bir log işleyicisi ve syslog forwarder’ıdır ve rsyslog’u geliştiren ekip tarafından yazılmakta olduğundan dolayı Rsyslog ve bir sonraki yazının konusu olan PhpLogcon ile tam uyumludur. Ancak kötü yanı, yazılımın ücretli ve windows başına 59 dolar gibi bir fiyatı olmasıdır.  Özellikle PhpLogcon kullanarak windows sunucularınız ile alakalı online log monitoring yapmak isterseniz, phplogcon’a tam uyumu nedeni ile bu yazılımı kullanmaktan başka seçenek yok gibi.  Çünkü diğer muadil yazılımlar ile phplogcon pek uyumlu çalışmıyorlar. En azından ben denedim ve başarılı sonuç alamadım.

Herneyse, Eventreporter kullanmak istiyorsanız, bu iş için biraz bütçe ayırmanız gerekiyor. Özellikle ücretsiz bir yazılım arıyorsanız o durumda bir sonraki başlıkta işlenen Snare’e bakabilirsiniz.

Eventreporter’ın kurulumu oldukça basit. Download adresinden gerekli exe dosyasını indirip next next next şeklinde kurulumu yapıyorsunuz.

Kurulum ve yapılandırma işlemleri epey basit olduğundan dolayı bu kısımda, detaylı kuruluma yer vermeyeceğim. Eventlog’ları rsyslog sunucusuna aktarmak için yapmanız gerekenleri resimli olarak anlatan bir dökümana şu adresten erişebilirsiniz:

http://www.eventreporter.com/common/en/stepbystep/forwarding-nt-eventlogs-to-syslog-mwa12.php

Yönergeleri takip edip yapılandırma işlemini hallettiğiniz zaman event iletileri rsyslog sunucusuna sorunsuz olarak iletilecektir. Eğer logların rsyslog sunucusunda ilgili dosyaya yazılmıyorsa, sebebini anlamak için rsyslog’u bir kez daha debug parametresi ile başlatıp durumu inceleyebilirsiniz.

EventReporter ile ilgili daha fazla bilgi için aşağıdaki linkten yararlanabilirsiniz.

http://www.eventreporter.com/en/

Şimdi de Snare ile ilgili bilgilere geçelim.

Snare Kurulumu

Bu kurulumun da bir esprisi yok, Download adresinden exe dosyasını indirip next next next demek sureti ile sisteme kuruyorsunuz. Yapılandırması da gene çok kolay. Snare sisteminize bir servis olarak kuruluyor ve 6161 nolu tcp portu dinlemeye başlıyor.  Yönetim ve yapılandırma işlerinin yapılabileceği güzel bir web arayüzü var, ilgili arayüze erişmek için aşağıdaki adresi browser’ınıza yazabilirsiniz.

http://127.0.0.1:6161

Snare’in EventLog’ları rsyslog sunucusuna iletmesi için gereken yapılandırma işlemleri, aşağıda bir örneği görülen “Networkd Configuration” segmesinden yapılıyor.

syslog for windows - snare

Bu ekranda 4 önemli nokta var.

Birincisi, bir hostname belirleyeceğiniz “Override detected DNS name with:” isimli kısım. Benim örneğimde sunucunun adı wintest, bu alana wintest yazabileceğim gibi boş bırakmam da bir şey değiştirmez. Çünkü rsyslog’un hosts dosyasına wintest isimli makina için bir giriş yaptım. Ancak siz yine de sağlama alıp, rsyslog.conf dosyasında +sunucuismi olarak belirttiğiniz hostname’i buraya yazın.

İkinci alan ise, Destination Snare Server address isimli bölümdür. Buraya rsyslog sunucunuzun ip adresini yazın.

Üçüncü alan, rsyslog sunucusunun portunu belirlediğiniz bölümdür. rsyslog default 514. porttan çalıştığı için buraya 514 yazıp UDP’yi seçiyoruz.

Son olarak, Enable SYSLOG Header bölümündeki kutucuğu işaretleyin. Böylce, snare logları rsyslog’un anlayabileceği syslog formatı ile gönderecektir.  Facility ve Priority bölümlerini istediğiniz gibi set edebilirsiniz. Ben tüm logları tek bir log dosyasına yazdıracağım için burada herhangi bir değişiklik yapmıyorum.

Ayarlarınızı tamamladıktan sonra, Change Configuration butonuna basıp ayarları kaydedin.  En son olarak da sol menudeki “Apply the Latest Audit Configuration” linkine tıklayıp değişikliklerin devreye alınmasını sağlayın.

Bu noktada Snare’e özel olarak, rsyslog sunucusunda küçük bir tanımlama yapmak gerekiyor.  Snare, rsyslog’a eventlog çıktılarını aşağıdakine benzer bir formatla yolluyor.

wintest#011MSWinEventLog#0111#011Security#0114169#011Fri

Görüldüğü gibi format pek anlaşılır değil. Bu sorunu aşmak için rsyslog’un gelen veriyi şekillendirmesini sağlayabilirsiniz. Bunun için /etc/rsyslog.conf dosyanızın GLOBAL DIRECTIVES kısmında bir yere, aşağıdaki iki satırı ekleyebilirsiniz:

$EscapeControlCharactersOnReceive off

Böylece Snare’den gelen loglar aşağıdaki gibi okunaklı olacaktır.

wintest MSWinEventLog 1 Security 4169 Fri

Ancak, bu yöntemi Snare kullanmak istemeniz durumunda uygulayın. Diğer muadil yazılımlar için böyle bir rsyslog.conf girdisine ihtiyaç bulunmamaktadır.

Snare ile ilgili genel yapılandırma işlemleri bu kadar, normal şartlarda Windows’un EventLog’ları Snare üzerinden rsyslog sunucusuna iletiliyor olmalıdır. Test etmek için herhangi bir windows servisini restart edebilirsiniz. Loglar ilgili dosyaya yazılmamaktaysa, yazının daha önceki bölümlerinde anlatıldığı gibi rsyslog’u debug parametresi ile çalıştırabilirsiniz.

Snare ile ilgili daha fazla özelleştirme yapmak isterseniz, aşağıdaki linkten yararlanabilirsiniz.

http://www.intersectalliance.com/projects/SnareWindows/index.html

Cisco Asa’dan Log Forwarding

Yazının bu son bölümünde de bir Cisco ASA 5505’den rsyslog sunucusuna nasıl log gönderilebileceğine değinmek istiyorum.

Önce rsyslog sunucusundaki rutin yapılandırma işlemine bakalım.

Log Sunucusundaki İşlemler

Bu kısımda da logları text dosyalarında ya da bir MysSQL DB’sinde tutabiliyorsunuz. Keyfinize göre iki yolu da seçebilirsiniz.

Logları Text Dosyalarında Tutmak

Test için kullandığım Asa’nın hostname’i ciscoasa bu nedenle rsyslog.conf dosyasının içerisine aşağıdaki gibi bir satır ekliyorum.

+ciscoasa
*.* /var/log/ciscoasa.log

Sonra da /etc/hosts dosyasına, 192.168.12.236 ip adresli ciscoasa için şu eklemeyi yapıyorum.

192.168.12.236                 ciscoasa

Dosyayı kaydedip, rsyslog’u yeniden başlatıyorum.

# /etc/init.d/rsyslog restart

Bu şekilde rsyslog, ciscoasa’dan gelecek tüm logları /var/log/ciscoasa.log dosyasına yazacak şekilde set edilmiş oluyor.

Logların MySQL`e Yazdırılması

Bunun için herzamanki gibi bir db ve ilgili tabloları oluşturmamız gerekiyor.

Benim kullandığım CiscoASA’nın hostname’i ciscoasa olduğundan dolayı, CiscoAsaLogs isimli bir db oluşturuyorum.

Mysql sunucusuna bağlanıyoruz.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Şimdi CiscoAsaLogs isimli bir DB oluşturalım.

mysql> CREATE DATABASE CiscoAsaLogs;

Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,

mysql> USE CiscoAsaLogs;
mysql>CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility smallint NULL,
Priority smallint NULL,
FromHost varchar(60) NULL,
Message text,
NTSeverity int NULL,
Importance int NULL,
EventSource varchar(60),
EventUser varchar(60) NULL,
EventCategory int NULL,
EventID int NULL,
EventBinaryData text NULL,
MaxAvailable int NULL,
CurrUsage int NULL,
MinUsage int NULL,
MaxUsage int NULL,
InfoUnitID int NULL ,
SysLogTag varchar(60),
EventLogType varchar(60),
GenericFileName VarChar(60),
SystemID int NULL
);

Sonra da SystemEventsProperties isimli tablo

mysql> USE CiscoAsaLogs;
mysql> CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);

Son olarak, CiscoAsaLogs isimli DB’ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)

mysql> USE mysql;
mysql> GRANT ALL PRIVILEGES ON CiscoAsaLogs.* TO 'log_user'@'localhost';
mysql> FLUSH PRIVILEGES;

Database ile ilgili işlemler bitti.

Şimdi de rsyslog.conf dosyasının ilgili yerine, ciscoasa isimli hosttan gelecek logların CiscoAsaLogs isimli DB’deki SystemEvents isimli tabloya yazılması için gerekli satırı ekliyoruz.

+ciscoasa
*.* :ommysql:127.0.0.1,CiscoAsaLogs,log_user,sifre

Rsyslog servisini yeniden başlattığınız zaman ayarlar devreye girecek ve DB’ye loglama işlemi başlayacaktır.
Not: rsyslog.conf dosyasına eklenen ciscoasa hostname’i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)

Rsyslog sunucusu tarafındaki işlemler bu kadar. Şimdi Cisco tarafındakilere bakalım.

Cisco ASA’nın Yapılandırılması

Normalde bu işi, Cisco’nun yönetim arabirimi olan ASDM üzerinden grafiksel olarak yapabilirsiniz, ancak ben daha pratik oluğundan dolayı komut satırını tercih ediyorum.

Gerekli komutlar sırası ile şu şekilde:

ciscoasa> en
Password: **************
ciscoasa# conf t
ciscoasa(config)# logging enable
ciscoasa(config)# logging trap informational
ciscoasa(config)# logging host inside 192.168.12.242

Burada satırlar ile ilgili kısa açıklama yapmak gerekirse:
logging enable: logging’i devreye almaktadır.
logging trap informational: rsyslog sunucusuna Info loglarının gönderilmesini sağlamaktadır.
logging host inside 192.168.12.242: logların (inside) interface’e bakan 192.168.12.242 ip’li syslog sunucusuna gönderilmesini sağlar.

Herşey yolunda gittiyse, ciscoasa hostname’li asa’nın info logları /var/log/ciscoasa.log dosyasına yazılmaktadır.

Cisco üzerinde, log facility’lerini de belirlemek ya da info logları yerine debug, critic, warning,  notice vs. gibi level bazlı loglama yapmak da mümkün. Bu gibi ayarları kendi ihtiyaçlarınız doğrultusunda yapabilirsiniz.

Örnek olarak info mesajları yerine debug mesajlarını göndermek isterseniz ilgili trap komutu şu şekilde olmalıdır.

ciscoasa(config)# logging trap debugging

Tüm level’lar aşağıdaki gibidir, ihtiyacınıza göre birini seçebilirsiniz.
alerts
critical
debugging
emergencies
errors
informational
notifications
warnings

Evet rsyslog kullanarak merkezi log sunucusu oluşturmak ile  ilgili temel işlemler bundan ibaretti.  Eğer bir rsyslog sunucusu set ettiyseniz, son olarak bir noktaya dikkat çekmek istiyorum. Diskinizde yer kalmaması gibi problemler yaşamamak için eğer, logları text tabanlı dosyalarda tutuyorsanuz, üretilen log dosyalarını logrotate’e eklemeyi ya da MySQL’de tutuyorsanız backuplarını alıp belirli periyodlarda truncate etmeyi unutmayın 🙂