|
1.
Syslogd
Syslogd is de meest gebruikte logger voor Linux en Unix algemeen. Het heeft
geen logrotatie mogelijkheid. Deze mogelijkheid kan je toch implementeren door
middel van /usr/sbin/logrotate in een cronjob te steken en
/etc/logrotate.conf goed te configureren. De hoeveelheid van
logrotaties zijn afhankelijk van het gebruik van je systeem.
Hier is een voorbeeld van hoe je syslog kan configureren:
Codevoorbeeld 1.1: /etc/syslog.conf |
*.=debug /var/log/debug
*.err /var/log/syslog
#Gebruikers van wie je wil zien wanneer ze ingelogd zijn
*.=alert root,je gebruikers hier
*.=emerg root,je gebruikers hier
mail.info,mail.notice /var/log/maillog
kern.* /var/log/kern.log
daemon.info;daemon.notice /var/log/daemon.log
cron.* /var/log/cron.log
mail.* /var/log/mail.log
user.* /var/log/user.log
uucp.* /var/log/uucp.log
*.*;auth,authpriv.none /var/log/syslog
#Plaats de logbestanden in 2 verschillende locaties
authpriv.*;auth.* /admin/auth.log
authpriv.*;auth.* /var/log/secure
#Schrijf alles tevens neer in een terminal
*.* /dev/tty12
#Stel een andere server in als logserver
*.* @logserver
|
De aanvaller zal waarschijnlijk proberen om zijn voetsporen te wissen door
logbestanden aan te passen of te verwijderen. Je kan het hem moeilijk maken
door de logs naar een of meer logservers op verschillende machines te sturen.
Meer informatie over syslogd kan je vinden in de manpage (man
syslog).
1.
Metalog
Metalog door Frank Dennis
heeft niet de mogelijkheid om naar een andere server te loggen, maar heeft wel
voordelen op gebied van performantie en logflexibiliteit.
Het kan per proces loggen of per faciliteit (zoals syslogd werkt) en komt met
een eigen expressietaal en uitvoering van commandos. Zeer goed om akties te
ondernemen indien nodig.
Codevoorbeeld 1.1: /etc/metalog.conf |
maxsize = 1000000
maxtime = 86400
maxfiles = 7
minimum = 7
Kernel messages :
facility = "kern"
logdir = "/var/log/kernel"
Auth messages :
facility = "auth"
logdir = "/var/log/auth"
Emergencies :
facility = "emerg"
command = "/usr/local/sbin/pwdfail.sh"
Crond :
program = "crond"
logdir = "/var/log/crond"
Password failures :
regex = "(password|login|authentication)\s+(fail|invalid)"
regex = "(failed|invalid)\s+(password|login|authentication)"
regex = "ILLEGAL ROOT LOGIN"
logdir = "/var/log/pwdfail"
command = "/usr/local/sbin/pwdfail.sh"
SSH Server :
program = "sshd"
logdir = "/var/log/sshd"
Mail :
facility = "mail"
logdir = "/var/log/mail"
Snort:
program = "snort"
command = "/usr/local/sbin/pwdfail.sh"
Everything important :
facility = "*"
logdir = "/var/log/everything"
Everything very important :
facility = "*"
logdir = "/var/log/critical"
|
Dit is een default configuratie met enkele aanpassingen, zoals een minimum
logniveau van 7, wat wil zeggen dat alles gelogged zal worden.
pwdfail.sh voor postfix:
Codevoorbeeld 1.1: pwdfail.sh voor Postfix |
#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root
|
pwdfail.sh voor netqmail:
Codevoorbeeld 1.1: pwdfail.sh voor netqmail |
#!/bin/sh
echo "To: root
Subject:Failure (Warning: $2)
$3
" | /var/qmail/bin/qmail-inject -f root
|
Meer informatie kan je vinden op de metalog website.
1.
Syslog-ng
Syslog-ng levert sommige features van syslog en metalog met enkele kleine
verschillen. Het kan berichten filteren op niveau en inhoud (net zoals
metalog), ondersteunt logservers zoals syslog, kan syslogd logs aan (zelfs deze
van Solaris), kan naar een TTY schrijven en programmas uitvoeren en zelf als
logserver fungeren. Dit is dus eigenlijk het beste van beide andere loggers met
extra mogelijkheden.
Een klassiek configuratiebestand mits wat kleine aanpassingen.
Codevoorbeeld 1.1: /etc/syslog-ng/syslog-ng.conf |
options { long_hostnames(off); sync(0); };
#bron van waar de log ingelezen dient te worden
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };
#doelen definieren
destination authlog { file("/var/log/auth.log"); };
destination syslog { file("/var/log/syslog"); };
destination cron { file("/var/log/cron.log"); };
destination daemon { file("/var/log/daemon.log"); };
destination kern { file("/var/log/kern.log"); };
destination lpr { file("/var/log/lpr.log"); };
destination user { file("/var/log/user.log"); };
destination mail { file("/var/log/mail.log"); };
destination mailinfo { file("/var/log/mail.info"); };
destination mailwarn { file("/var/log/mail.warn"); };
destination mailerr { file("/var/log/mail.err"); };
destination newscrit { file("/var/log/news/news.crit"); };
destination newserr { file("/var/log/news/news.err"); };
destination newsnotice { file("/var/log/news/news.notice"); };
destination debug { file("/var/log/debug"); };
destination messages { file("/var/log/messages"); };
destination console { usertty("root"); };
destination console_all { file("/dev/tty12"); };
destination xconsole { pipe("/dev/xconsole"); };
#filters aanmaken
filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
filter f_syslog { not facility(authpriv, mail); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_user { facility(user); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info..warn)
and not facility(auth, authpriv, mail, news); };
filter f_emergency { level(emerg); };
filter f_info { level(info); };
filter f_notice { level(notice); };
filter f_warn { level(warn); };
filter f_crit { level(crit); };
filter f_err { level(err); };
filter f_failed { match("failed"); };
filter f_denied { match("denied"); };
#filter en doel linken
log { source(src); filter(f_authpriv); destination(authlog); };
log { source(src); filter(f_syslog); destination(syslog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_daemon); destination(daemon); };
log { source(kernsrc); filter(f_kern); destination(kern); };
log { source(src); filter(f_lpr); destination(lpr); };
log { source(src); filter(f_mail); destination(mail); };
log { source(src); filter(f_user); destination(user); };
log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
log { source(src); filter(f_debug); destination(debug); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); filter(f_emergency); destination(console); };
#default log
log { source(src); destination(console_all); };
|
Het is gemakkelijk om te configureren maar tevens zeer gemakkelijk om fouten te
maken aangezien het configuratiebestand groot is. De auteur heeft belooft om
nog extra mogelijkheden zoals encryptie, identiteits verificatie, compressie
en MAC (Mandatory Access Control) in te bouwen. Met deze opties zal dit de
perfecte logger worden, aangezien de aanvaller de logs dan niet meer kan
bekijken en aanpassen.
En syslog-ng heeft nog een andere mogelijkheid: het moet niet als root werken!
1.
Logs analyseren met logcheck
Natuurlijk, zijn logs maken en houden maar de helft; Een aplicatie als logcheck kan
log-bestanden veel makkelijker controleren. logcheck is een script, en kun je
uitvoeren met het commando logtail, die je best gebruikt via je cron. Na de
controle op verdachte activiteit; mailt hij alles naar je root's mailbox.
Logcheck en logtail maken deel uit van het app-admin/logsentry pakket.
Logcheck gebruikt vier bestanden om te belangrijke logs te controleren. Deze
bestanden zijn logcheck.hacking, die bevat gekende hack-berichten,
logcheck.violations bevat patronen die veiligheid-tekortkomingen
aantonen, logcheck.violations.ignore bevat sleutelwoorden die
lijken als een aanval te blokkeren, en logcheck.ignore bevat
regels over geblokkeerde toegang.
Waarschuwing:
Laat logcheck.violations.ignore leeg, logcheck gebruikt grep
om logs te parsen, sommige versies van welke lege bestanden genomen zullen worden
als wildcards, Alle inbraken zouden dan worden genegeerd.
|
|