Gentoo Logo

1.  Introducere

Jurnalizarea suplimentară ar trebui să fie adăugată pentru a cuprinde avertismentele sau erorile ce pot să indice un atac în desfăşurare sau o compromitere reuşită. Deseori, atacatorii scanează sau probează înainte de a ataca.

Este, de asemenea, vital ca fişierele dvs. de jurnalizare să fie uşor citibile şi manipulabile. Gentoo Linux vă permite să alegeţi între 3 nivele de jurnalizare diferite în momentul instalării.

1.  Jurnalizarea: Syslogd

Syslogd este cel mai utilizat sistem de jurnalizare pentru Linux şi, în general, pentru Unix. Acesta deţine unele facilităţi pentru rotirea fişierelor jurnal, dar utilizarea /usr/sbin/logrotate prin intermediul cron (logrotate este configurat din /etc/logrotate.conf) se dovedeşte mai utilă, deoarece logrotate are multe caracteristici. Cât de des se poate efectua rotirea fişierelor de jurnal depinde de încărcarea sistemului.

Mai jos, aveţi un fişier syslog.conf standard, cu unele opţiuni adăugate. Am decomentat liniile cron şi tty şi am adăugat un server de jurnalizare la distanţă. Pentru îmbunătăţirea securităţii puteţi adăuga jurnalizarea în două locuri.

Cod 1.1: /etc/syslog.conf

#  /etc/syslog.conf      Fişier de configurare pentru syslogd.
#
#                       Pentru mai multe informaţii consultaţi pagina
#                       de manual syslog.conf(5).
#                       Acest fişier este din Debian, îl vom utiliza şi noi de acum încolo
#                       Daniel Robbins, 5/15/99

#
# Mai întâi câteva fişiere de jurnal standard. Jurnalizăm după funcţie.
#

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

#
# Jurnalizarea pentru sistemul de poştă electronică. Împărţiţi-l pentru a scrie
# mai uşor script-uri de analizare a acestor fişiere.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Jurnalizarea pentru sistemul de ştiri INN
#
news.crit                       /var/log/news/news.crit
news.err                        /var/log/news/news.err
news.notice                     -/var/log/news/news.notice

#
# Unele fişiere jurnal pentru cuprinderea tuturor informaţiilor.
#
*.=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

#
# Situaţiile critice şi alertele sunt trimise tuturor utilizatorilor autentificaţi.
#
*.emerg                         *
*.=alert                        *

#
# Îmi place să mi se afişeze mesaje în consolă, dar doar într-o consolă
# virtuală pe care, de obicei, o las nefolosită.
#
daemon,mail.*;\
       news.=crit;news.=err;news.=notice;\
       *.=debug;*.=info;\
       *.=notice;*.=warn       /dev/tty8

# Setarea unui server de jurnalizare la distanţă
*.*                        @logserver

# Pipa denumită /dev/xconsole este utilizată pentru utilitarul `xconsole'. Pentru a
# o folosi, trebuie să invocaţi `xconsole' cu opţiunea `-file' option:
# 
#    $ xconsole -file /dev/xconsole [...]
#
# NOTĂ: ajustaţi lista următoare, sau veţi avea probleme în cazul în care aveţi
#      un site destul de încărcat..
#
#daemon.*,mail.*;\
#       news.crit;news.err;news.notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       |/dev/xconsole

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

Cel mai probabil, atacatorii vor încerca să îşi şteargă urmele prin editarea sau ştergerea fişierelor de jurnalizare. Le puteţi îngreuna acţiunile prin jurnalizarea într-unul sau mai multe server-e de jurnalizare pe alte maşini. Pentru a afla mai multe informaţii despre syslogd, puteţi rula man syslog.

1.  Metalog

Metalog de Frank Dennis nu poate jurnaliza pe un server la distanţă, dar este avantajos în momentul în care sunt luate în calcul performanţa şi flexibilitatea jurnalizării. Poate jurnaliza după numele aplicaţiei, urgenţă, funcţie (ca syslogd), şi deţine un modul de căutare cu expresii regulate cu care puteţi lansa aplicaţii externe când anumite combinaţii potrivite. Este foarte bun la acţionare în momentul în care este necesar.

Configurarea standard este, de obicei, de ajuns. Dacă doriţi să fiţi notificat printr-un mesaj de câte ori cineva greşeşte parola, utilizaţi unul din următoarele script-uri.

Pentru postfix:

Cod 1.1: /usr/local/sbin/mail_pwd_failures.sh pentru postfix

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

Pentru netqmail:

Cod 1.1: /usr/local/sbin/mail_pwd_failures.sh pentru netqmail

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

Amintiţi-vă să faceţi script-ul executabil prin executarea /bin/chmod +x /usr/local/sbin/mail_pwd_failures.sh

Apoi, decomentaţi linia de sub "Password failures" din /etc/metalog/metalog.conf ca:

Cod 1.1: /etc/metalog/metalog.conf

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

1.  Syslog-ng

Syslog-ng are aproape aceleaşi caracteristici ca syslog şi metalog cu o mică diferenţă. Poate filtra mesajele pe baza nivelului şi conţinutului (ca metalog), oferă jurnalizare la distanţă, ca syslog, poate manipula jurnale din syslogd (chiar şi fluxurile de caractere - eng. streams - din Solaris), să scrie în terminal, să execute programe, şi să se comporte ca un server de jurnalizare. În fapt, este cel mai bun dintre cele două sisteme de jurnalizare combinat cu o configuraţie avansată.

Aveţi mai jos un fişier de configurare clasic, puţin modificat.

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

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

#sursa de unde să citească jurnalele
source src { unix-stream("/dev/log"); internal(); };
source kernsrc { file("/proc/kmsg"); };

#definirea destinaţiilor
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"); };

#crearea filtrelor
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"); };

#conectarea filtrelor şi destinaţiilor
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); };

#jurnalul implicit
log { source(src); destination(console_all); };

Syslog-ng este foarte uşor de configurat, dar şi foarte uşor de omis ceva în fişierul de configurare, deoarece este mare. Autorul încă promite unele caracteristici în plus, cum ar fi encripţia, autentificarea, compresia şi controlul MAC (Mandatory Access Control - Controlul Accesului Obligatoriu). Cu aceste opţiuni, va fi un sistem de jurnalizare în reţea perfect, deoarece un atacator nu poate spiona jurnalul.

Şi syslog-ng mai are un alt avantaj: nu trebuie rulat ca root!

1.  Analiza jurnalelor cu Logcheck

Bineînţeles, păstrarea tuturor jurnalelor separat este doar jumătate din toată munca. O aplicaţie precum Logcheck, poate efectua analize de jurnal regulate mult mai uşor. Logcheck este un script însoţit de un binar denumit logtail, ce rulează prin intermediul aplicaţiei dvs. cron şi verifică jurnalele după unele reguli ce definesc activitatea suspectă. Apoi, acesta trimite ceea ce afişează prin poştă electronică utilizatorului root.

Logcheck şi logtail fac parte din pachetul app-admin/logsentry.

Logcheck utilizează patru fişiere pentru a filtra intrările importante din fişiere de cele neimportante. Aceste fişiere sunt logcheck.hacking, ce conţine mesaje legate de mesaje de atac cunoscute, logcheck.violations, ce conţine combinaţii indicând violări ale securităţii, logcheck.violations.ignore, ce conţine cuvinte cheie ce pot fi găsite prin intermediul fişierului de violări, permiţând intrărilor normale să fie ignorate şi logcheck.ignore, care conţine modele ale acelor intrări care trebuie ignorate.

Atenţie: Nu lăsaţi fişierul logcheck.violations.ignore gol. Logcheck utilizează grep pentru a analiza jurnalele, unele versiuni ale acestuia considerând un fişier gol ca fiind orice. Astfel, toate violările vor fi ignorate.

Actualizat la 25 Noiembrie 2005

Versiunea originală a acestui document a fost actualizată ultima dată la 2 Aprilie 2010

Donate to support our development efforts.

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