Hvordan lage en sentralisert loggserver med Rsyslog i CentOS/RHEL 7


For at systemadministrator skal kunne identifisere eller feilsøke et problem på et CentOS 7- eller RHEL 7-serversystem, må den kjenne til og se hendelsene som skjedde på systemet i en bestemt tidsperiode fra loggfiler som er lagret i systemet i katalogen /var/log.

Syslog-serveren på en Linux-maskin kan fungere som et sentralt overvåkingspunkt over et nettverk der alle servere, nettverksenheter, rutere, svitsjer og de fleste av deres interne tjenester som genererer logger, enten det er relatert til spesifikt internt problem eller bare informative meldinger kan sende loggene sine. .

På et CentOS/RHEL 7-system er Rsyslog demon den forhåndsinstallerte hovedloggserveren, etterfulgt av Systemd Journal Daemon (journalført sterk>).

Rsyslog-serveren er bygget som en klient-/serverarkitekturtjeneste og kan oppnå begge rollene samtidig. Den kan kjøres som en server og samle alle logger som overføres av andre enheter i nettverket, eller den kan kjøres som en klient ved å sende alle interne systemhendelser som er logget til en ekstern endepunkt-syslog-server.

Når rsyslog er konfigurert som en klient, kan loggene lagres lokalt i filer på det lokale filsystemet eller kan sendes eksternt i stedet for å skrive dem i filer som er lagret på maskinen eller skrive hendelsesloggfiler lokalt og sende dem til en ekstern syslog-server på samme tid.

Syslog-serveren driver enhver loggmelding ved å bruke følgende skjema:

type (facility).priority (severity)  destination(where to send the log)

A. anlegget eller typedata er representert av de interne systemprosessene som genererer meldingene. I Linux er interne prosesser (fasiliteter) som genererer logger standardisert som følger:

  • autentisering = meldinger generert av autentiseringsprosesser (pålogging).
  • cron= meldinger generert av planlagte prosesser (crontab).
  • demon = meldinger generert av demoner (interne tjenester).
  • kjernen = meldinger generert av selve Linux-kjernen.
  • e-post = meldinger generert av en e-postserver.
  • syslog = meldinger generert av selve rsyslog-daemonen.
  • lpr = meldinger generert av lokale skrivere eller en utskriftsserver.
  • local0 – local7 = egendefinerte meldinger definert av en administrator (local7 er vanligvis tilordnet for Cisco eller Windows).

B. prioritetsnivåene (alvorlighetsgrad) er også standardiserte. Hver prioritet er tildelt en standardforkortelse og et nummer som beskrevet nedenfor. Den 7. prioritet er det høyere nivået av alle.

  • emerg = Emergency – 0
  • varsel = Varsler – 1
  • feil = Feil – 3
  • advarsel = Advarsler – 4
  • varsel = Varsling – 5
  • info = Informasjon – 6
  • debug = Feilsøking – 7

Spesielle Rsyslog-nøkkelord:

  • *=alle fasiliteter eller prioriteringer
  • ingen=fasilitetene har ingen gitte prioriteringer, f.eks.: mail.none

C. Den tredje delen for syslog-skjemaet er representert av destinasjon direktivet. Rsyslog daemon kan sende loggmeldinger som skal skrives i en fil på det lokale filsystemet (for det meste i en fil i katalogen /var/log/) eller sendes til en annen lokal prosess eller sendes til en lokal brukerkonsoll (til stdout), eller send meldingen til en ekstern syslog-server via TCP/UDP-protokollen, eller til og med forkast meldingen til /dev/null.

For å konfigurere CentOS/RHEL 7 som en sentral loggserver, må vi først sjekke og sikre at /var partisjonen der alle loggfilene er registrert er stor nok ( et par GB minimum) for å kunne lagre alle loggfilene som vil bli sendt av andre enheter. Det er en god beslutning å bruke en separat stasjon (LVM, RAID) for å montere /var/log/-katalogen.

Krav

  1. CentOS 7.3 installasjonsprosedyre
  2. RHEL 7.3 Installasjonsprosedyre

Hvordan konfigurere Rsyslog i CentOS/RHEL 7 Server

1. Som standard installeres Rsyslog-tjenesten automatisk og skal kjøres i CentOS/RHEL 7. For å sjekke om daemonen er startet i systemet, utfør følgende kommando med root-privilegier.

systemctl status rsyslog.service

Hvis tjenesten ikke kjører som standard, kjør kommandoen nedenfor for å starte rsyslog daemon.

systemctl start rsyslog.service

2. Hvis rsyslog-pakken ikke er installert på systemet du har tenkt å bruke som en sentralisert loggingsserver, utfør følgende kommando for å installere rsyslog-pakken.

yum install rsyslog

3. Det første trinnet vi må gjøre på systemet for å konfigurere rsyslog daemon som en sentralisert loggserver, slik at den kan motta loggmeldinger for eksterne klienter, er å åpne og redigere ved å bruke din favoritttekstredigerer, hovedkonfigurasjonsfilen fra /etc/rsyslog.conf, som presentert i utdraget nedenfor.

vi /etc/rsyslog.conf

I hovedkonfigurasjonsfilen for rsyslog, søk og fjern kommentarer på følgende linjer (fjern hashtaggen # på linjen som begynner) for å gi UDP-transportmottak til Rsyslog-serveren via 514 havn. UDP er standardprotokollen som brukes for loggoverføring av Rsyslog.

$ModLoad imudp 
$UDPServerRun 514

4. UDP-protokollen har ikke TCP-overhead, noe som gjør det raskere for overføring av data enn TCP-protokollen. På den annen side sikrer ikke UDP-protokollen påliteligheten til overførte data.

Men hvis du trenger å bruke TCP-protokollen for loggmottak, må du søke etter og fjerne kommentarer på følgende linjer fra filen /etc/rsyslog.conf for å konfigurere Rsyslog daemon til å binde og lytte til en TCP-socket på 514 havn. TCP- og UDP-lyttekontakter for mottak kan konfigureres på en Rsyslog-server samtidig.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. På neste trinn, ikke lukk filen ennå, lag en ny mal som skal brukes til å motta eksterne meldinger. Denne malen vil instruere den lokale Rsyslog-serveren hvor de mottatte meldingene som sendes av syslog-nettverksklienter skal lagres. Malen må legges til før begynnelsen av GLOBALE DIREKTIVER-blokken som illustrert i utdraget nedenfor.

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

Direktivet over $template RemoteLogs instruerer Rsyslog-demonen å samle inn og skrive alle mottatte loggmeldinger til distinkte filer, basert på klientmaskinnavnet og ekstern klientfunksjon (applikasjon) som genererte meldingene basert på definerte egenskaper presenteres i malkonfigurasjonen: %HOSTNAME% og %PROGRAMNAME%.

Alle disse loggfilene vil bli skrevet til det lokale filsystemet til en dedikert fil oppkalt etter klientmaskinens vertsnavn og lagret i /var/log/-katalogen.

Omdirigeringsregelen & ~ instruerer den lokale Rsyslog-serveren om å slutte å behandle den mottatte loggmeldingen videre og forkaste meldingene (ikke skrive dem til interne loggfiler).

RemoteLogs-navnet er et vilkårlig navn gitt til dette maldirektivet. Du kan bruke hvilket navn du finner best egnet for malen din.

For å skrive alle mottatte meldinger fra klienter i en enkelt loggfil oppkalt etter IP-adressen til den eksterne klienten, uten å filtrere anlegget som genererte meldingen, bruk utdraget nedenfor.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

Et annet eksempel på en mal der alle meldinger med auth facility-flagg vil bli logget til en mal kalt «TmplAuth».

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

Nedenfor er et utdrag fra en maldefinisjon fra Rsyslog 7-serveren:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

Malutdraget ovenfor kan også skrives som:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

For å skrive komplekse Rsyslog-maler, les håndboken for Rsyslog-konfigurasjonsfilen ved å gi kommandoen man rsyslog.conf eller se Rsyslog-dokumentasjonen på nett.

6. Etter at du har redigert Rsyslog-konfigurasjonsfilen med dine egne innstillinger som forklart ovenfor, start Rsyslog-daemonen på nytt for å bruke endringer ved å utstede følgende kommando:

service rsyslog restart

7. Nå bør Rsyslog-serveren være konfigurert til å fungere som en sentralisert loggserver og registrere meldinger fra syslog-klienter. For å bekrefte Rsyslog-nettverkskontakter, kjør netstat-kommandoen med root-privilegier og bruk grep til å filtrere rsyslog-strengen.

netstat -tulpn | grep rsyslog 

8. Hvis du har SELinux aktivert i CentOS/RHEL 7, utfør følgende kommando for å konfigurere SELinux til å tillate rsyslog-trafikk avhengig av nettverkskontakttype.

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

9. Hvis brannmuren er aktivert og aktiv, kjør kommandoen nedenfor for å legge til de nødvendige reglene for å åpne rsyslog-porter i brannmuren.

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd –reload

Det er alt! Rsyslog er nå konfigurert i servermodus og kan sentralisere logger fra eksterne klienter. I neste artikkel vil vi se hvordan du konfigurerer Rsyslog-klienten på CentOS/RHEL 7-serveren.

Ved å bruke Rsyslog-serveren som et sentralt overvåkingspunkt for eksterne loggmeldinger kan du inspisere loggfiler og observere klientens helsestatus eller feilsøke klientens problemer lettere når systemer krasjer eller er under noen form for angrep.