Zoeken op website

Systeemlogboeken beheren (configureren, roteren en importeren in database) in RHEL 7 - Deel 5


Om uw RHEL 7 systemen veilig te houden, moet u weten hoe u alle activiteiten die op dergelijke systemen plaatsvinden kunt controleren door logbestanden te onderzoeken. Zo kunt u ongebruikelijke of potentieel kwaadaardige activiteiten detecteren en systeemproblemen oplossen of een andere passende actie ondernemen.

In RHEL 7 is de rsyslogd-daemon verantwoordelijk voor systeemlogboekregistratie en leest de configuratie van /etc/rsyslog.conf (dit bestand specificeert de standaardlocatie voor alle systeemlogboeken) en uit bestanden binnen /etc/rsyslog.d, indien aanwezig.

Rsyslogd-configuratie

Een snelle inspectie van rsyslog.conf zal nuttig zijn om te beginnen. Dit bestand is verdeeld in 3 hoofdsecties: Modules (aangezien rsyslog een modulair ontwerp volgt), Global richtlijnen (gebruikt om globale eigenschappen van de rsyslogd-daemon in te stellen), en >Regels. Zoals u waarschijnlijk wel zult raden, geeft dit laatste gedeelte aan wat er wordt geregistreerd of weergegeven (ook wel de selector genoemd) en waar, en dit zal onze focus zijn in dit artikel.

Een typische regel in rsyslog.conf is als volgt:

In de afbeelding hierboven kunnen we zien dat een selector bestaat uit een of meer paren Faciliteit:Prioriteit gescheiden door puntkomma's, waarbij Faciliteit het type bericht beschrijft (raadpleeg sectie 4.1.1 in RFC 3164 om te zien de volledige lijst met faciliteiten die beschikbaar zijn voor rsyslog) en Prioriteit geeft de ernst ervan aan, wat een van de volgende voor zichzelf sprekende woorden kan zijn:

  1. debuggen
  2. informatie
  3. kennisgeving
  4. waarschuwing
  5. fout
  6. kritiek
  7. alert
  8. opduiken

Hoewel het op zichzelf geen prioriteit is, betekent het zoekwoord geen dat er helemaal geen prioriteit is voor de gegeven faciliteit.

Opmerking: een bepaalde prioriteit geeft aan dat alle berichten met een dergelijke prioriteit en hoger moeten worden geregistreerd. De regel in het bovenstaande voorbeeld instrueert de rsyslogd daemon dus om alle berichten met prioriteitsinformatie of hoger te loggen (ongeacht de faciliteit), behalve de berichten die behoren tot mail, authpriv en cron services (er wordt geen rekening gehouden met berichten afkomstig van deze faciliteiten) naar /var/log/messages.

U kunt ook meerdere faciliteiten groeperen met behulp van het dubbele punt, zodat u op alle faciliteiten dezelfde prioriteit kunt toepassen. Dus de regel:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Kan worden herschreven als

*.info;mail,authpriv,cron.none                /var/log/messages

Met andere woorden, de faciliteiten mail, authpriv en cron zijn gegroepeerd en het trefwoord none wordt toegepast op de drie van hen.

Een aangepast logbestand maken

Om alle daemon-berichten in /var/log/tecmint.log te loggen, moeten we de volgende regel toevoegen in rsyslog.conf of in een apart bestand (gemakkelijker te beheren ) in /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Laten we de daemon opnieuw starten (merk op dat de servicenaam niet eindigt met een d):

systemctl restart rsyslog

En controleer de inhoud van ons aangepaste logbestand voor en na het herstarten van twee willekeurige daemons:

Als zelfstudie zou ik u aanraden om met de faciliteiten en prioriteiten te spelen en ofwel extra berichten in bestaande logbestanden te loggen, ofwel nieuwe te maken, zoals in het vorige voorbeeld.

Logboeken roteren met Logrotate

Om te voorkomen dat logbestanden eindeloos blijven groeien, wordt het hulpprogramma logrotate gebruikt om logbestanden te roteren, comprimeren, verwijderen en alternatief te mailen, waardoor het beheer van systemen die grote aantallen logbestanden genereren wordt vergemakkelijkt.

Voorgesteld leesvoer: Logrotatie instellen en beheren met behulp van Logrotate in Linux

Logrotate wordt dagelijks uitgevoerd als een cron job (/etc/cron.daily/logrotate) en leest de configuratie van /etc/logrotate .conf en uit bestanden in /etc/logrotate.d, indien aanwezig.

Net als in het geval van rsyslog, zelfs als u instellingen voor specifieke services in het hoofdbestand kunt opnemen, kunt u door voor elk daarvan afzonderlijke configuratiebestanden te maken uw instellingen beter organiseren.

Laten we eens kijken naar een typische logrotate.conf:

In het bovenstaande voorbeeld zal logrotate de volgende acties uitvoeren voor /var/loh/wtmp: probeer slechts één keer per maand te rouleren, maar alleen als het bestand minimaal 1 MB groot en maak vervolgens een gloednieuw logbestand met de machtigingen ingesteld op 0664 en waarbij het eigendom wordt gegeven aan gebruiker root en groep utmp. Bewaar vervolgens slechts één gearchiveerd logboek, zoals gespecificeerd door de rotatierichtlijn:

Laten we nu een ander voorbeeld bekijken, zoals gevonden in /etc/logrotate.d/httpd:

Je kunt meer lezen over de instellingen voor logrotate in de manpagina's (man logrotate en man logrotate.conf). Voor uw leesgemak worden beide bestanden samen met dit artikel in PDF-formaat verstrekt.

Als systeemingenieur is het grotendeels aan jou om te beslissen hoe lang logs worden opgeslagen en in welk formaat, afhankelijk van of je /var op een aparte partitie /< hebt staan logisch volume. Anders wilt u echt overwegen om oude logbestanden te verwijderen om opslagruimte te besparen. Aan de andere kant kan het zijn dat u genoodzaakt bent meerdere logboeken bij te houden voor toekomstige beveiligingsaudits, in overeenstemming met het interne beleid van uw bedrijf of klant.

Logboeken opslaan in een database

Natuurlijk kan het onderzoeken van logs (zelfs met behulp van tools zoals grep en reguliere expressies) een nogal vervelende taak worden. Om die reden stelt rsyslog ons in staat ze naar een database te exporteren (OTB ondersteunde RDBMS omvatten MySQL, MariaDB, PostgreSQL en Oracle.

In dit gedeelte van de zelfstudie wordt ervan uitgegaan dat u de MariaDB-server en -client al hebt geïnstalleerd in dezelfde RHEL 7-box waar de logboeken worden beheerd:

yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
systemctl enable mariadb && systemctl start mariadb

Gebruik vervolgens het hulpprogramma mysql_secure_installation om het wachtwoord voor de rootgebruiker en andere beveiligingsoverwegingen in te stellen:

Opmerking: als u de rootgebruiker MariaDB niet wilt gebruiken om logberichten in de database in te voegen, kunt u een ander gebruikersaccount configureren om dat te doen. Uitleggen hoe u dat moet doen valt buiten het bestek van deze tutorial, maar wordt in detail uitgelegd in de MariaDB-kennisbank. In deze tutorial gebruiken we voor de eenvoud het root-account.

Download vervolgens het script createDB.sql van GitHub en importeer het in uw databaseserver:

mysql -u root -p < createDB.sql

Voeg ten slotte de volgende regels toe aan /etc/rsyslog.conf:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

Start rsyslog en de databaseserver opnieuw:

systemctl restart rsyslog 
systemctl restart mariadb

De logboeken opvragen met behulp van SQL-syntaxis

Voer nu enkele taken uit die de logbestanden wijzigen (zoals bijvoorbeeld het stoppen en starten van services), log vervolgens in op uw DB-server en gebruik standaard SQL-opdrachten om de logbestanden weer te geven en te doorzoeken:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Samenvatting

In dit artikel hebben we uitgelegd hoe u systeemlogboekregistratie instelt, hoe u logboeken roteert en hoe u de berichten naar een database kunt omleiden, zodat u ze gemakkelijker kunt zoeken. We hopen dat deze vaardigheden nuttig zullen zijn bij uw voorbereiding op het RHCE-examen en ook bij uw dagelijkse verantwoordelijkheden.

Zoals altijd is uw feedback meer dan welkom. Gebruik gerust onderstaand formulier om ons te bereiken.