Hvordan sette opp sentral loggingsserver med Rsyslog i Linux


Logger er en kritisk komponent i enhver programvare eller operativsystem. Logger registrerer vanligvis brukerens handlinger, systemhendelser, nettverksaktivitet og mye mer, avhengig av hva de er ment for. Et av de mest brukte loggingssystemene på Linux-systemer er rsyslog.

Rsyslog er et kraftig, sikkert og høyytelses loggbehandlingssystem som aksepterer data fra forskjellige typer kilder (systemer/applikasjoner) og sender det ut i flere formater.

Det har utviklet seg fra en vanlig syslog-demon til et fullt utstyrt loggingssystem på bedriftsnivå. Den er designet i en klient/server-modell, derfor kan den konfigureres som en klient og/eller som en sentral loggingsserver for andre servere, nettverksenheter og eksterne applikasjoner.

For formålet med denne veiledningen vil vi bruke følgende verter:

  • Tjener: 192.168.241.140
  • Kunde: 172.31.21.58

Hvordan installere og konfigurere Rsyslog Server

De fleste Linux-distribusjoner leveres med rsyslog-pakken forhåndsinstallert. I tilfelle den ikke er installert, kan du installere den ved å bruke Linux-pakkebehandlingsverktøyet 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 installert, må du starte tjenesten for nå, aktivere den til å starte automatisk ved oppstart og sjekke statusen med systemctl-kommandoen.

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

Hovedkonfigurasjonsfilen for rsyslog ligger på /etc/rsyslog.conf, som laster inn moduler, definerer de globale direktivene, inneholder regler for behandling av loggmeldinger og den inkluderer også alle konfigurasjonsfiler i /etc/rsyslog.d/ for ulike applikasjoner/tjenester .

$ sudo vim /etc/rsyslog.conf

Som standard bruker rsyslog modulene imjournal og imusock for å importere strukturerte loggmeldinger fra systemd journal og for å akseptere syslog-meldinger fra applikasjoner som kjører på det lokale systemet via Unix-sockets.

For å konfigurere rsyslog som en nettverks-/sentral loggingsserver, må du angi protokollen (enten UDP eller TCP eller begge deler) den skal bruke for ekstern syslog-mottak, samt porten den lytter på.

Hvis du vil bruke en UDP-tilkobling, som er raskere, men upålitelig, søk og fjern kommenter linjene nedenfor (erstatt 514 med porten du vil at den skal lytte på, denne skal samsvare med portadressen som klientene sender meldinger til, vi vil se på dette mer når du konfigurerer en rsyslog-klient).

$ModLoad imudp
$UDPServerRun 514

For å bruke TCP-tilkobling (som er tregere, men mer pålitelig), søk og fjern kommentarer på linjene nedenfor.

$ModLoad imtcp
$InputTCPServerRun 514

I dette tilfellet ønsker vi å bruke både UDP- og TCP-tilkoblinger samtidig.

Deretter må du definere regelsettet for behandling av eksterne logger i følgende format.

facility.severity_level	destination (where to store log)

Hvor:

  • fasilitet: er typen prosess/applikasjonsgenererende melding, de inkluderer auth, cron, daemon, kernel, local0..local7. Å bruke * betyr alle fasiliteter.
  • severity_level: er typen loggmelding: emerg-0, alert-1, crit-2, err-3, warn-4, notice-5, info-6, debug-7. Å bruke * betyr alle alvorlighetsnivåer, og ingen innebærer ingen alvorlighetsgrad.
  • destinasjon: er enten lokal fil eller ekstern rsyslog-server (definert i formen IP:port).

Vi vil bruke følgende regelsett for å samle inn logger fra eksterne verter, ved å bruke RemoteLogs-malen. Merk at disse reglene må komme før eventuelle regler for behandling av lokale meldinger, som vist på skjermbildet.

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

Ser vi på regelsettet ovenfor, er den første regelen \$template RemoteLogs,/var/log/%HOSTNAME%/%PROGRAMNAME%log.

Direktivet $template forteller rsyslog daemon å samle og skrive alle de mottatte eksterne meldingene til distinkte logger under /var/log, basert på vertsnavnet (klientmaskinnavn) og ekstern klientfasilitet (program/applikasjon) som genererte meldingene som definert ved hjelp av innstillingene i malen RemoteLogs.

Den andre linjen \*.* ?RemoteLogs betyr å registrere meldinger fra alle fasiliteter på alle alvorlighetsnivåer ved å bruke RemoteLogs-malkonfigurasjonen.

Den siste linjen \& ~ instruerer rsyslog om å stoppe behandlingen av meldingene når de er skrevet til en fil. Hvis du ikke inkluderer & ~, vil meldinger i stedet bli skrevet til de lokale filene.

Det er mange andre maler du kan bruke, for mer informasjon, se rsyslog-konfigurasjonsman-siden (man rsyslog.conf) eller se Rsyslog-dokumentasjonen på nett.

Det er det med å konfigurere rsyslog-serveren. Lagre og lukk konfigurasjonsfilen. For å bruke de siste endringene, start rsyslog daemon på nytt med følgende kommando.

$ sudo systemctl restart rsyslog

Bekreft nå rsyslog-nettverkskontaktene. Bruk ss-kommandoen (eller grep for å filtrere ut rsyslogd-tilkoblinger.

$ sudo ss -tulnp | grep "rsyslog"

Deretter, på CentOS 7, hvis du har SELinux aktivert, kjør følgende kommandoer for å tillate rsyslog-trafikk basert på nettverkskontakttypen.

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

Hvis systemet har brannmur aktivert, må du åpne port 514 for å tillate begge UDP/TCP-tilkoblinger til rsyslog-serveren, ved å kjø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 

Hvordan konfigurere Rsyslog-klienten til å sende logger til Rsyslog-serveren

Nå på klientsystemet, sjekk om rsyslog-tjenesten kjører eller ikke med følgende kommando.

$ sudo systemctl status rsyslog

Hvis den ikke er installert, installer den og start 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 oppe og kjører, åpner du hovedkonfigurasjonsfilen der du vil utføre endringer i standardkonfigurasjonen.

$ sudo vim /etc/rsyslog.conf

For å tvinge rsyslog-demonen til å fungere som en loggklient og videresende alle lokalt genererte loggmeldinger til den eksterne rsyslog-serveren, legg til denne videresendingsregelen på slutten av filen som vist i følgende skjermbilde.

*. *  @@192.168.100.10:514

Regelen ovenfor vil sende meldinger fra alle anlegg og på alle alvorlighetsnivåer. For å sende meldinger fra et bestemt anlegg, for eksempel auth, bruk følgende regel.

auth. *  @@192.168.100.10:514

Lagre endringene og lukk konfigurasjonsfilen. For å bruke innstillingene ovenfor, start rsyslog-demonen på nytt.

$ sudo systemctl restart rsyslog

Hvordan overvåke ekstern logging på Rsyslog-serveren

Det siste trinnet er å bekrefte om rsyslog faktisk mottar og logger meldinger fra klienten, under /var/log, i formen vertsnavn/programnavn.log.

Kjør en ls-kommando til en lang liste over overordnet loggkatalog og sjekk om det er en katalog kalt ip-172.31.21.58 (eller hva klientmaskinens vertsnavn er).

 
$ ls -l /var/log/

Hvis katalogen eksisterer, sjekk loggfilene i den ved å kjøre.

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

Rsyslog er et loggbehandlingssystem med høy ytelse, designet i en klient/server-arkitektur. Vi håper du er i stand til å installere og konfigurere Rsyslog som en sentral/nettverksloggingsserver og som en klient som vist i denne veiledningen.

Det kan også være lurt å henvise til relevante rsyslog-manualsider for mer hjelp. Gi oss gjerne tilbakemeldinger eller still spørsmål.