lnav - Se og analyser Apache-logger fra en Linux-terminal


For mindre enn to uker siden kompromitterte Wannacry-ransomware-angrepet tusenvis av datamaskiner, og forårsaket betydelige tap for både store selskaper og enkeltpersoner. Det, sammen med andre utbredte sårbarheter funnet de siste årene (som Shellshock-feilen), fremhever viktigheten av å holde seg på toppen av de oppdragskritiske systemene dine.

Selv om sårbarheter ofte retter seg mot ett spesifikt operativsystem eller programvarekomponent, kan det å undersøke trafikken som går inn og ut av nettverket ditt være en betydelig hjelp for å beskytte eiendelene du er ansvarlig for.

Som jeg er sikker på at du allerede vet, er systemlogger det første stedet vi bør se etter denne informasjonen. For å gjøre denne oppgaven enklere, vil vi i denne artikkelen forklare hvordan du installerer og bruker lnav, en avansert loggfilviser. Med lnav vil du kunne se flere typer logger samtidig, navigere gjennom filen ved hjelp av hurtigtaster og generere et oppsummert histogram over tilganger og feil. Så fortsett å lese!

Installere og starte lnav i Linux

For å installere lnav, bruk pakkehåndteringssystemet til distribusjonen din.

# aptitude install lnav          [Debian and derivatives]
# yum install epel-release lnav  [CentOS 7 and similar]

Når installasjonen er fullført, start lnav etterfulgt av den absolutte banen til katalogen der loggene som skal undersøkes er plassert. Siden dette vanligvis vil være /var/log, la oss gjøre:

# lnav /var/log/httpd

for å inspisere loggene til Apache-nettserveren i en CentOS 7:

La oss kort undersøke utgangen vist i forrige bilde:

  • Øverste høyre hjørne viser filene som for øyeblikket inspiseres (access_log-20170519 og access_log). Når du blar ned eller opp, vil du merke at filnavnene kan endres etter hvert som du går fra den ene til den andre.
  • 40x HTTP-svar (for eksempel Ikke funnet eller Forbudt) vises i fet skrift, mens 20x svar vises i vanlig tekst.
  • IP-adresser vises i fet grønt.

Det ser sikkert bra ut, ikke sant? Men la oss grave litt dypere nå, og vi vil se at lnav gir mye mer enn en vakker farge.

Hvis du er nysgjerrig på hvorfor feillogger ikke vises, finner du svaret senere i denne artikkelen. Så fortsett å lese!

Endre utdata med alternativer og hurtigtaster

Før vi går videre, la oss liste noen få hurtigtaster som lar oss gå gjennom utdataene til lnav og de tilgjengelige visningene lettere:

  • e eller E for å hoppe til neste/forrige feilmelding.
  • w eller W for å hoppe til neste/forrige advarselsmelding.
  • b eller Tilbake for å gå til forrige side.
  • Plass for å gå til neste side.
  • g eller G for å flytte til toppen/bunnen av gjeldende visning.

Når logger roteres, kan gamle filer komprimeres (eller ikke) avhengig av innstillingene spesifisert i konfigurasjonsfilene for logrotate. For å inkludere komprimerte filer i utdataene, start lnav som følger:

# lnav -r /var/log/httpd

Hvis du vil se nærmere på måten lnav fungerer på, kan du starte programmet med -d-alternativet etterfulgt av et filnavn der feilsøkingsinformasjonen vil bli skrevet til, slik:

# lnav /var/log/httpd -d lnav.txt

I dette eksemplet vil feilsøkingsinformasjonen som genereres når lnav starter, bli skrevet til en fil som heter lnav.txt inne i gjeldende arbeidskatalog.

De første par linjene i den filen vises i følgende bilde:

Den uthevede teksten indikerer at lnav lastet standardformatfilen og, mer spesifikt, access_log-formatet for å analysere Apache-tilgangsloggen. I tillegg lar lnav analysere hver utdatalinje slik at utdataene blir lettere å visualisere og forstå.

For å bruke denne funksjonen, start programmet og velg linjen du vil analysere. Den valgte linjen er alltid den øverst i vinduet. Trykk deretter p og du skal se følgende resultat:

For å gå tilbake til normal modus, trykk p igjen.

Nå, hvis du vil se et sammendrag av loggene etter dato og klokkeslett, trykk i. For eksempel indikerer den uthevede teksten at mandag 10. april mellom kl. 22.00 og 23.00 var det 37 HTTP-forespørsler med 14 som resulterte i feil.

Når du har identifisert et potensielt problem basert på histogrammet som vist ovenfor, kan du trykke i for å gå ut av visningen for å undersøke det mer detaljert ved å bruke parseren som forklart tidligere. Eller du kan også bruke de innebygde SQL-funksjonene ved å skrive et semikolon og skrive en standardspørring. Gjør for eksempel:

;.schema

for å vise de tilgjengelige tabellene i databaseskjemaet. Etter å ha identifisert den riktige tabellen (access_log i vårt tilfelle), la oss trykke q og deretter bruke følgende spørring for å returnere all tilgjengelig informasjon om forespørsler som kommer fra 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Merk at vi også kunne ha filtrert resultatene etter log_time. Poenget er, sleng inn litt SQL og himmelen er grensen for hva du kan gjøre med lnav.

Apaches standard loggformater

Mange loggformater lastes som standard med lnav og blir derfor analysert uten vår intervensjon. Du kan se listen i delen Loggformater i den offisielle dokumentasjonen.

Standardformater er spesifisert i ~/.lnav/formats/default/default-formats.json.sample, og andre kan legges til ~/.lnav/formater ved å bruke utvidelsen .json.

Redigering av disse filene krever imidlertid en viss grad av kjennskap til JSON (Javascript Object Notation) og med PCRE-biblioteket (Perl-Compatible Regular Expressions).

Så hvorfor viste ikke lnav Apache-feilloggfilene? Årsaken er at disse loggene ikke samsvarer med noen regulære uttrykk i de eksisterende formatfilene, og derfor behandles som vanlige tekstfiler (som betyr filer uten et gitt loggformat).

Som nevnt tidligere, kan du lage dine egne formater når du i det minste er litt kjent med JSON og PCRE. Dette kan komme godt med, for eksempel hvis du har definert tilpassede Apache-logger.

Selv om vi brukte Apache-tilgangsloggen for å demonstrere hvordan du bruker lnav, husk at det er flere andre typer logger som kan vises og analyseres ved hjelp av dette verktøyet. Hvis verktøyet ikke gjenkjenner en spesifikk logg, kan du opprette flere formater og installere dem ved å følge indikasjonene gitt her.

Har du spørsmål eller kommentarer til denne artikkelen? Som alltid, gi oss gjerne beskjed ved å bruke skjemaet nedenfor. Vi ser frem til å høre fra deg!