Narzędzie służące do wykrywania skanowania portów oraz pasywnego rozpoznawania atakującego systemu operacyjnego.
Instalacja:
sudo apt-get install psad
Uruchomienie usługi:
sudo service psad start
lub:
sudo systemctl start psad
Następnie konfigurujemy iptables i ip6tables. W obu przypadkach polityka domyślna obsługi pakietów powinna być
ustawiona na DROP oraz ostatnią regułą w łańcuchach INPUT i FORWARD
powinno być zalogowanie pakietu, np. tak:
ip6tables -A INPUT -j LOG --log-prefix "[ipt]: INPUT6 DROP: "
ip6tables -A FORWARD -j LOG --log-prefix "[ipt]: FORWARD6 DROP: "
W powyższych instrukcjach argument --log-prefix z ciągiem tekstowym prefiksu logu jest opcjonalny.
U mnie służy on do 'wylądowania' logu w odpowiednim pliku (/var/log/iptables.log zamiast domyślnie w /var/log/kern.log).
Jeśli zdecydowaliśmy się na przekierowanie logów do innego pliku niż domyślnego, to powinniśmy jeszcze wskazać go
programowi psad edytując plik /etc/psad/psad.conf i ustawiając zmienną IPT_SYSLOG_FILE,
np:
IPT_SYSLOG_FILE /var/log/iptables.log;
Po tej zmianie restartujemy psad-a.
Jeśli nie chcemy sobie zawracać głowy konfiguracją firewalla dla pakietów IPv6, to plik firewalla blokujący
cały ruch IPv6 może wyglądać następująco:
#!/bin/bash
ip6tables -F INPUT
ip6tables -F OUTPUT
ip6tables -F FORWARD
ip6tables -X
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# #############################################################################################################
# INPUT
# #############################################################################################################
ip6tables -A INPUT -j LOG --log-prefix "[ipt]: INPUT6 DROP: "
# #############################################################################################################
# #############################################################################################################
# #############################################################################################################
# OUTPUT
# #############################################################################################################
ip6tables -A OUTPUT -j LOG --log-prefix "[ipt]: OUTPUT6 DROP: "
# #############################################################################################################
# #############################################################################################################
# #############################################################################################################
# FORWARD
# #############################################################################################################
ip6tables -A FORWARD -j LOG --log-prefix "[ipt]: FORWARD6 DROP: "
# #############################################################################################################
# #############################################################################################################
Następnie odpalamy skrypty konfigurujące firewalla IPv4 i IPv6 i sprawdzamy czy dają nam one poprawnie funkjonującą
konfigurację dla psad-a:
psad --fw-analyze
Jeśli wszystko pójdzie OK, to rezultat powinien być następujący:
[+] Parsing /sbin/iptables INPUT chain rules.
[+] Parsing /sbin/ip6tables INPUT chain rules.
[+] Firewall config looks good.
[+] Completed check of firewall ruleset.
[+] Results in /var/log/psad/fw_check
[+] Exiting.
W przeciwnym razie dostaniemy krótką informację o błędzie oraz maila na konto administratora z bardziej
szczegółową informacją na temat błędu w konfiguracji.sudo apt-get install alpine
sudo alpine
Sprawdzenie czy psad jest uruchomiony:
sudo bash
kill -0 `cat /var/run/psad/psad.pid`
echo $?
Jeśli na wyjściu powyższego polecenia dostaniemy 0, to znaczy, że psad jest uruchomiony. W przeciwnym
razie psad nie jest uruchomiony lub wystąpił jakiś błąd.
Jeśli nie jesteśmy zainteresowani powiadomieniami o skanowaniu po IPv6, to możemy ustawić poniższą zmienną na 'N':
ENABLE_IPV6_DETECTION N
Aktualizacja bazy sygnatur psad-a:
sudo psad --sig-update
Załadowanie najnowszej bazy sygnatur do uruchomionego już psad-a:
sudo psad -H
Wyświetlenie szczegółowych informacji statusowych oraz statystycznych programu psad:
sudo psad --Status
Uruchomienie psad-a w trybie analizy wskazanego pliku z logami. Wyświetlane dane są podobne do tych, które otrzymamy z opcją --Status:
sudo psad -A -m /path/to/iptables.logs
Zmienne konfiguracyjne w pliku /etc/psad/psad.conf odpowiedzialne za reakcję psad-a na atak:
ENABLE_AUTO_IDS - określa czy psad działa w trybie automatycznej obrony czy nie
AUTO_IDS_DANGER_LEVEL - liczba od 1 do 5 określająca minimalny poziom zagrożenia, od którego włącznie podejmowana jest obronna reakcja psad
AUTO_BLOCK_TIMEOUT - czas na jaki ustawiane są reguły blokujące, jeśli jest ustawiona na 0, to reguły blokujące są ustawiane na cały
czas działania psad-a (do jego restartu lub restartu całego komputera)
IPTABLES_BLOCK_METHOD - jeśli jest ustawione na 'Y' i na 'Y' ustawiona jest zmienna ENABLE_AUTO_IDS, to dodaje DROP-ujące reguły iptables
Wypisuje blokujące reguły dodane przez psad-a w odpowiedzi na atak:
psad --fw-list
Ręczne dodanie adresu IP do łańcucha reguł blokujących psad:
sudo psad --fw-block-ip 10.0.0.10
Ręczne usunięcie adresu IP z łańcucha reguł blokujących psad:
sudo psad --fw-rm-block-ip 10.0.0.10
W pliku /etc/psad/auto_dl znajduje się zbiór podnoszący bądź obniżający (lub nawet ignorujący) poziom zagrożenia podanych adresów IP i sieci.
Opróżnienie wszystkich łańcuchów reguł blokujących psad:
sudo psad --Flush