Het omgaan met systeemlogs is een cruciaal aspect van zowel beveiligings- als systeembeheer. Het in de gaten houden van logbestanden van meerdere hosts kan nogal onhandelbaar worden als deze hosts over (middel)grote netwerken zijn verspreid, of wanneer ze deel zijn van verschillende soorten netwerken. In deze gevallen kan het op afstand loggen het gehele proces een stuk aangenamer maken.
Het centraal loggen naar een specifieke loghost kan wat van de
administratieve last van het beheren van logbestanden wegnemen.
Het aggregeren, samenvoegen, en roteren van logbestanden kan op
één enkele plaats worden ingesteld, door gebruik te
maken van de eigen gereedschappen van FreeBSD, zoals syslogd(8)
en newsyslog(8). In de volgende voorbeeldconfiguratie zal
host A
, genaamd logserv.example.com
, loginformatie voor het
plaatselijke netwerk verzamelen. Host B
, genaamd
logclient.example.com
, zal
loginformatie aan het serversysteem doorgeven. In echte
configuraties hebben beide hosts degelijke voor- en terugwaartse
DNS of regels in
/etc/hosts
nodig. Anders worden de gegevens
geweigerd door de server.
Logservers zijn machines die zijn geconfigureerd om loginformatie van hosts op afstand te accepteren. In de meeste gevallen is dit om de configuratie te vergemakkelijken, in andere gevallen kan het gewoon een beheersbeslissing zijn. Ongeacht de reden zijn er enkele eisen voordat er verder wordt gegaan.
Een juist geconfigureerde logserver voldoet aan de volgende minimale eisen:
De regels van de firewall staan toe dat UDP wordt doorgegeven op poort 514 van zowel de cliënt als de server;
syslogd is ingesteld om berichten op afstand van cliëntmachines te accepteren;
De syslogd-server en alle cliëntmachines moeten
geldige regels hebben voor zowel voorwaartse als
terugwaartse DNS, of correct zijn
geconfigureerd in /etc/hosts
.
Om de logserver te configureren, moet de cliënt vermeld
zijn in /etc/syslog.conf
, en moet de
logfaciliteit zijn gespecificeerd:
+logclient.example.com *.* /var/log/logclient.log
Meer informatie over de verschillende ondersteunde en beschikbare faciliteiten kan gevonden worden in de handleidingpagina syslog.conf(5).
Eenmaal toegevoegd worden alle
faciliteits
-berichten gelogd naar het eerder
gespecificeerde bestand,
/var/log/logclient.log
.
De servermachine moet ook het volgende in
/etc/rc.conf
hebben staan:
syslogd_enable="YES" syslogd_flags="-a logclient.example.com -v -v"
De eerste optie zet de daemon syslogd
aan
tijdens het opstarten, en de tweede regel staat toe dat gegevens
van de cliënt op deze server worden geaccepteerd. Het
laatste gedeelte, dat -v -v
gebruikt, verhoogt de
verbositeit van gelogde berichten. Dit is extreem handig voor
het optimaal instellen van faciliteiten aangezien beheerders
kunnen zien welk soort berichten onder welke faciliteit worden
gelogd.
Er kunnen meerdere opties -a
worden
gespecificeerd om logging vanuit meerdere cliënten toe te
staan. IP-adressen en hele netblokken mogen
ook worden gespecificeerd, bekijk de hulppagina syslog(3)
voor een volledige lijst van mogelijke opties.
Als laatste dient het logbestand gecreëerd te worden. De gebruikte manier maakt niet uit, maar touch(1) werkt prima in dit soort situaties:
#
touch /var/log/logclient.log
Nu dient het syslogd
-daemon herstart en
geverifieerd worden:
#
service syslogd restart
#
pgrep syslog
Als er een PID wordt teruggegeven, dan is
de server succesvol herstart, en kan er begonnen worden met de
configuratie van de cliënt. Raadpleeg de log
/var/log/messages
voor uitvoer als de
server niet is herstart.
Een logcliënt is een machine die loginformatie naar een logserver verstuurt en daarnaast lokale kopieën bewaart.
Net als logservers moeten logcliënten ook aan enkele minimumeisen voldoen:
syslogd(8) moet zijn ingesteld om berichten van bepaalde soorten naar een logserver te sturen, die ze moet accepteren;
De firewall moet UDP-pakketten doorlaten op poort 514;
Zowel voorwaartse als terugwaartse
DNS moeten geconfigureerd zijn of juiste
regels in /etc/hosts
hebben.
De configuratie van cliënten is wat soepeler dan die
van servers. De cliëntmachine moet de volgende regels in
/etc/rc.conf
hebben:
syslogd_enable="YES" syslogd_flags="-s -v -v"
Net als eerder zullen deze regels de daemon
syslogd
tijdens het opstarten aanzetten, en
de verbositeit van gelogde berichten verhogen. De optie
-s
voorkomt dat logs van deze cliënt
vanuit andere hosts worden geaccepteerd.
Faciliteiten beschrijven het systeemgedeelte waarvoor een
bericht is gegenereerd. ftp en
ipfw bijvoorbeeld zijn beide faciliteiten.
Wanneer er logberichten worden gegenereerd voor deze twee
diensten, zullen ze normaalgesproken deze twee gereedschappen in
elk logbericht opnemen. Faciliteiten worden vergezeld van een
prioriteit of niveau, welke wordt gebruikt om aan te geven hoe
belangrijk een logbericht is. De meest voorkomende zullen
warning
en info
zijn.
Bekijk de handleidingpagina syslog(3) voor een volledige
lijst van beschikbare faciliteiten en prioriteiten.
De logserver moet in /etc/syslog.conf
van de cliënt zijn gedefinieerd. In dit geval wordt het
symbool @
gebruikt om loggegevens naar een
server op afstand te sturen en zou er ongeveer als de volgende
regel uit moeten zien:
*.* @logserv.example.com
Eenmaal toegevoegd moet syslogd
worden
herstart zodat de veranderingen effect hebben:
#
service syslogd restart
Om te testen of logberichten over het netwerk worden
verzonden, wordt logger(1) op de cliënt gebruikt om
een bericht naar syslogd
te sturen:
#
logger "Testbericht van logclient"
Dit bericht dient nu zowel in
/var/log/messages
op de cliënt als
/var/log/logclient.log
op de logserver te
staan.
In bepaalde gevallen kan het nodig zijn om te debuggen als
berichten niet door de logserver worden ontvangen. Er zijn
verschillende redenen waarom dit kan gebeuren; de twee meest
voorkomende zijn echter voorvallen met de netwerkverbinding en
DNS. Om deze gevallen te testen, dient te
worden nagegaan dat beide hosts elkaar kunnen bereiken door
de hostnaam in /etc/rc.conf
te gebruiken.
Als dit juist lijkt te werken, dient de optie
syslogd_flags
in
/etc/rc.conf
te worden veranderd.
In het volgende voorbeeld is
/var/log/logclient.log
leeg, en noemt
/var/log/messages
geen reden waarom het
mislukt. Verander de optie syslogd_flags
zoals in het volgende voorbeeld en herstart om de debuguitvoer
te verhogen:
syslogd_flags="-d -a logclien.example.com -v -v"
#
service syslogd restart
Debuggegevens zoals de volgende zullen meteen na de herstart over het scherm vliegen:
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart syslogd: restarted logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel Logging to FILE /var/log/messages syslogd: kernel boot file is /boot/kernel/kernel cvthname(192.168.1.10) validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; rejected in rule 0 due to name mismatch.
Het is duidelijk dat de berichten worden geweigerd wegens
een niet-overeenkomende naam. Na de configuratie grondig te
hebben herzien, lijkt het of een typefout in de volgende regel
in /etc/rc.conf
een probleem heeft:
syslogd_flags="-d -a logclien.example.com -v -v"
De regel dient logclient
, niet
logclien
te bevatten. Nadat de juiste
wijzigingen zijn gemaakt, wordt er herstart met de verwachte
resultaten:
#
service syslogd restart
logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart syslogd: restarted logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel syslogd: kernel boot file is /boot/kernel/kernel logmsg: pri 166, flags 17, from logserv.example.com, msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2 cvthname(192.168.1.10) validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; accepted in rule 0. logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2 Logging to FILE /var/log/logclient.log Logging to FILE /var/log/messages
Nu worden de berichten juist ontvangen en in het correcte bestand geplaatst.
Zoals bij alle netwerkdiensten, dienen beveiligingseisen in acht te worden genomen voordat deze configuratie wordt geïmplementeerd. Soms kunnen logbestanden gevoelige gegevens bevatten over diensten die aanstaan op de lokale host, gebruikersaccounts, en configuratiegegevens. Netwerkgegevens die van de cliënt naar de server worden verzonden worden niet versleuteld noch met een wachtwoord beveiligd. Als versleuteling nodig is, kan security/stunnel worden gebruikt, wat gegevens over een versleutelde tunnel verstuurt.
Aan lokale beveiliging moet ook gedacht worden.
Logbestanden worden niet versleuteld tijdens gebruik of na
logrotatie. Lokale gebruikers kunnen deze bestanden benaderen
om aanvullende inzichten over de systeemconfiguratie op te doen.
In deze gevallen is het van kritiek belang om de juiste rechten
op deze bestanden in te stellen. Het gereedschap
syslogd(8) ondersteunt het instellen van rechten op nieuw
aangemaakte en geroteerde logbestanden. Het instellen van
logbestanden op modus 600
dient al het
ongewenste spieken door lokale gebruikers te verhinderen.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.