Sådan konfigureres Central Logging Server med Rsyslog i Linux


Logfiler er en kritisk komponent i enhver software eller ethvert operativsystem. Logfiler registrerer normalt brugerens handlinger, systemhændelser, netværksaktivitet og så meget mere, afhængigt af hvad de er beregnet til. Et af de mest anvendte logningssystemer på Linux-systemer er rsyslog.

Rsyslog er et kraftfuldt, sikkert og højtydende logbehandlingssystem, der accepterer data fra forskellige kildetyper (systemer/applikationer) og outputter det i flere formater.

Det har udviklet sig fra en almindelig syslog-dæmon til et fuldt udstyret logningssystem på virksomhedsniveau. Det er designet i en klient/server-model, derfor kan den konfigureres som en klient og/eller som en central logningsserver til andre servere, netværksenheder og fjernapplikationer.

Med henblik på denne vejledning bruger vi følgende værter:

  • Server: 192.168.241.140
  • Klient: 172.31.21.58

Sådan installeres og konfigureres Rsyslog Server

De fleste Linux-distributioner leveres med rsyslog-pakken forudinstalleret. Hvis det ikke er installeret, kan du installere det ved hjælp af dit Linux-pakkehåndteringsværktøj som vist.

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

Når rsyslog er installeret, skal du starte tjenesten for nu, aktivere den til automatisk start ved opstart og kontrollere dens status med systemctl-kommandoen.

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

Hovedkonfigurationsfilen til rsyslog findes på /etc/rsyslog.conf, som indlæser moduler, definerer de globale direktiver, indeholder regler til behandling af logmeddelelser, og den inkluderer også alle konfigurationsfiler i /etc/rsyslog.d/ til forskellige applikationer/tjenester .

$ sudo vim /etc/rsyslog.conf

Som standard bruger rsyslog imjournal- og imusock-modulerne til at importere strukturerede logmeddelelser fra systemd-journal og til at acceptere henholdsvis syslog-meddelelser fra applikationer, der kører på det lokale system via Unix-sockets.

For at konfigurere rsyslog som en netværks-/central logningsserver skal du indstille protokollen (enten UDP eller TCP eller begge dele), som den bruger til ekstern syslog-modtagelse såvel som den port, den lytter til.

Hvis du vil bruge en UDP-forbindelse, som er hurtigere, men upålidelig, skal du søge og fjerne kommentar til nedenstående linjer (udskift 514 med den port, du vil have den til at lytte til, dette skal matche den portadresse, som klienterne sender beskeder til, vi ser ved dette mere, når du konfigurerer en rsyslog-klient).

$ModLoad imudp
$UDPServerRun 514

For at bruge TCP-forbindelse (som er langsommere, men mere pålidelig), skal du søge og fjerne kommentar til nedenstående linjer.

$ModLoad imtcp
$InputTCPServerRun 514

I dette tilfælde ønsker vi at bruge både UDP- og TCP-forbindelser på samme tid.

Dernæst skal du definere regelsættet til behandling af fjernlogfiler i følgende format.

facility.severity_level	destination (where to store log)

Hvor:

  • facilitet: er en type proces/applikationsgenererende meddelelse, de inkluderer auth, cron, daemon, kernel, local0..local7. Brug af * betyder alle faciliteter.
  • severity_level: er type logmeddelelse: emerg-0, alarm-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. Brug af * betyder alle sværhedsgrader, og ingen indebærer intet sværhedsgrad.
  • destination: er enten lokal fil eller ekstern rsyslog-server (defineret i formularen IP: port).

Vi bruger følgende regelsæt til indsamling af logfiler fra eksterne værter ved hjælp af RemoteLogs-skabelonen. Bemærk, at disse regler skal komme før regler for behandling af lokale meddelelser, som vist på skærmbilledet.

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

Når man ser på ovenstående regelsæt, er den første regel "$ template RemoteLogs,"/var/log /% HOSTNAME% /% PROGRAMNAME% .log "".

Direktivet $ skabelon fortæller rsyslog-dæmonen at samle og skrive alle de modtagne fjernmeddelelser til forskellige logfiler under/var/log, baseret på værtsnavnet (klientmaskinnavn) og fjernklientfaciliteten (program/applikation), der genererede meddelelserne som defineret ved de indstillinger, der findes i skabelonen RemoteLogs.

Den anden linje "*. *? RemoteLogs" betyder optagelse af beskeder fra alle faciliteter på alle sværhedsgrader ved hjælp af RemoteLogs-skabelonkonfigurationen.

Den sidste linje "& ~" instruerer rsyslog om at stoppe behandlingen af meddelelserne, når den er skrevet til en fil. Hvis du ikke inkluderer "& ~", vil meddelelser i stedet blive skrevet til de lokale filer.

Der er mange andre skabeloner, som du kan bruge for at få flere oplysninger, se rsyslog-konfigurationsman-siden (man rsyslog.conf) eller se Rsyslog-online-dokumentationen.

Det er det ved at konfigurere rsyslog-serveren. Gem og luk konfigurationsfilen. For at anvende de seneste ændringer skal du genstarte rsyslog-dæmonen med følgende kommando.

$ sudo systemctl restart rsyslog

Bekræft nu rsyslog-netværksstikkene. Brug kommandoen ss (eller grep til at filtrere rsyslogd-forbindelser ud.

$ sudo ss -tulnp | grep "rsyslog"

Dernæst på CentOS 7, hvis du har SELinux aktiveret, skal du køre følgende kommandoer for at tillade rsyslog-trafik baseret på typen af netværksstik.

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

Hvis systemet har firewall aktiveret, skal du åbne port 514 for at tillade begge UDP/TCP-forbindelser til rsyslog-serveren ved at køre.

------------- 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 

Sådan konfigureres Rsyslog Client til at sende logfiler til Rsyslog Server

Nu på klientsystemet skal du kontrollere, om rsyslog-tjenesten kører eller ikke med følgende kommando.

$ sudo systemctl status rsyslog

Hvis den ikke er installeret, skal du installere den og starte tjenesten som vist tidligere.

$ 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

Når rsyslog-tjenesten er i gang, skal du åbne hovedkonfigurationsfilen, hvor du vil udføre ændringer til standardkonfigurationen.

$ sudo vim /etc/rsyslog.conf

For at tvinge rsyslog-dæmonen til at fungere som en logklient og videresende alle lokalt genererede logbeskeder til den eksterne rsyslog-server, skal du tilføje denne videresendelsesregel i slutningen af filen som vist i det følgende skærmbillede.

*. *  @@192.168.100.10:514

Ovenstående regel sender meddelelser fra alle faciliteter og på alle sværhedsgrader. Brug følgende regel for at sende meddelelser fra en bestemt facilitet for eksempel godkendelse.

auth. *  @@192.168.100.10:514

Gem ændringerne, og luk konfigurationsfilen. For at anvende ovenstående indstillinger skal du genstarte rsyslog-dæmonen.

$ sudo systemctl restart rsyslog

Sådan overvåges fjernlogning på Rsyslog-serveren

Det sidste trin er at kontrollere, om rsyslog faktisk modtager og logger meddelelser fra klienten, under/var/log, i formen værtsnavn/programnavn.log.

Kør en ls-kommando til lang oversigt over den overordnede logboks, og kontroller, om der er en mappe, der hedder ip-172.31.21.58 (eller hvad din klientmaskins værtsnavn er).

 
$ ls -l /var/log/

Hvis mappen findes, skal du kontrollere logfilerne inde i den ved at køre.

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

Rsyslog er et højtydende logbehandlingssystem designet i en klient/serverarkitektur. Vi håber, at du er i stand til at installere og konfigurere Rsyslog som en central/netværkslogningsserver og som en klient som vist i denne vejledning.

Det kan også være en god idé at henvise til relevante rsyslog-manualsider for mere hjælp. Du er velkommen til at give os feedback eller stille spørgsmål.