Wykrywanie skanowania portów ma osobliwość, przez którą wypada z typowego zestawu narzędzi. Fail2ban czyta dzienniki aplikacji — a przy skanowaniu zamkniętego portu żadnej aplikacji nie ma, czyli nie ma i zapisu w dzienniku. Skanowanie widać wyłącznie na poziomie zapory i właśnie tam działa PSAD: czyta komunikaty, które iptables zapisuje o odrzuconych pakietach.

Warunek obowiązkowy: logowanie musi być włączone

To główna przyczyna, dla której PSAD „stoi i nic nie pokazuje”. Bez reguł logowania w zaporze nie ma czego czytać, a żaden błąd przy tym nie powstaje.

Jeśli mamy UFW:

sudo ufw logging low
sudo ufw status verbose

Sprawdzić, że komunikaty rzeczywiście się pojawiają:

sudo journalctl -k | grep -c '\[UFW'
sudo grep -c 'UFW BLOCK' /var/log/ufw.log

Zera w obu poleceniach oznaczają, że PSAD działać nie będzie. I osobno o Debianie 12 oraz Ubuntu 24.04: bez rsyslog plik /var/log/ufw.log nie istnieje, wszystko idzie do dziennika systemd — ścieżkę do dziennika w ustawieniach PSAD trzeba podać z uwzględnieniem tego.

Instalacja

sudo apt install psad
sudo psad --sig-update
sudo psad -R
sudo psad --Status

Ostatnie polecenie jest podstawowe. Pokazuje, ile pakietów rozebrano, jakie adresy zauważono i z jakim poziomem zagrożenia. Jeśli licznik rozebranych pakietów wynosi zero, wracamy do poprzedniej sekcji: rzecz w logowaniu, a nie w braku skanowań.

Ustawienia są w /etc/psad/psad.conf. Praktycznie istotnych parametrów jest niewiele: adres do listów, ścieżka do dziennika i progi poziomów zagrożenia.

Poziomy zagrożenia

PSAD ocenia każde źródło w skali od 1 do 5 w zależności od tego, ilu różnych portów dotknięto i jak bardzo zachowanie przypomina znane techniki skanowania.

  • 1–2 — pojedyncze odwołania do zamkniętych portów. To stałe tło internetu, reagować nie trzeba;
  • 3 — systematyczny obchód portów. Zwykle skanery badawcze, których w sieci jest kilkadziesiąt;
  • 4–5 — celowe przeszukiwanie dużej liczby portów z jednego adresu, często z próbą ukrycia charakteru odwołań.

Próg dla listów ustawia parametr EMAIL_ALERT_DANGER_LEVEL. Wartość 3 zwykle oznacza kilka listów dziennie, co dość szybko prowadzi do reguły w kliencie pocztowym. Rozsądniej ustawić 4, a resztę oglądać na stronie zestawienia.

Automatyczne blokowanie: nie trzeba

PSAD potrafi sam dodawać reguły zapory (ENABLE_AUTO_IDS). Na jedynym roboczym serwerze nie warto tego włączać, a przyczyna jest konkretna: adres nadawcy w pakiecie da się podrobić. Wystarczy wysłać w naszą stronę pakiety z podstawionym adresem — a zablokujemy adres, który wybrał ktoś inny. Może się nim okazać adres naszego klienta, bramki płatniczej albo usługi monitorującej.

Jeśli blokowanie mimo wszystko jest potrzebne, włączajmy je z wysokim progiem zagrożenia i obowiązkowo z ograniczeniem czasowym (AUTO_BLOCK_TIMEOUT), żeby błędny wpis nie został na zawsze.

Co z tym robić praktycznie

Samo skanowanie jest nieszkodliwe: niczego nie psuje i dzieje się nieprzerwanie u wszystkich. Wartość danych PSAD leży nie w fakcie, lecz w zmianach charakteru.

Przydatne obserwacje:

  • Ukierunkowane zainteresowanie. Zwykły skaner przechodzi po tysiącach adresów i dziesiątce popularnych portów. Jeśli natomiast ktoś metodycznie przeszukuje porty właśnie naszego serwera, łącznie z niestandardowymi — to już nie tło;
  • Skanowanie konkretnego portu. Odwołania do portu bazy danych albo panelu zarządzania oznaczają, że ktoś szuka właśnie tej usługi — zwykle po opublikowaniu informacji o kolejnej podatności w niej;
  • Rozpoznanie przed próbą. Skok skanowania, a kilka godzin później zgadywanie haseł z tego samego zakresu — to typowa kolejność, a jej pierwsza część daje trochę czasu.

Praktyczny wniosek z każdej z tych obserwacji jest ten sam: sprawdzić, że lista portów otwartych na zewnątrz odpowiada oczekiwaniom i że na każdym z nich pracuje coś, co aktualizowaliśmy w tym roku.

Miejsce w całym zestawie

PSAD nie zastępuje ani zapory, ani Fail2bana, ani systemu wykrywania włamań. Zamyka jedną wąską szczelinę — próby, które nie zostawiają śladów nigdzie indziej, bo nie doszły do żadnej aplikacji. Kosztuje niewiele, po pierwszym uruchomieniu pracuje bez konfigurowania, a jego zestawienie odpowiada na pytanie, którego inaczej się nie zadaje: czy ktoś interesuje się naszym serwerem w oderwaniu od ogólnego tła. Jak wygląda to zestawienie, pokazuje strona demonstracyjna poniżej.