Gentoo Logo

1.  Johdanto

Lokien käyttöä pitäisi lisätä sellaisten varoitusten ja virheiden osalta, mitkä paljastaisivat hyökkäyksiä tai onnistuneita tietoturvamurtoja. Hyökkääjät usein skannaavat kohteen ennen hyökkäystä.

Lokien pitää tätä varten olla myös helposti luettavissa ja hallittavissa. Gentoon Linuxissa on saatavilla kolme eri lokijärjestelmää.

1.  Syslogd

Syslogd on yleisin Linuxissa ja Unixeissa käytetty loki. Se osaa joitain lokien kierrätystoimintoja, mutta /usr/sbin/logrotaten käyttö cronin kanssa (logrotaten asetukset tiedostossa /etc/logrotate.conf) voivat monine ominaisuuksineen olla järkevämpi vaihtoehto. Lokien kierrätyksen tiheys kannattaa päättää järjestelmän taakan mukaan.

Alla on esitetty oletusarvoinen syslog.conf muutamin lisäsäädöin. Cronin ja tty:n rivit on otettu käyttöön ja lisätty etäloki. Lisäturvallisuutta saisi lisäämällä lokin kahteen paikkaan.

Koodilistaus 1.1: /etc/syslog.conf

#  /etc/syslog.conf      Configuration file for syslogd.
#
#                       For more information see syslog.conf(5)
#                       manpage.
#                       This is from Debian, we are using it for now
#                       Daniel Robbins, 5/15/99

#
# First some standard logfiles.  Log by facility.
#

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
cron.*                         /var/log/cron.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          /var/log/mail.log
user.*                          -/var/log/user.log
uucp.*                          -/var/log/uucp.log
local6.debug                    /var/log/imapd.log

#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Logging for INN news system
#
news.crit                       /var/log/news/news.crit
news.err                        /var/log/news/news.err
news.notice                     -/var/log/news/news.notice

#
# Some `catch-all' logfiles.
#
*.=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies and alerts are sent to everybody logged in.
#
*.emerg                         *
*.=alert                        *

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
daemon,mail.*;\
       news.=crit;news.=err;news.=notice;\
       *.=debug;*.=info;\
       *.=notice;*.=warn       /dev/tty8

#Setup a remote logging server
*.*                        @logserver

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
#daemon.*,mail.*;\
#       news.crit;news.err;news.notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       |/dev/xconsole

local2.*                --/var/log/ppp.log

Hyökkääjät yrittävät yleensä poistaa jälkensä muokkaamalla tai poistamalla lokeja. Jos lokeja lähetetään yhteen tai useampaan etäpalvelimeen, niiden sotkeminen on hankalampaa. Lisätietoja syslogd:stä on on ohjesivulla man syslog.

1.  Metalog

Frank Dennisin Metalog ei pysty kirjaamaan etäpalvelimelle, mutta sisältää joitain suorituskyky- ja kirjausominaisuuksia. Se voi kirjata ohjelman nimen, tärkeyden tai lokitavan (kuten syslogd) mukaan, ja voi käyttää säännöllisiä ilmauksia täsmäämiseen. Täsmäysten perusteella voi valita käytettäviä skriptejä silloin kun tarvitaan.

Oletusasetukset ovat enimmäkseen riittävät. Jos lokit haluaa sähköpostitse virheen sattuessa, voi käyttää seuraavanlaisia skriptejä.

Postfix:

Koodilistaus 1.1: /usr/local/sbin/mail_pwd_failures.sh for postfix

#! /bin/sh
echo "$3" | mail -s "Warning (program : $2)" root

Netqmail:

Koodilistaus 1.1: /usr/local/sbin/mail_pwd_failures.sh for netqmail

#!/bin/sh
echo "To: root
Subject:Failure (Warning: $2)
$3
" | /var/qmail/bin/qmail-inject -f root

Skripti pitää asettaa suoritettavaksi komennolla /bin/chmod +x /usr/local/sbin/mail_pwd_failures.sh

Asetustiedostossa /etc/metalog/metalog.conf pitää myös ottaa käyttöön Password failures -kohdan asetus:

Koodilistaus 1.1: /etc/metalog/metalog.conf

command  = "/usr/local/sbin/mail_pwd_failures.sh"

1.  Syslog-ng

Syslog-ng:ssä on samat ominaisuudet kuin syslogissa ja metalogissa hyvin pienin eroavaisuuksin. Se osaa metalogin tavoin suodattaa viestejä ja sisältää etälokikirjoitusmahdollisuuden kuten syslog. Se osaa käsitellä lokeja syslogd:ltä (myös Solarikselta tulevia virtoja), kirjoittaa terminaalille, suorittaa ohjelmia ja toimia lokipalvelimena. Periaatteessa siinä on siis molempien toisten lokien paremmat puolet ja monipuoliset asetukset.

Alla on hieman muunneltuna perusasetusto.

Koodilistaus 1.1: /etc/syslog-ng/syslog-ng.conf

options {
        chain_hostnames(no);

        # The default action of syslog-ng is to log a STATS line
        # to the file every 10 minutes.  That's pretty ugly after a while.
        # Change it to every 12 hours so you get a nice daily update of
        # how many messages syslog-ng missed (0).
        stats_freq(43200);
};

source src {
    unix-stream("/dev/log" max-connections(256));
    internal();
};

source kernsrc { file("/proc/kmsg"); };

# define destinations
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"); };

# By default messages are logged to tty12...
destination console_all { file("/dev/tty12"); };

# ...if you intend to use /dev/console for programs like xconsole
# you can comment out the destination line above that references /dev/tty12
# and uncomment the line below.
#destination console_all { file("/dev/console"); };

# create filters
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 { message("failed"); };
filter f_denied { message("denied"); };

# connect filter and destination
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); };

Koodilistaus 1.1: /etc/syslog-ng/syslog-ng.conf

options { chain_hostnames(off); sync(0); };

#source where to read log
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };

#define destinations
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"); };

#create filters
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"); };

#connect filter and destination
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); };

Syslog-ng on helppo asettaa, mutta asetustiedostosta voi myös helposti unohtaa tärkeitä osia, koska se on valtava. Syslog-ng:n tekijä on luvannut myös lisää ominaisuuksia, kuten salausta, todennusta, pakkausta ja MAC-asetuksia. Näillä mahdollisuuksilla se sopii täydellisesti etälokiksi, koska hyökkääjä ei voi vakoilla lokeja silloin.

Syslog-ng:llä on myös se etu, ettei sitä välttämättä suoriteta rootina.

1.  Lokien tarkastus Logcheckillä

Lokien säilyttäminen sinänsä ei välttämättä riitä paljoon. Logcheckin kaltaiset sovellukset auttavat lokien selvittelyssä. Logcheck koostuu skriptistä ja logtail-sovelluksesta, jotka suoritetaan cronin avulla ja jotka etsivät lokeista epäillyttäviä kohtia annettujen sääntöjen mukaisesti. Tulokset postitetaan tarkastuksen loputtua rootille.

Logcheck ja logtail kuuluvat pakettiin app-admin/logsentry.

Logcheck käyttää neljää asetustiedostoa suodattamaan lokeista sisältöä. Logcheck.hacking sisältää tunnettuja tietomurtoyritysviestejä, logcheck.violations sisältää tietoturvaongelmia sisältäviä viestejä, logcheck.violations.ignore sisältää tietoturvaviestejä violations-tiedostosta, jotka on sallittua ohittaa, ja logcheck.ignore sisältää viestejä jotka voi yleensäkin ohittaa.

Varoitus: Tiedostoa logcheck.violations.ignore ei saa jättää tyhjäksi. Logcheck käyttää grepiä lokien tutkimiseen, ja jotkin versiot hyväksyvät tyhjän merkkijonon jokerimerkiksi, joka ohittaa kaikki tietoturvaongelmaviestit.

Viimeksi päivitetty 2. huhtikuuta 2001

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.