OSSEC HIDS — Host-based Intrusion Detection na serwerze Linux
Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo
Sieciowy IDS (Suricata, Snort) widzi ruch wchodzący do serwera — ale nie wie co dzieje się
wewnątrz systemu operacyjnego. OSSEC HIDS (Host-based Intrusion Detection System) uzupełnia
tę lukę: działa od środka, monitorując pliki systemowe, logi, procesy i konto użytkowników.
Modyfikacja /etc/passwd, podejrzany proces systemowy, 10 błędnych logowań SSH w
ciągu minuty — OSSEC to wykryje i może automatycznie zablokować atakujący IP przez iptables
(active response). Ten artykuł przeprowadza przez instalację, konfigurację FIM i active
response.
Instalacja OSSEC — tryb local (jeden serwer)
# Wymagania sudo apt update sudo apt install build-essential libssl-dev libpcre2-dev zlib1g-dev -y # Pobierz OSSEC (lub Atomic OSSEC - stabilny fork) wget https://github.com/ossec/ossec-hids/archive/3.7.0.tar.gz tar -xzf 3.7.0.tar.gz cd ossec-hids-3.7.0 # Uruchom instalator sudo ./install.sh # Odpowiedz na pytania instalatora: # Language: pl / en # System type: local (lub 'server' dla trybu centralnego) # Installation dir: /var/ossec (domyslnie) # Enable email notifications: y (podaj adres) # Run integrity check daemon: y # Run rootkit detection engine: y # Run active response: y # Sprawdz status sudo /var/ossec/bin/ossec-control status # Uruchom OSSEC sudo /var/ossec/bin/ossec-control start
Tryb server-agent — centralny monitoring wielu serwerów
# Na SERWERZE OSSEC (manager): # ./install.sh -> type: server # Dodaj agenta do managera sudo /var/ossec/bin/manage_agents # Opcje menu: # A - Add agent -> podaj nazwe i IP agenta # L - List agents # E - Extract key for agent -> skopiuj klucz na agenta # Na AGENCIE: # ./install.sh -> type: agent # Podczas instalacji podaj IP serwera OSSEC # Zaimportuj klucz na agencie sudo /var/ossec/bin/manage_agents # I - Import key -> wklej klucz z serwera # Uruchom agenta sudo /var/ossec/bin/ossec-control start # Sprawdz na serwerze czy agent sie polaczyl sudo /var/ossec/bin/agent_control -la # ID:001, Nazwa, IP, Status: Active # Port komunikacji: 1514 UDP # Otworz w UFW: sudo ufw allow 1514/udp
Konfiguracja File Integrity Monitoring (syscheck)
Syscheck oblicza sumy kontrolne (MD5, SHA1, SHA256) monitorowanych plików i porównuje je
przy kolejnych skanach. Każda zmiana generuje alert. Konfiguracja w
/var/ossec/etc/ossec.conf:
<!-- /var/ossec/etc/ossec.conf --> <syscheck> <!-- Czestotliwosc skanu w sekundach (7200 = 2h) --> <frequency>7200</frequency> <!-- Monitoruj te katalogi --> <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories check_all="yes">/bin,/sbin</directories> <directories check_all="yes" realtime="yes">/var/www</directories> <!-- Ignoruj zmienne pliki --> <ignore>/etc/mtab</ignore> <ignore>/etc/resolv.conf</ignore> <ignore>/etc/random-seed</ignore> <ignore type="sregex">.log$|.tmp$</ignore> <!-- Nie alertuj przy pierwszym skanie (nowy baseline) --> <alert_new_files>yes</alert_new_files> </syscheck> <!-- Przeladuj OSSEC po zmianach --> <!-- sudo /var/ossec/bin/ossec-control reload -->
Active Response — automatyczne blokowanie IP
Active response pozwala OSSEC automatycznie reagować na ataki. Przykład: po 5 nieudanych logowaniach SSH z jednego IP (reguła 5720), OSSEC blokuje to IP w iptables na 600 sekund:
<!-- Fragment ossec.conf -->
<active-response>
<!-- Skrypt blokuajcy IP -->
<command>host-deny</command>
<location>local</location>
<!-- Wyzwalaj po alertach levelu 6+ -->
<level>6</level>
<!-- Zablokuj na 600 sekund (10 minut) -->
<timeout>600</timeout>
</active-response>
<active-response>
<command>firewall-drop</command>
<location>local</location>
<!-- Tylko dla reguły SSH brute-force (ID 5720) -->
<rules_id>5720</rules_id>
<timeout>1800</timeout>
</active-response>
<!-- Dostepne komendy (skrypty w /var/ossec/active-response/bin/):
host-deny - /etc/hosts.deny
firewall-drop - iptables -I INPUT -s IP -j DROP
disable-account - blokuje konto systemowe
Testuj active response:
/var/ossec/bin/ossec-control enable client-syslog
tail -f /var/ossec/logs/active-responses.log --> Analiza alertów i logów OSSEC
# Biezace alerty (live monitoring)
sudo tail -f /var/ossec/logs/alerts/alerts.log
# Przykladowy alert (SSH brute-force):
# ** Alert 1712745601.12345: - syslog,sshd,authentication_failed,
# 2026 Apr 10 14:23:21 web-server->/var/log/auth.log
# Rule: 5720 (level 10) -> 'Multiple SSHD Authentication Failures.'
# Src IP: 203.0.113.50
# User: root
# Apr 10 14:23:21 server sshd[12345]: Failed password for root from 203.0.113.50
# Statystyki alertow
sudo cat /var/ossec/logs/alerts/alerts.log | \
grep "Rule:" | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
# Przetestuj regule na przykladowym logu
echo "Apr 10 14:23:21 server sshd[1234]: Failed password for root from 203.0.113.50 port 54321 ssh2" | \
sudo /var/ossec/bin/ossec-logtest
# Sprawdz zbanowane IP (active response)
sudo cat /var/ossec/logs/active-responses.log
# Raporty HTML (generowane przez mail daemon)
sudo /var/ossec/bin/ossec-reportd
# Status procesow OSSEC
sudo /var/ossec/bin/ossec-control status OSSEC vs Wazuh — co wybrać?
| Cecha | OSSEC 3.7 | Wazuh 4.9 |
|---|---|---|
| Interfejs webowy | Brak (email/log) | Pełny dashboard (OpenSearch) |
| Wymagania RAM (manager) | ~128 MB | 4-8 GB (z indexerem) |
| Vulnerability scan | Brak | Tak (CVE database) |
| Compliance (PCI-DSS) | Podstawowe reguły | Gotowe dashboardy i raporty |
| REST API | Brak | Pełne REST API |
| Active development | Wolniejszy rozwój | Aktywny team, częste release |
| Kiedy wybrać | Lekki HIDS, niskie zasoby | Centralne SIEM, wizualizacja |