Zoeken op website

Een gecentraliseerde logserver maken met Rsyslog in CentOS/RHEL 7


Om ervoor te zorgen dat de systeembeheerder een probleem op een CentOS 7- of RHEL 7-serversysteem kan identificeren of oplossen, moet hij de gebeurtenissen kennen en bekijken die op het systeem in een specifiek systeem hebben plaatsgevonden. tijdsperiode van logbestanden die zijn opgeslagen in het systeem in de map /var/log.

De syslog-server op een Linux-machine kan fungeren als centraal monitoringpunt via een netwerk waar alle servers, netwerkapparaten, routers, switches en de meeste van hun interne services die logbestanden genereren, ongeacht of deze verband houden met een specifiek intern probleem of alleen informatieve berichten, hun logbestanden kunnen verzenden .

Op een CentOS/RHEL 7 systeem is de Rsyslog daemon de hoofdlogserver die vooraf is geïnstalleerd, gevolgd door Systemd Journal Daemon (journald sterk>).

Rsyslog-server is gebouwd als een client/server-architectuurservice en kan beide rollen tegelijkertijd vervullen. Het kan als server draaien en alle logbestanden verzamelen die door andere apparaten in het netwerk worden verzonden, of het kan als client draaien door alle interne systeemgebeurtenissen naar een syslog-server op een extern eindpunt te sturen.

Wanneer rsyslog als client is geconfigureerd, kunnen de logboeken lokaal worden opgeslagen in bestanden op het lokale bestandssysteem of op afstand worden verzonden in plaats van ze te schrijven in bestanden die op de machine zijn opgeslagen, of lokaal logboekbestanden voor gebeurtenissen te schrijven en deze naar een externe syslog-server te sturen op dezelfde tijd.

De Syslog-server verwerkt elk logbericht met behulp van het volgende schema:

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

A. De faciliteit of typegegevens worden vertegenwoordigd door de interne systeemprocessen die de berichten genereren. In Linux zijn interne processen (faciliteiten) die logboeken genereren als volgt gestandaardiseerd:

  • auth = berichten gegenereerd door authenticatieprocessen (inloggen).
  • cron= berichten gegenereerd door geplande processen (crontab).
  • daemon = berichten gegenereerd door daemons (interne services).
  • kernel = berichten gegenereerd door de Linux Kernel zelf.
  • mail = berichten gegenereerd door een mailserver.
  • syslog = berichten gegenereerd door de rsyslog-daemon zelf.
  • lpr = berichten gegenereerd door lokale printers of een printserver.
  • local0 – local7 = aangepaste berichten gedefinieerd door een beheerder (local7 wordt meestal toegewezen aan Cisco of Windows).

B. De niveaus van prioriteit (ernst) zijn ook gestandaardiseerd. Elke prioriteit wordt toegewezen met een standaardafkorting en een nummer, zoals hieronder beschreven. De 7e prioriteit is het hogere niveau van allemaal.

  • emerg = Noodgeval – 0
  • waarschuwing = Waarschuwingen – 1
  • err = Fouten – 3
  • waarschuwen = Waarschuwingen – 4
  • kennisgeving = Kennisgeving – 5
  • info = Informatie – 6
  • debug = Foutopsporing – 7

Speciale Rsyslog-trefwoorden:

  • *=alle faciliteiten of prioriteiten
  • none=de faciliteiten hebben geen bepaalde prioriteiten. Bijv.: mail.none

C. Het derde deel van het syslog-schema wordt weergegeven door de destination richtlijn. De Rsyslog-daemon kan logberichten verzenden om te worden geschreven in een bestand op het lokale bestandssysteem (meestal in een bestand in de map /var/log/) of om te worden doorgesluisd naar een ander lokaal proces of om te worden verzonden naar een lokale gebruikersconsole (naar stdout), of stuur het bericht naar een externe syslog-server via het TCP/UDP-protocol, of verwijder het bericht zelfs naar /dev/null.

Om CentOS/RHEL 7 te configureren als centrale logserver, moeten we eerst controleren of de /var partitie waar alle logbestanden worden vastgelegd groot genoeg is ( minimaal een paar GB) om alle logbestanden te kunnen opslaan die door andere apparaten worden verzonden. Het is een goede beslissing om een aparte schijf (LVM, RAID) te gebruiken om de map /var/log/ te koppelen.

Vereisten

  1. CentOS 7.3 Installatieprocedure
  2. RHEL 7.3 Installatieprocedure

Rsyslog configureren in CentOS/RHEL 7 Server

1. De Rsyslog-service wordt standaard automatisch geïnstalleerd en zou moeten worden uitgevoerd in CentOS/RHEL 7. Om te controleren of de daemon in het systeem is gestart, geeft u het volgende commando uit met rootrechten.

systemctl status rsyslog.service

Als de service niet standaard actief is, voer dan de onderstaande opdracht uit om de rsyslog-daemon te starten.

systemctl start rsyslog.service

2. Als het rsyslog-pakket niet is geïnstalleerd op het systeem dat u als gecentraliseerde logserver wilt gebruiken, geeft u de volgende opdracht op om het rsyslog-pakket te installeren.

yum install rsyslog

3. De eerste stap die we op het systeem moeten doen om de rsyslog-daemon te configureren als een gecentraliseerde logserver, zodat deze logberichten voor externe clients kan ontvangen, is het openen en bewerken met uw favoriete teksteditor, het hoofdconfiguratiebestand van /etc/rsyslog.conf, zoals weergegeven in het onderstaande fragment.

vi /etc/rsyslog.conf

Zoek in het hoofdconfiguratiebestand van rsyslog de volgende regels en verwijder de commentaar (verwijder het hashtag # teken aan het begin van de regel) om UDP-transportontvangst naar de Rsyslog-server te bieden via 514 haven. UDP is het standaardprotocol dat wordt gebruikt voor logtransmissie door Rsyslog.

$ModLoad imudp 
$UDPServerRun 514

4. Het UDP-protocol heeft geen TCP-overhead, waardoor het sneller gegevens verzendt dan het TCP-protocol. Aan de andere kant garandeert het UDP-protocol niet de betrouwbaarheid van verzonden gegevens.

Als u echter het TCP-protocol moet gebruiken voor log-ontvangst, moet u de volgende regels uit het bestand /etc/rsyslog.conf doorzoeken en commentaar verwijderen om de Rsyslog-daemon te configureren om een TCP-socket op 514 te binden en te beluisteren haven. TCP- en UDP-luistersockets voor ontvangst kunnen tegelijkertijd op een Rsyslog-server worden geconfigureerd.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. Sluit bij de volgende stap het bestand nog niet, maar maak een nieuwe sjabloon die wordt gebruikt voor het ontvangen van berichten op afstand. Deze sjabloon instrueert de lokale Rsyslog-server waar de ontvangen berichten die door syslog-netwerkclients zijn verzonden, moeten worden opgeslagen. De sjabloon moet vóór het begin van het GLOBAL RICHTLIJNEN-blok worden toegevoegd, zoals geïllustreerd in het onderstaande fragment.

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

De bovenstaande $template RemoteLogs-richtlijn instrueert de Rsyslog-daemon om alle ontvangen logberichten te verzamelen en naar afzonderlijke bestanden te schrijven, op basis van de naam van de clientmachine en de externe clientfaciliteit (applicatie) die de berichten heeft gegenereerd op basis van de gedefinieerde eigenschappen aanwezig in de sjabloonconfiguratie: %HOSTNAME% en %PROGRAMNAME%.

Al deze logbestanden worden naar het lokale bestandssysteem geschreven, naar een speciaal bestand met de naam van de hostnaam van de clientmachine en opgeslagen in de map /var/log/.

De omleidingsregel & ~ geeft de lokale Rsyslog-server de opdracht om te stoppen met het verder verwerken van het ontvangen logbericht en de berichten te verwijderen (niet naar interne logbestanden te schrijven).

De naam RemoteLogs is een willekeurige naam die aan deze sjabloonrichtlijn wordt gegeven. U kunt elke naam gebruiken die het beste bij uw sjabloon past.

Om alle ontvangen berichten van clients in één logbestand te schrijven, genoemd naar het IP-adres van de externe client, zonder de faciliteit te filteren die het bericht heeft gegenereerd, gebruikt u het onderstaande fragment.

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

Nog een voorbeeld van een sjabloon waarbij alle berichten met een auth-faciliteitsvlag worden vastgelegd in een sjabloon met de naam “TmplAuth“.

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

Hieronder vindt u een uittreksel van een sjabloondefinitie van de Rsyslog 7-server:

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

Het bovenstaande sjabloonfragment kan ook worden geschreven als:

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

Om complexe Rsyslog-sjablonen te schrijven, leest u de handleiding van het Rsyslog-configuratiebestand door de opdracht man rsyslog.conf uit te voeren of raadpleegt u de online documentatie van Rsyslog.

6. Nadat u het Rsyslog-configuratiebestand met uw eigen instellingen heeft bewerkt, zoals hierboven uitgelegd, start u de Rsyslog-daemon opnieuw op om de wijzigingen toe te passen door de volgende opdracht te geven:

service rsyslog restart

7. De Rsyslog-server zou nu geconfigureerd moeten zijn om als gecentraliseerde logserver te fungeren en berichten van syslog-clients op te nemen. Om Rsyslog-netwerksockets te verifiëren, voert u de opdracht netstat uit met rootrechten en gebruikt u grep om de rsyslog-tekenreeks te filteren.

netstat -tulpn | grep rsyslog 

8. Als je SELinux hebt ingeschakeld in CentOS/RHEL 7, voer dan het volgende commando uit om SELinux te configureren om rsyslog-verkeer toe te staan, afhankelijk van het type netwerksocket.

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

9. Als de firewall is ingeschakeld en actief, voer dan de onderstaande opdracht uit om de benodigde regels toe te voegen voor het openen van rsyslog-poorten in Firewalld.

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

Dat is alles! Rsyslog is nu geconfigureerd in servermodus en kan logboeken van externe clients centraliseren. In het volgende artikel zullen we zien hoe u de Rsyslog-client op de CentOS/RHEL 7-server kunt configureren.

Door de Rsyslog-server te gebruiken als centraal controlepunt voor logberichten op afstand, kunt u logbestanden inspecteren en de gezondheidsstatus van de klant observeren of problemen van de klant gemakkelijker opsporen wanneer systemen crashen of op de een of andere manier worden aangevallen.