rsyslog ve logrorate kurulum ve yapılandırması..
rsyslog
cihazlarımızın veya programlarımızın ürettiği log dosyalarını başka bir sunucuda tutmak isteyebiliriz. bu hem elimizde dosyanın bir kopyası olmasını sağlar hem de ekstra bir güvenlik katmanı sağlamış olur. işte bunu linux platformunda yapan uygulamanın adı rsyslog. bu bir log sunucusu ve oldukça da esnek bir yapıda. rsyslog herhangi bir linux platformunda çalışır hatta bazı sürümler ile default olarak gelir. bizde bu yazıda raspberry pi cihazında çalıştıracağız. bu kurulum debian ve türevleri (ubuntu vs.), ayrıca raspbian'da çalışacaktır.
öncelikle sistem içinde kurulu rsyslog var mı bakalım;
systemctl cat rsyslog
sistemde yoksa;
apt install rsyslog
kurulum bittikten sonra rsyslog'un konfig dosyasını açıyoruz;
nano /etc/rsyslog.conf
MODULES altındaki ayarları aşağıdaki şekilde yapalım;
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
GLOBAL DIRECTIVES altındaki ayarları aşağıdaki şekilde yapalım;
# $AllowedSender - specifies which remote systems are allowed to send syslog messages to rsyslogd
$AllowedSender TCP, 192.168.1.0/24
$AllowedSender TCP, 192.168.2.0/24
$AllowedSender kısmına log yollayacak cihazın IP sini giriyoruz. isterseniz 192.168.1.0/24 gibi subnette verebilirsiz. yukarıdaki örnekte 192.168.1.x ve 192.168.2.x den gelecek tüm logları kabul edecektir. sadece TCP portundan değil UDP portundan gelen log'ları da kabul eder.
yine GLOBAL DIRECTIVES altındaki template kısmını aşağıdaki gibi ayarlıyoruz;
$template RemoteLogs,"/var/log/remotelogs/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
dosya ile işimiz bitti, kaydedelim.
burada logların tutulmasını istediğiniz klasör yolunu giriyoruz. mesela ben /var/log/remotelogs isimli bir klasör içinde topluyorum. klasörün içinde cihazların isimleri (hostname) ile ayrıca klasör oluşturulur ve o klasörün içinde de cihazlar veya uygulamalar tarafından yollanan log dosyaları olur.
yapılandırma bu kadardı. şimdi tcp ve udp için 514 no'lu portu açacağız. bunun için ufw kullanıyorum. sisteminizde yüklü değilse yükleyin, büyük kolaylık. iptables'ın komutları ile uğraşmak dert.
sistemde ufw yoksa büyük ihtimalle tüm portlar açıktır. o yüzden ufw yükledikten sonra port dinleyen uygulamalarınız varsa o portları ufw üzerinden ayrıca açmanız gerekebilir. ancak ufw yükledikten sonra 22 no'lu ssh portunu da engelleyebilir.
bunun için önceden iptables üzerinden 22 no'lu portu açıyoruz;
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
şimdi ufw kuralım;
apt install ufw
çalıştıralım;
ufw enable
artık 514 no'lu portları açabiliriz;
ufw allow 514/tcp
ufw allow 514/udp
işlemler tamam. artık rsyslog'u tekrar çalıştırılalım ki değiştirdiğimiz konfig dosyası etkin olsun;
systemctl restart rsyslog
bundan sonra log dosyalarını ayarlardığınız klasör içinde görebilmeniz lazım.
logrotate
loglar oluşmaya başladı. log dosyaları önlem almazsak çok büyük boyutlara ulaşabiliyor. bunu engellemek için logrotate isimli uygulamayı kullanıyoruz. bu uygulama çoğu linux sürümü ile birliklte default olarak geliyor zaten. uygulama log dosyalarını istediğimiz periyodda temizleyip, temizlediği kısmı da başka bir dosyaya kopyalayıp saklıyor. yani kısaca log dosyalarını parçalara ayırıyor. bu işlemin adına döndürme deniyor.
logrotate sistemde var mı yok mu yinede bir bakalım;
logrorate
eğer varsa zaten version ve kullanım bilgilerini size göstecektir.
eğer logrotate bir şekilde sisteminizde yoksa;
apt install logrotate
şimdi logları parçalara ayırmak için çalışmalara başlayalım. uygulamanın bulunduğu klasörün içine girelim;
cd /etc/logrotate.d
burada klasörün içini listeyelim ki işin mantığını anlayalım;
ls -al
-rw-r--r-- 1 root root 120 Nov 3 2017 alternatives
-rw-r--r-- 1 root root 442 Jul 16 2019 apache2
-rw-r--r-- 1 root root 126 Nov 20 2017 apport
-rw-r--r-- 1 root root 173 Apr 20 2018 apt
-rw-r--r-- 1 root root 82 Feb 10 2019 certbot
-rw-r--r-- 1 root root 107 Sep 20 2016 dbconfig-common
-rw-r--r-- 1 root root 112 Nov 3 2017 dpkg
-rw-r--r-- 1 root root 313 Apr 4 2018 fail2ban
-rw-r--r-- 1 root root 1120 Jan 23 2018 freeradius
-rw-r--r-- 1 root root 146 Nov 23 2018 lxd
-rw-r--r-- 1 root root 799 Nov 10 2020 mysql-server
-rw-r--r-- 1 root root 182 Oct 9 2020 openvpn
-rw-r--r-- 1 root root 215 Feb 14 2021 php7.4-fpm
-rw-r--r-- 1 root root 124 Apr 2 2018 redis-server
-rw-r--r-- 1 root root 125 Nov 9 17:06 remotelogs
-rw-r--r-- 1 root root 501 Nov 8 02:29 rsyslog
-rw-r--r-- 1 root root 819 Mar 29 2019 samba
-rw-r--r-- 1 root root 131 Nov 8 02:29 telegraf
-rw-r--r-- 1 root root 244 Sep 23 23:41 ubuntu-advantage-tools
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Nov 25 2019 unattended-upgrades
burada ilgili uygulamarın log dosyaları için oluşturulmuş konfig dosyalarını göreceksiniz. mesela bendeki yukarıdaki gibi.
şimdi bizde remotelogs klasöründe oluşacak olan loglarımız için logrotate konfig dosyası oluşturalım;
nano remotelogs
bunun içine aşağıdakileri kopyalayalım ve kaydedelim;
/var/log/remotelogs/*/*.log
{
rotate 7
daily
missingok
dateext
copytruncate
notifempty
compress
}
rotate 7 : log dosyalarının en fazla yedi adet olmasını söylüyoruz. sekizinci dosyayı ilk yarattığının üzerine yazacaktır ya da ilk dosyayı silip, sekizinciyi oluşturacaktır. yani her şekilde toplamda aynı log dosyasının yedi adedini göreceksiniz. isterseniz 7 rakamını istediğiniz şekilde değiştirebilirsiniz.
daily : log dosyalarını her gün döndürecek yani mevcut olanın yedeğini alıp sıfır bir log dosyası oluturacaktır. isterseniz weekly haftada bir döndürme, montly ayda bir döndürme, yearly yılda bir döndürme şeklinde ayarlayabilirsiniz.
missingok : konfig dosyası içinde log dosyasını bulamazsa hata vermeden devam eder.
dateext : log dosyasını döndürürken dosya isiminin sonuna tarih ekler.
copytruncate : orjinal log dosyasını silmez, sadece içindekini kopyalar başka bir dosya yaratıp içine yapıştırır ve orjinal dosyayı temizler. bazı uygulamalar orjinal dosyanın silinmesinden hoşlanmadığı için bu komutu kullanıyoruz.
notifempty : log dosyası boş ise döndürmez.
compress : döndürdüğü dosyayı sıkıştırıp saklar.
bazı durumlarda döndürme işlemi sırasında az da olsa log kaçırabilme durumu olabileceğinden ilgili servisi çok kısa süreliğine durdurup sonra döndürme işlemini yapıp sonra yine çalıştırmak gerekebilir. mesela bunun için bir script yazılabilir.
bunun için aşağıdaki komutu ekliyoruz;
postrotate
/home/ronniejamesdio/script.sh
endscript
ayrıca döndürme işlemini dosya boyutuna göre de yapabilirsiniz. bunun için size komutunu kullanıyoruz. ancak format aşağıdakiler gibi olmalı;
size 5k
size 5M
size 5G
örneklerde dosya boyutu 5 kilobyte geçerse veya 5 megabyte ı geçerse veya 5 gigabyte'ı geçerse log dosyasını döndürecekir. siz nasıl istiyorsanız öyle bir değer kullanın.
Oluşturduğumuz remotelogs isimli konfig dosyasını Unix formatına çevirmemiz gerek aksi halde logrotate dosyayı hatalı okuyor.
Bunun için dos2unix isimli uygulamayı kuruyoruz;
apt install dos2unix
Şimdi de konfig dosyanımızı Unix formatına çevirelim;
dos2unix /etc/lograte.d/remoteconfig
Artık logrotate konfigürayonu da tamamdır.
Şimdi konfigürasyonu test zamanı;
logrotate -f /etc/lograte.d/remoteconfig
Sorun yoksa hiç bir çıktı vermeyecektir bu komut.
logrorate ile ilgili daha bir çok ayar var, ben genel olanları anlattım. internette çok örnek bulabilirsiniz.
hepsi bu kadar.
@gurkan-atilgan
konfig :')
emek var +REP🤘🏼
Türkçe ye katkımız olmasın mı?