[OpenBSD]

[Wstecz: Packet Tagging] [Spis treści] [Dalej: Wydajność]

PF: Logowanie


Spis treści


Wstęp

Tworzenie logów w PF odbywa się za pośrednictwem pflogd(8), który nasłuchuje na urządzeniu pflog0 i zapisuje pakiety do pliku logów (domyślnie /var/log/pflog) w formacie binarnym tcpdump(8). Reguły filtrujące, które zawierają słowa kluczowego log lub log-all podlegają logowaniu.

Odczytywanie pliku logów

Plik logów, tworzony przez pflogd jest plikiem o formacie binarnym i nie może być odczytywany przy pomocy edytora tekstu. Należy użyć tcpdump do jego odczytu.

Aby wyświetlić zawartość pliku logów:

# tcpdump -n -e -ttt -r /var/log/pflog

Oczywiście przeglądanie plkiu pflog przy pomocy tcpdump(8), nie daje wyników w czasie rzeczywistym. Wyświetlanie logowanych pakietów na bierząco może być osiągnięte przy pomocy interfejsu pflog0:

# tcpdump -n -e -ttt -i pflog0

UWAGA: Podczas analizowania logów, uwagę należy zwracać na szczegółowe dekodowanie protokołów przez tcpdump (tryb "dokładny" aktywowany opcją -v). Dekoder zawarty w programie tcpdump nie ma zbyt chwalebnej przeszłości jeśli chodzi o bezpieczeństwo. Przynajmniej teoretycznie możliwe jest przeprowadzenie opóźnionego ataku poprzez wysyłanie pakietów mających zostać zalogowanymi. Jest zalecaną praktyką, aby przed rozpoczęciem przeglądania plików logów w ten sposób, przenieść je z firewalla na inną maszynę.

Szczególna ostrożność powinna być zachowana w stosunku do zabezpieczenia dostępu do plików logów. Domyślnie, pflogd będzie zapisywać 96 bajtów pakietu w pliku logów. Dostęp do logów może skutkować uzyskaniem dostępu do wrażliwych danych transportowanych w pakietach (jak na przykład nazwy użytkowników i hasła usług telnet(1) lub ftp(1)).

Selektywne przeglądanie logów

Ponieważ logi pflogd(8) są zapisywane w binarnym formacie tcpdump(8), wszystkie dostępne właściwości tego programu mogą być wykorzystywane podczas ich przeglądania. Na przykład, aby wyświetlić pakiety, które odpowiadają portowi 80, można użyć takiego polecenia:
# tcpdump -n -e -ttt -r /var/log/pflog port 80

Aby uzyskać jeszcze bardziej prezycjną informację, można ograniczyć wyświetlane dane do konkretnych kombinacji port-host:

# tcpdump -n -e -ttt -r /var/log/pflog port 80 and host 192.168.1.3

Ta sama technika może być zastosowana podczas odczytu bezpośrednio z interfejsu pflog0:

# tcpdump -n -e -ttt -i pflog0 host 192.168.4.2

Warto podkreślić, że nie ma to wpływu na to, które pakiety są zapisywane w pliku logów pflogd, a jedynie na to, co jest wyświetlane przez tą komendę.

Standardowe reguły filtrujące tcpdump(8) zostały rozszerzone w wersji tego programu dla OpenBSD o dodatkowe możliwości filtrowaia logów pflogd:

Przykład:

# tcpdump -n -e -ttt -i pflog0 inbound and action block and on wi0

Wyświetla logi w czasie rzeczywistym, dla nadchodzących pakietów, które zostały zablokowane na interfejsie wi0.

Logowanie pakietów poprzez syslog

W niektórych sytuacjach jest pożądane, aby logi firewalla były dostępne w formacie ASCII i/lub wysyłane do zdalnego serwera gromadzącego logi. Może to być zrealizowane poprzez dwa małe skrypty powłoki, wprowadzenie drobnych zmian w plikach konfiguracyjnych OpenBSD oraz syslogd(8) - demonie logującym. Syslogd prowadzi logi w formacie ASCII i jest w stanie przechowywać logi na zdalnym serwerze logów.

Prace rozpoczyna się od utworzenia użytkownika pflogger, jego shell to /sbin/nologin. Najprościej zrobić to przy pomocy adduser(8).

Po dodaniu użytkownika pflogger, należy przekopiować dwa proste skrypty:

/etc/pflogrotate

	FILE=/home/pflogger/pflog5min.$(date "+%Y%m%d%H%M")
	kill -ALRM $(cat /var/run/pflogd.pid)
	if [ $(ls -l /var/log/pflog | cut -d " " -f 8) -gt 24 ]; then
	   mv /var/log/pflog $FILE
	   chown pflogger $FILE
	   kill -HUP $(cat /var/run/pflogd.pid)
	fi

/home/pflogger/pfl2sysl

	for logfile in /home/pflogger/pflog5min* ; do
	   tcpdump -n -e -ttt -r $logfile | logger -t pf -p local0.info
	   rm $logfile
	done

Przejść do edycji zadań demona cron dla użytkownika root:

# crontab -u root -e

Dodać dwie następujące linie:

# rotate pf log file every 5 minutes
0-59/5 * * * * /bin/sh /etc/pflogrotate

Utworzyć zadania demona cron dla użytkownika pflogger:

# crontab -u pflogger -e

Dodać dwie poniższe linie:

# feed rotated pflog file(s) to syslog
0-59/5 * * * * /bin/sh /home/pflogger/pfl2sysl

Dodać następującą linie do /etc/syslog.conf:

local0.info     /var/log/pflog.txt

Dodatkowo, aby prowadzić logi na zdalnym serwerze przeznaczonym do tego celu, należy dodać następującą linie:

local0.info     @syslogger

Dodatkow upewnić się, że host syslogger jest zdefiniowany w pliku hosts(5).

Utwórz plik /var/log/pflog.txt, aby umożliwić syslog dopisywanie do niego logów.

# touch /var/log/pflog.txt

Zmiany staną się aktywne po przeładowaniu demona syslogd:

# kill -HUP $(cat /var/run/syslog.pid)

Wszystkie logowane pakiety są teraz wysyłane do /var/log/pflog.txt. Jeśli druga linia została także dodana, są one także wysyłane do zdalnego hosta logującego syslogger.

Skrypt /etc/pflogrotate już działa i zastępuje /var/log/pflog więc rotacja pflog dokonywana przez newsyslog(8) nie jest już potrzebna i powinna być wyłączona. Ponieważ /var/log/pflog.txt przejmuję zadania /var/log/pflog, jego rotacja powinna być aktywowana. Tak więc należy zmienić /etc/newsyslog.conf w następujący sposób:

    #/var/log/pflog       600    3    250    *    ZB /var/run/pflogd.pid
    /var/log/pflog.txt    600    7    *      24

PF będzie teraz zapisywał logi w formacie ASCII do pliku /var/log/pflog.txt. Odpowiednio ustawiony plik /etc/syslog.conf sprawi, że dziennik prowadzony będzie także na zdalnym serwerze logów. Logowanie nie będzie natychmiastowe i może upłynąć około 5-6 minut (przerwa pomiędzy zadaniami cron), zanim logowane pakiety pojawią się pliku.

[Wstecz: Packet Tagging] [Spis treści] [Dalej: Wydajność]


[wstecz] www@openbsd.org
Originally [OpenBSD: logging.html,v 1.13 ]
$Translation: logging.html,v 1.6 2004/02/08 13:14:55 pl-team Exp $
$OpenBSD: logging.html,v 1.6 2004/02/15 17:59:27 jufi Exp $