Kako podesiti centralni logging server sa Rsyslog u Linuxu


Evidencije su kritična komponenta svakog softvera ili operativnog sistema. Dnevnici obično bilježe radnje korisnika, sistemske događaje, mrežnu aktivnost i još mnogo toga, ovisno o tome čemu su namijenjeni. Jedan od najčešće korištenih sistema za evidentiranje na Linux sistemima je rsyslog.

Rsyslog je moćan, siguran i sistem za obradu dnevnika visokih performansi koji prihvata podatke iz različitih tipova izvora (sistema/aplikacija) i šalje ih u više formata.

Evoluirao je od običnog syslog demona do potpuno opremljenog sistema evidentiranja na nivou preduzeća. Dizajniran je u modelu klijent/server, stoga se može konfigurirati kao klijent i/ili kao centralni logging server za druge servere, mrežne uređaje i udaljene aplikacije.

Testing Environment

Za potrebe ovog vodiča koristit ćemo sljedeće hostove:

  • Server: 192.168.241.140
  • Klijent: 172.31.21.58

Kako instalirati i konfigurirati Rsyslog server

Većina Linux distribucija dolazi s unaprijed instaliranim paketom rsyslog. U slučaju da nije instaliran, možete ga instalirati pomoću vašeg alata za upravljanje paketima za Linux kao što je prikazano.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Jednom kada se rsyslog instalira, za sada morate pokrenuti uslugu, omogućiti joj da se automatski pokreće pri pokretanju i provjeriti njen status pomoću naredbe systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Glavna konfiguracijska datoteka rsyslog nalazi se na /etc/rsyslog.conf, koja učitava module, definira globalne direktive, sadrži pravila za obradu dnevnik poruka i također uključuje sve konfiguracijske datoteke u /etc /rsyslog.d/za razne aplikacije/usluge.

sudo vim /etc/rsyslog.conf

Prema zadanim postavkama, rsyslog koristi imjournal i imusock module za uvoz strukturiranih poruka dnevnika iz systemd dnevnika i za prihvatanje syslog-a poruke od aplikacija koje se pokreću na lokalnom sistemu preko Unix soketa, respektivno.

Da konfigurišete rsyslog kao mrežni/centralni server za evidentiranje, morate postaviti protokol (bilo UDP ili TCP ili oboje) koji će koristiti za daljinski prijem syslog-a, kao i port na kojem sluša.

Ako želite koristiti UDP vezu, koja je brža, ali nepouzdana, pretražite i dekomentirajte redove ispod (zamijenite 514 portom na kojem želite da sluša, ovo bi trebalo odgovara adresi porta na koju klijenti šalju poruke, to ćemo više pogledati prilikom konfigurisanja rsyslog klijenta).

$ModLoad imudp
$UDPServerRun 514

Za korištenje TCP veze (koja je sporija, ali pouzdanija), pretražite i dekomentirajte redove ispod.

$ModLoad imtcp
$InputTCPServerRun 514

U ovom slučaju želimo istovremeno koristiti i UDP i TCP veze.

Zatim morate definirati skup pravila za obradu udaljenih dnevnika u sljedećem formatu.

facility.severity_level	destination (where to store log)

gdje:

  • facility: je tip poruke koja generiše proces/aplikaciju, oni uključuju auth, cron, daemon, kernel, local0..local7. Korištenje * znači sve objekte.
  • nivo_ozbiljnosti: je tip poruke dnevnika: emerge-0, alert-1, crit-2, err-3, warn-4, note-5, info-6, debug-7. Korištenje * znači sve razine ozbiljnosti, a nijedan ne podrazumijeva nikakav nivo ozbiljnosti.
  • odredište: je ili lokalna datoteka ili udaljeni rsyslog server (definiran u obliku IP:port).

Koristit ćemo sljedeći skup pravila za prikupljanje dnevnika sa udaljenih hostova, koristeći predložak RemoteLogs. Imajte na umu da ova pravila moraju biti ispred svih pravila za obradu lokalnih poruka, kao što je prikazano na snimku ekrana.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

Gledajući gornji skup pravila, prvo pravilo je “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

Direktiva $template govori rsyslog demonu da prikupi i zapiše sve primljene udaljene poruke u različite dnevnike pod /var/log, na osnovu ime hosta > (ime klijentske mašine) i udaljenog klijenta (program/aplikacija) koji je generisao poruke kao što je definisano postavkama prisutnim u šablonu RemoteLogs.

Drugi red “*.* ?RemoteLogs ” znači snimanje poruka sa svih objekata na svim nivoima ozbiljnosti koristeći konfiguraciju predloška RemoteLogs.

Posljednji red “& ~ ” daje instrukcije rsyslogu da prestane s obradom poruka nakon što se upiše u datoteku. Ako ne uključite “& ~”, poruke će se umjesto toga upisivati u lokalne datoteke.

Postoji mnogo drugih predložaka koje možete koristiti, za više informacija pogledajte stranicu priručnika za konfiguraciju rsyslog (man rsyslog.conf) ili pogledajte Rsyslog online dokumentaciju.

To je sve sa konfigurisanjem rsyslog servera. Sačuvajte i zatvorite konfiguracioni fajl. Da biste primijenili nedavne promjene, ponovo pokrenite rsyslog demon sa sljedećom naredbom.

sudo systemctl restart rsyslog

Sada provjerite mrežne utičnice rsyslog. Koristite naredbu ss (ili netstat sa istim oznakama) i prenesite izlaz u grep da filtrirate rsyslogd veze.

sudo ss -tulnp | grep "rsyslog"

Zatim, na CentOS 7, ako ste omogućili SELinux, pokrenite sljedeće komande da biste dozvolili rsyslog promet na osnovu tipa mrežne utičnice.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Ako sistem ima omogućen zaštitni zid, potrebno je da otvorite port 514 da omogućite obje UDP/TCP veze sa rsyslog serverom, pokretanjem.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Kako konfigurirati Rsyslog klijenta da šalje zapise na Rsyslog server

Sada na klijentskom sistemu, provjerite da li je servis rsyslog pokrenut ili ne pomoću sljedeće naredbe.

sudo systemctl status rsyslog

Ako nije instaliran, instalirajte ga i pokrenite uslugu kao što je prikazano ranije.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Kada se rsyslog servis pokrene i pokrene, otvorite glavnu konfiguracijsku datoteku u kojoj ćete izvršiti promjene zadane konfiguracije.

sudo vim /etc/rsyslog.conf

Da biste prisilili demona rsyslog da djeluje kao klijent dnevnika i prosljeđuje sve lokalno generirane poruke dnevnika na udaljeni rsyslog server, dodajte ovo pravilo prosljeđivanja na kraj datoteke kao što je prikazano na sljedećem snimku ekrana.

*. *  @@192.168.100.10:514

Gornje pravilo će slati poruke iz svih objekata i na svim nivoima ozbiljnosti. Za slanje poruka iz određene ustanove, na primjer auth, koristite sljedeće pravilo.

auth. *  @@192.168.100.10:514

Sačuvajte promene i zatvorite konfiguracioni fajl. Da biste primijenili gornje postavke, ponovo pokrenite rsyslog demon.

sudo systemctl restart rsyslog

Kako nadgledati daljinsko evidentiranje na Rsyslog serveru

Posljednji korak je provjera da li rsyslog zaista prima i evidentira poruke od klijenta, pod /var/log, u obliku ime hosta/ime programa.log.

Pokrenite naredbu ls za dugu listu roditeljskog direktorija dnevnika i provjerite postoji li direktorij pod nazivom ip-172.31.21.58 (ili bilo koje drugo ime hosta vašeg klijentskog računala).

 
ls -l /var/log/

Ako direktorij postoji, provjerite datoteke dnevnika unutar njega pokretanjem.

sudo ls -l /var/log/ip-172-31-21-58/

Sažetak

Rsyslog je sistem za obradu dnevnika visokih performansi, dizajniran u klijent/server arhitekturi. Nadamo se da ste u mogućnosti da instalirate i konfigurišete Rsyslog kao centralni/mrežni server za evidentiranje i kao klijent kao što je prikazano u ovom vodiču.

Možda ćete htjeti pogledati relevantne stranice priručnika za rsyslog za dodatnu pomoć. Slobodno nam dajte povratne informacije ili postavite pitanja.