[Wstecz: Packet Tagging] [Spis treści] [Dalej: Wydajność]
Po to by logować pakiety przechodzące przez PF, musi zostać użyte słowo kluczowe log w regułach NAT/rdr oraz filter. Zwróć uwagę, że mogą być logowane tylko pakiety przepuszczane lub blokowane; nie można określić reguły która będzie tylko logowała pakiety.
Klucz log powoduje, że wszystkie pakiety pasujące do reguły będą logowane. W przypadku gdy reguła tworzy stan, tylko pierwszy pasujący (ten powodujący utworzenie stanu) będzie logowany.
Opcje które można podać dla klucza log:
Opcje podawane są w nawiasie po kluczu log; wielokrotne opcje mogą być oddzielone przecinkiem lub spacją.
pass in log (all, to pflog1) on $ext_if inet proto tcp to $ext_if port 22 keep state
Aby wyświetlić zawartość pliku logów:
# tcpdump -n -e -ttt -r /var/log/pflog
Oczywiście przeglądanie pliku pflog przy pomocy tcpdump(8), nie daje wyników w czasie rzeczywistym. Wyświetlanie logowanych pakietów na bieżą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)).
# tcpdump -n -e -ttt -r /var/log/pflog port 80
Aby uzyskać jeszcze bardziej precyzyjną 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 o dodatkowe możliwości filtrowania 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.
Prace rozpoczynamy od napisania poniższego skryptu:
/etc/pflogrotate
#!/bin/sh
PFLOG=/var/log/pflog
FILE=/var/log/pflog5min.$(date "+%Y%m%d%H%M")
kill -ALRM $(cat /var/run/pflogd.pid)
if [ -r $PFLOG ] && [ $(stat -f %z $PFLOG) -gt 24 ]; then
mv $PFLOG $FILE
kill -HUP $(cat /var/run/pflogd.pid)
tcpdump -n -e -ttt -r $FILE | logger -t pf -p local0.info
rm $FILE
fi
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
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
Dodatkowo należy 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, oraz nadaj mu takie same uprawnienia jak plikowi pflog.
# touch /var/log/pflog.txt
# chmod 600 /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ść]