Slajd 1/46
Zdalne logowanie Syslog i rsyslog w systemie Linux oraz RouterOS
Cel slajdu: Przedstawienie kompleksowego, laboratoryjnego samouczka inżynierskiego: konfiguracja od zera centralnego serwera rsyslog, dynamiczne rozdzielanie plików per host i severity, buforowanie awaryjne oraz telemetria RouterOS.

Wprowadzenie do warsztatu

Niniejsze opracowanie stanowi praktyczny przewodnik wdrożeniowy dla administratorów sieci LAN/WAN i inżynierów NMS. Krok po kroku przejdziemy od pustego systemu operacyjnego Linux Debian/Ubuntu/RHEL do w pełni zabezpieczonego, wysoce dostępnego klastra telemetrii zdarzeń.

  • Architektura centralnego kolektora: Uruchomienie nasłuchu UDP/TCP 514 w oparciu o nowoczesną składnię RainerScript v8+
  • Separacja danych per-PC: Dynamiczne szablony dynaFile tworzące automatycznie foldery dla każdego adresu IP lub nazwy hosta
  • Klasyfikacja wag zdarzeń: Wydzielanie logów krytycznych (emerg..err) do osobnych plików audytowych w katalogu urządzenia
  • Telemetria MikroTik RouterOS: Pełna integracja zdarzeń zapory sieciowej, dzierżaw DHCP, zmian stanu interfejsów i audytu logowań
Protokół Syslog (RFC 3164 / RFC 5424): Uniwersalny standard sieciowy umożliwiający urządzeniom brzegowym i stacjom roboczym natychmiastowe przesyłanie zdarzeń diagnostycznych, alarmów bezpieczeństwa i metadanych do scentralizowanego serwera rsyslog.
Weryfikacja wersji oprogramowania na węzłach laboratoryjnych
root@nms-syslog:~# rsyslogd -v | head -n 2 rsyslogd 8.2302.0 (aka 2023.02) compiled with runtime-x, libgcrypt, gnutls root@nms-syslog:~# uname -r 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC x86_64 [admin@MikroTik-CCR2004] > /system resource print uptime: 42d18h12m version: 7.15.2 (stable) board-name: CCR2004-16G-2S+ cpu: ARM64 (4 cores @ 1700MHz)
Warsztat praktyczny: Syslog i RouterOS Praktyczny warsztat: Syslog, rsyslog i MikroTik Konfiguracja zdalnej telemetrii od zera: Linux rsyslog dynaFile oraz MikroTik RouterOS Klient Linux (PC / SRV) 🐧 omfwd (TCP/UDP) Bufor dyskowy LinkedList journald forward MikroTik RouterOS ⚡ /system logging action=remote UDP 514 log-prefix & topics Serwer rsyslog (NMS) 🛡 RainerScript v8+ dynaFile per host/IP Ruleset & stop isolation Architektura zdalnego logowania zdarzeń teleinformatycznych
Slajd 2/46
Architektura centralnego gromadzenia logów w sieci LAN/WAN
Cel slajdu: Przedstawienie topologii przepływu strumieni telemetrycznych z węzłów brzegowych do dedykowanego serwera rsyslog.

Fundamenty telemetrii sieciowej

Prawidłowo zaprojektowany system centralizacji zdarzeń opiera się na separacji ruchu telemetrycznego w dedykowanej warstwie zarządzania (Out-of-Band Management VLAN). Zapobiega to zakłócaniu pracy sieci produkcyjnej oraz zabezpiecza logi przed podsłuchem.

  • Źródła zdarzeń (Generators): Routery MikroTik, serwery Linux, stacje robocze PC, przełączniki managed i punkty dostępowe Wi-Fi
  • Kanały transmisyjne: UDP 514 dla urządzeń wbudowanych (MikroTik), TCP 514 dla systemów serwerowych oraz TLS 6514 dla połączeń szyfrowanych
  • Serwer centralny rsyslog: Wysokowydajny proces w przestrzeni użytkownika filtrujący pakiety w locie za pomocą wątków wejściowych
  • System plików (dynaFile): Fizyczne rozdzielanie logów do dedykowanych folderów na podstawie źródłowego adresu IP (%FROMHOST-IP%)
Zasada minimalizacji uprawnień serwera logów: Centralny serwer rsyslog nie powinien udostępniać żadnych publicznych usług (brak serwera WWW, FTP czy SMB). Dostęp do plików w /var/log/remote/ powinien być ograniczony wyłącznie do lokalnego konta audytora i agentów systemów NMS/SIEM.
Weryfikacja trasy pakietów telemetrycznych ze stacji roboczej do serwera rsyslog
user@PC-Stacja-01:~$ ip route get 192.168.1.100 192.168.1.100 dev enp3s0 src 192.168.1.150 uid 1000 cache <direct-lan> mtu 1500 rtt 0.182ms user@PC-Stacja-01:~$ nc -z -v -w2 192.168.1.100 514 Connection to 192.168.1.100 514 port [tcp/syslog] succeeded!
Topologia telemetryczna sieci LAN 💻 STACJA ROBOCZA PC-Stacja-01 192.168.1.150 💻 STACJA ROBOCZA SRV-App-Linux 192.168.1.200 ⚡ ROUTER MikroTik-GW 192.168.1.1 Core Switch / VLAN VLAN 99 (Management) Port 514 UDP (RouterOS) Port 514 TCP (Linux) Port 6514 TLS (WAN) TCP 514 TCP 514 UDP 514 ▤ SERWER Kolektor rsyslog 192.168.1.100 Strumienie Magazyn dynaFile /var/log/remote/ ├── 192.168.1.1/ (MikroTik) ├── 192.168.1.150/ (PC) └── 192.168.1.200/ (SRV)
Slajd 3/46
Model IETF Syslog: Generator, Przekaźnik (Relay) i Kolektor
Cel slajdu: Zrozumienie ról poszczególnych węzłów w łańcuchu przetwarzania telemetrii według standardu RFC 5424.

Standardy i specyfikacja IETF

Standard IETF formalizuje podział ról w architekturze telemetrycznej. Nie każdy węzeł musi komunikować się bezpośrednio z głównym magazynem danych – w rozległych infrastrukturach kluczową rolę pełnią przekaźniki pośredniczące (Relays).

  • Generator (Device): Aplikacja lub demon systemowy tworzący komunikat o zdarzeniu i przypisujący mu początkowy priorytet
  • Przekaźnik (Relay): Węzeł pośredni odbierający komunikaty z lokalnej podsieci, buforujący je i przesyłający dalej tunelem szyfrowanym
  • Kolektor (Collector): Węzeł docelowy odpowiadający za parsowanie, bezpieczny zapis na nośnik trwały oraz indeksowanie dla NMS
  • Integralność metadanych: Standard nakazuje, aby przekaźnik nie modyfikował oryginalnej nazwy hosta źródłowego ani znacznika czasu zdarzenia
Różnica między FROMHOST a HOSTNAME: W rsyslog zmienna %HOSTNAME% to nazwa wpisana w nagłówku przez generator. Zmienna %FROMHOST-IP% to rzeczywisty adres IP gniazda pakietu sieciowego, z którego rsyslog odebrał ramkę. Z punktu widzenia bezpieczeństwa podział na katalogi należy opierać o %FROMHOST-IP%.
Konfiguracja przekaźnika pośredniego rsyslog (Relay) w pliku /etc/rsyslog.d/50-relay.conf
root@edge-relay:~# cat << 'EOF' > /etc/rsyslog.d/50-relay.conf # Odbierz z sieci lokalnej oddziału na UDP 514 module(load="imudp") input(type="imudp" port="514") # Przekaż dalej do centrali przez szyfrowany tunel TCP 514 action(type="omfwd" target="10.255.0.1" port="514" protocol="tcp" queue.type="LinkedList" queue.filename="relay_spool" queue.saveonshutdown="on") EOF
Trójwarstwowy model IETF Syslog 1. Device / Generator 📠 Generowanie zdarzenia Tworzy treść MSG Przypisuje Facility/Sev RouterOS, Linux app Syslog IP 2. Syslog Relay 🔄 Przekaźnik pośredni Agreguje oddziały WAN Filtruje i buforuje Lokalny rsyslog / Edge TLS / VPN 3. Syslog Collector 🗄️ Centralny kolektor Trwały zapis na SSD dynaFile routing Główny rsyslog / NMS Translacja nagłówków w architekturze Relay wg RFC 5424: Generator: <134>1 2026-09-29T19:00:01Z branch-router firewall - - [FW@32473 action="drop"] ... Relay: Przesyła oryginalny rekord bez zmiany %HOSTNAME% branch-router lub dodaje relay-SD Collector: Identyfikuje adres fizyczny nadawcy (%FROMHOST-IP%) i nazwę logiczną (%HOSTNAME%)
Slajd 4/46
Kody kategorii źródła (Facility: 0..23) w ujęciu sieciowym
Cel slajdu: Przedstawienie standardowych kodów Facility i ich metodycznego mapowania na urządzenia infrastruktury teleinformatycznej.

Standardy i specyfikacja IETF

Kod kategorii (Facility) informuje serwer logów o tym, jaki podsystem wygenerował zdarzenie. Zakres od 0 do 15 zarezerwowano dla standardowych usług systemu operacyjnego, natomiast kody od 16 do 23 (local0..local7) oddano do dyspozycji administratorom sieci.

  • Kategorie systemowe (0..15): Standardowe źródła uniksowe: kern (0), user (1), daemon (3), auth (4), syslog (5), cron (9), authpriv (10)
  • Kategorie sieciowe (16..23): Pule local0..local7 dedykowane dla routerów MikroTik, zapór ogniowych, macierzy i przełączników
  • Separacja logiczna w rsyslog: Możliwość natychmiastowego skierowania strumienia local0 do pliku /var/log/mikrotik.log
  • Konwencja wdrożeniowa: Utrzymanie jednolitego standardu w całej organizacji (np. local0 = RouterOS, local1 = Cisco, local2 = Wi-Fi)
Generowanie zdarzenia z wybranym kodem Facility: Za pomocą narzędzia logger możemy zasymulować komunikat o statusie błędu z podsystemu uwierzytelniania lub urządzenia sieciowego:
logger -p local0.warn "MikroTik: Wykryto probę skanowania portu WAN".
Testowanie kategorii Facility za pomocą konsoli Linux
root@nms-syslog:~# logger -p local0.warning -t MIKROTIK-TEST "Brama 192.168.1.1 zgłosiła drop na WAN" root@nms-syslog:~# logger -p authpriv.alert -t SSH-AUDIT "Wykryto 10 błędnych prób logowania na konto root" root@nms-syslog:~# tail -n 2 /var/log/syslog 2026-09-29T19:05:12.102+02:00 nms-syslog MIKROTIK-TEST: Brama 192.168.1.1 zgłosiła drop na WAN 2026-09-29T19:05:15.844+02:00 nms-syslog SSH-AUDIT: Wykryto 10 błędnych prób logowania na konto root
Kody kategorii źródła (Facility 0..23) KodNazwa FacilityOpis i przeznaczenie w systemie Linux / Sieci0kernKomunikaty jądra systemu Linux (kernel ring buffer)1userDomyślne komunikaty procesów poziomu użytkownika3daemonDemony systemowe bez dedykowanej kategorii (systemd, snmpd)4 / 10auth / authprivUwierzytelnianie, logowanie SSH, sudo, bezpieczeństwo kont9cronHarmonogram zadań cron i atd16..23local0 .. local7Zarezerwowane dla urządzeń sieciowych (RouterOS, Cisco, Switch) Praktyczny wzorzec inżynierski przydziału kategorii w sieci korporacyjnej: • local0 (16): Routery brzegowe i szkieletowe MikroTik RouterOS (telemetria tras, firewall) • local1 (17): Przełączniki warstwy dystrybucyjnej i dostępowej (stan portów STP, VLAN)
Slajd 5/46
Poziomy ważności zdarzeń (Severity: 0..7) i operatory
Cel slajdu: Przedstawienie 8-stopniowej hierarchii wag zdarzeń oraz reguł filtrowania w języku konfiguracyjnym.

Standardy i specyfikacja IETF

Poziom ważności (Severity) określa stopień krytyczności zarejestrowanego faktu. Standard IETF definiuje poziomy od 0 (Emergency – najwyższy priorytet) do 7 (Debug – najniższy priorytet). Filtry rsyslog domyślnie interpretują poziomy hierarchicznie.

  • Strefa awaryjna (0..3): Emerg, Alert, Crit, Error – wymagają natychmiastowej reakcji inżyniera dyżurnego lub systemu NMS
  • Strefa operacyjna (4..5): Warning, Notice – stabilna praca sieci, ale z symptomami potencjalnych anomalii lub istotnych zmian
  • Strefa telemetryczna (6..7): Info, Debug – wysoki wolumen zdarzeń generowany podczas normalnej pracy i sesji diagnostycznych
  • Operatory filtrowania: Zapis *.=warning oznacza tylko poziom 4; *.warning oznacza poziomy 0..4; zapis *.*;*.!=info rejestruje wszystko oprócz samego poziomu informacyjnego (pojedynczy wykrzyknik odrzuca poziom i wszystkie wyższe)
Zasada filtrowania szumu: Włączenie poziomu debug (7) na routerze brzegowym w sieci korporacyjnej generuje tysiące pakietów na sekundę. W środowisku produkcyjnym reguły telemetryczne powinny domyślnie rejestrować poziom info (6) i wyższe, a debug powinien być aktywowany wyłącznie doraźnie podczas analizy problemu.
Sprawdzenie poziomów istotności w bieżącym pliku logów serwera
root@nms-syslog:~# awk '{print $5}' /var/log/syslog | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 5 1420 systemd 890 kernel 312 rsyslogd 145 sshd 48 CRON root@nms-syslog:~# grep -i "error\|crit\|alert" /var/log/syslog | wc -l 14
Hierarchia poziomów istotności (Severity 0..7) PoziomNazwa SeverityWagaPrzykładowe zdarzenie w sieci LAN0Emergency (emerg)System niestabilnyAwaria zasilacza UPS, zatrzymanie jądra routera1Alert (alert)Wymaga natychmiastowej akcjiWykrycie ataku DoS, naruszenie integralności bazy2Critical (crit)Warunki krytyczneAwaria głównego łącza światłowodowego WAN3Error (err)Błędy operacyjneBłąd zapisu na dysku, odrzucenie reguły BGP4Warning (warning)OstrzeżeniaWykorzystanie pamięci RAM > 90%, Link Flap5Notice (notice)Zdarzenia normalne istotneZmiana stanu interfejsu (Link UP), start usługi6Informational (info)Informacje telemetrycznePrzydział dzierżawy DHCP, poprawne logowanie WinBox7Debug (debug)Szczegóły diagnostyczneZrzuty pakietów routingu OSPF, stan gniazd TCP Zasada inkluzywności filtrów w rsyslog: Filtr *.warning przechwytuje poziom warning (4) oraz wszystkie poważniejsze: error (3), crit (2), alert (1) i emerg (0).
Slajd 6/46
Matematyka nagłówka PRI i analiza surowej ramki pakietu
Cel slajdu: Opanowanie algorytmu kodowania i dekodowania wartości numerycznej PRI w surowych pakietach sieciowych.

Standardy i specyfikacja IETF

Na początku każdego pakietu Syslog przesyłana jest liczba całkowita ujęta w nawiasy ostrokątne, np. <134>. Wartość ta (Priority Value) jest jednobajtowym upakowaniem dwóch kluczowych parametrów: Facility i Severity.

  • Wzór kodowania: PRI = (Facility × 8) + Severity. Ponieważ 8 to 2^3, operacja odpowiada przesunięciu bitowemu (Facility << 3) | Severity
  • Algorytm dekodowania: Facility = PRI / 8 (dzielenie całkowite); Severity = PRI % 8 (reszta z dzielenia / modulo)
  • Przykład dekodowania <189>: 189 / 8 = 23 (kategoria local7); 189 % 8 = 5 (poziom notice)
  • Pozycja w ramce: Wartość PRI musi znajdować się na samym początku ładunku UDP/TCP (od bajtu 0)
Weryfikacja nagłówka PRI w surowym zrzucie tcpdump: Podgląd pierwszych bajtów pakietu UDP odebranego na serwerze z routera MikroTik ujawnia ciąg znaków ASCII <134>, co jednoznacznie wskazuje na kategorię local0 i ważność info.
Przechwytywanie i dekodowanie surowych pakietów Syslog na serwerze
root@nms-syslog:~# tcpdump -i eth0 -nn -A -s0 -c 1 "udp port 514" tcpdump: verbose output suppressed, sub-sample size 1 listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 19:10:04.812344 IP 192.168.1.1.41285 > 192.168.1.100.514: UDP, length 118 E..r..@.@.....0...d..."...J.<134>1 2026-09-29T19:10:04+02:00 MikroTik-GW firewall,info DROP_WAN: in:ether1 out:(unknown 0), src-mac 00:11:22:33:44:55, proto TCP, 203.0.113.50:44123->192.168.1.1:22, len 60 1 packet captured, 1 packet received by filter, 0 packets dropped by kernel
Matematyka nagłówka PRI WZÓR MATEMATYCZNY POLA PRIORYTETU (PRI) PRI = (Facility × 8) + Severity Przykład 1: RouterOS local0.info Facility: local0 = 16 Severity: info = 6 PRI = (16 × 8) + 6 PRI = 128 + 6 = 134 Nagłówek ramki: <134> Przykład 2: Linux authpriv.alert Facility: authpriv = 10 Severity: alert = 1 PRI = (10 × 8) + 1 PRI = 80 + 1 = 81 Nagłówek ramki: <81>
Slajd 7/46
Anatomia formatów: BSD Syslog (RFC 3164) vs IETF Syslog (RFC 5424)
Cel slajdu: Zrozumienie technicznych różnic pomiędzy historycznym formatem BSD a współczesnym standardem IETF.

Standardy i specyfikacja IETF

Przez dekady standardem de facto był format BSD opisany informacyjnie w RFC 3164. W 2009 roku organizacja IETF opublikowała standard RFC 5424, usuwający fundamentalne wady poprzednika, takie jak brak roku w dacie czy brak mikrosekund.

  • Format RFC 3164 (Legacy): Struktura: <PRI>TIMESTAMP HOSTNAME TAG: MSG. Długość bufora do 1024 bajtów. Brak strefy czasowej
  • Format RFC 5424 (Standard): Struktura: <PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID STRUCTURED-DATA MSG
  • Precyzja czasu ISO 8601: Format 2026-09-29T19:15:00.123456+02:00 eliminuje niejednoznaczności stref czasowych w logach międzynarodowych
  • Dane ustrukturyzowane (SD): Pola [exampleSDID@32473 iut="3" eventSource="firewall"] pozwalają silnikom NMS na parsowanie bez Regex
Zalecenie konfiguracyjne dla MikroTik RouterOS: W akcjach zdalnego logowania RouterOS zawsze ustawiaj opcję bsd-syslog=no. Ustawienie to wymusza pełną zgodność z formatem RFC 5424 i przekazuje mikrosekundowy znacznik czasu oraz pełny nagłówek urządzenia.
Porównanie nagłówków obu standardów w surowym pliku konfiguracyjnym rsyslog
# Wymuszenie formatu RFC 5424 w RainerScript dla pliku wyjściowego template(name="RSYSLOG_SyslogProtocol23Format" type="string" string="<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n") # Domyślny przestarzały format RFC 3164 (niezalecany w nowych wdrożeniach) template(name="RSYSLOG_TraditionalFileFormat" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n")
Porównanie RFC 3164 vs RFC 5424 RFC 3164: Format BSD Syslog (Przestarzały standard z 2001 r.) <34>Oct 11 22:14:15 host-pc su: 'su root' failed for user on /dev/pts/1 • Brak roku w dacie (ryzyko błędów przy przełomie roku), brak strefy czasowej • Brak mikrosekund, maksymalna długość ograniczona do 1024 bajtów, brak UTF-8 RFC 5424: Format IETF Syslog (Nowoczesny standard przemysłowy z 2009 r.) <134>1 2026-09-29T19:15:00.123456+02:00 MikroTik-GW firewall 1420 ID47 [meta@32473 if="ether1"] DROP_WAN Cechy RFC 5424: Pełny znacznik czasu ISO 8601 ze strefą (+02:00) i mikrosekundami Struktury SD-ELEMENT: Dane ustrukturyzowane [klucz="wartość"] łatwe do indeksowania Wsparcie dla UTF-8: Poprawne kodowanie znaków narodowych i brak sztywnego limitu 1024B
Slajd 8/46
Warstwy transportowe: UDP 514 vs TCP 514 vs TLS 6514 vs RELP
Cel slajdu: Dobór optymalnego protokołu transportowego w zależności od medium sieciowego, urządzeń i wymagań bezpieczeństwa.

Standardy i specyfikacja IETF

Wybór protokołu transportowego determinuje niezawodność i bezpieczeństwo telemetrii. Każde z dostępnych rozwiązań charakteryzuje się innym kompromisem pomiędzy wydajnością, narzutem sieciowym a pewnością dostarczenia.

  • Protokół UDP 514: Brak potwierdzeń i nawiązywania połączenia. Jeśli bufor kolektora jest pełny, pakiety są bezpowrotnie tracone
  • Protokół TCP 514: Niezawodne przesyłanie strumieniowe z kontrolą przepływu. Serwer zwalnia nadawcę w razie braku zasobów
  • Protokół TLS 6514 (RFC 5425): Bezpieczny kanał szyfrowany kluczami asymetrycznymi. Gwarantuje poufność i chroni przed fałszowaniem logów
  • Protokół RELP: Reliable Event Logging Protocol – autorski protokół rsyslog potwierdzający zapisanie rekordu na dysku fizycznym
Dlaczego RouterOS nie korzysta z TLS Syslog natywnie? Większość sprzętowych routerów sieciowych implementuje lekki stos UDP ze względu na minimalne zapotrzebowanie na moc procesora. Aby bezpiecznie przesyłać logi z MikroTik przez Internet, router zestawia tunel VPN (WireGuard lub IPsec) do serwera i wewnątrz tunelu przesyła pakiety UDP 514.
Weryfikacja strat w buforach gniazda UDP w systemie Linux
root@nms-syslog:~# netstat -su | grep -E "packet receive errors|receive buffer errors" 0 packet receive errors 0 receive buffer errors # Jeśli licznik błędów rośnie, należy zwiększyć rmem_max w /etc/sysctl.conf root@nms-syslog:~# sysctl -w net.core.rmem_max=16777216 net.core.rmem_max = 16777216 # 16 MB bufora pamięci dla gniazd UDP
Warstwy transportowe w telemetrii Syslog ProtokółPortZaletyWady i ograniczeniaZastosowanie w sieciUDP514Brak narzutu sesji, działa na każdym switchu i routerzePodatny na straty przy zatorach, brak szyfrowaniaRouterOS, Cisco, urządzenia brzegowe LANTCP514Gwarancja dostarczenia (retransmisje), brak stratNarzut 3-way handshake, zjawisko HoL blockingSerwery i stacje robocze LinuxTLS (RFC 5425)6514Szyfrowanie AES, uwierzytelnianie x509 (mTLS)Wymaga zarządzania infrastrukturą PKIPrzesyłanie logów przez niezaufany Internet/WANRELP20514Brak utraty danych nawet przy restarcie rsyslogStandard dedykowany dla ekosystemu rsyslogKlastry serwerów rsyslog i węzły krytyczne Architektoniczna zasada doboru medium transportowego: 1. Wewnątrz zaufanej podsieci LAN dla routerów: UDP 514 (lekki, wydajny, natywny dla RouterOS) 2. Dla serwerów Linux i maszyn wirtualnych: TCP 514 lub TLS 6514 (odporność na zatory i brak utraty danych)
Slajd 9/46
Przygotowanie serwera Linux: instalacja i uprawnienia
Cel slajdu: Instalacja pakietu rsyslog, zrozumienie modularnej struktury plików oraz konfiguracja uprawnień systemowych.

Budowa serwera rsyslog od zera

Demon rsyslog (Rocket-fast System for Log Processing) jest domyślnym menedżerem logów w większości dystrybucji Linux. Przygotowanie serwera centralnego rozpoczynamy od upewnienia się, że pakiet jest zainstalowany i poprawnie zintegrowany z systemd.

  • Pakiety w dystrybucjach: Debian/Ubuntu: apt install rsyslog; RHEL/Rocky Linux: dnf install rsyslog
  • Struktura /etc/rsyslog.d/: Pliki konfiguracyjne ładowane są w kolejności alfanumerycznej. Prefiksy liczbowe (10-, 20-, 50-) definiują kolejność reguł
  • Użytkownik demoniczny: W Debianie proces rsyslog zrzuca uprawnienia roota i działa jako użytkownik syslog w grupie adm
  • Katalog magazynu zdalnego: Tworzymy dedykowany katalog /var/log/remote/ z prawami 0750 i własnością syslog:adm
Izolacja magazynu na odrębnym wolumenie: W środowiskach produkcyjnych katalog /var/log/remote/ powinien być zamontowany na dedykowanej partycji dyskowej lub wolumenie LVM. Chroni to główny system plików (/) serwera przed przepełnieniem w razie zmasowanego ataku logującego.
Instalacja rsyslog i przygotowanie katalogu magazynu zdalnego
root@nms-syslog:~# apt update && apt install -y rsyslog rsyslog is already the newest version (8.2302.0-1ubuntu4). root@nms-syslog:~# mkdir -p /var/log/remote root@nms-syslog:~# chown -R syslog:adm /var/log/remote root@nms-syslog:~# chmod 750 /var/log/remote root@nms-syslog:~# ls -ld /var/log/remote drwxr-x--- 2 syslog adm 4096 Sep 29 19:20 /var/log/remote/
Instalacja i struktura katalogów rsyslog # Struktura modularna /etc/rsyslog.d/ /etc/rsyslog.conf # Główny plik konfiguracyjny (globalne dyrektywy) /etc/rsyslog.d/10-inputs.conf # Moduły sieciowe imudp i imtcp (gniazda 514) /etc/rsyslog.d/20-remote.conf # Szablony dynaFile i ruleset dla zdalnych maszyn /etc/rsyslog.d/50-default.conf # Domyślne reguły dla logów lokalnych serwera Uprawnienia i tożsamość procesu demona rsyslog: • Konto użytkownika: syslog (Debian/Ubuntu) lub root (RHEL/CentOS) • Główna grupa uprawnień: adm (dostęp audytorów bez praw roota) • Prawa katalogu magazynu: 0750 (drwxr-x---) zapobiegają odczytowi przez nieuprawnionych • Prawa plików dziennika: 0640 (-rw-r-----) z prawem odczytu dla grupy adm
Slajd 10/46
Zabezpieczenie sieciowe serwera: UFW i Firewalld
Cel slajdu: Prawidłowa konfiguracja zapory sieciowej na serwerze logów ograniczająca dostęp wyłącznie do zaufanych podsieci.

Budowa serwera rsyslog od zera

Protokół UDP nie posiada mechanizmu handshake ani weryfikacji tożsamości nadawcy. Otwarcie portu 514 na świat pozwala każdemu użytkownikowi Internetu na wstrzykiwanie sfałszowanych wpisów lub przeprowadzenie ataku odmowy usługi (DoS) na dysk serwera.

  • Zasada białej listy (Whitelisting): Dostęp do portów 514 UDP/TCP powinien być otwarty wyłącznie ze znanych adresów IP routerów i podsieci serwerowych
  • Reguły UFW (Ubuntu/Debian): Jawne definiowanie źródła: ufw allow from 192.168.1.0/24 to any port 514 proto udp
  • Strefy Firewalld (RHEL/Rocky): Przypisanie dedykowanego interfejsu sieciowego do strefy 'internal' lub 'trusted' i otwarcie portu 514
  • Izolacja fizyczna/VLAN: Najbezpieczniejszym modelem jest skierowanie ruchu logów do odrębnej karty sieciowej serwera wpiętej w Management VLAN
Zagadnienie IP Spoofingu w UDP: Pakiety UDP można łatwo sfingować, podmieniając adres IP źródła w nagłówku IP. Dlatego w krytycznych środowiskach przełączniki dostępowe muszą mieć aktywną funkcję IP Source Guard oraz DHCP Snooping, co fizycznie uniemożliwia nadawanie pakietów z obcym IP na poziomie portu switcha.
Konfiguracja i weryfikacja reguł zapory ogniowej UFW
root@nms-syslog:~# ufw allow from 192.168.1.0/24 to any port 514 proto udp comment "Syslog MikroTik UDP" Rule added root@nms-syslog:~# ufw allow from 192.168.1.0/24 to any port 514 proto tcp comment "Syslog Linux TCP" Rule added root@nms-syslog:~# ufw status numbered | grep 514 [ 4] 514/udp ALLOW IN 192.168.1.0/24 # Syslog MikroTik UDP [ 5] 514/tcp ALLOW IN 192.168.1.0/24 # Syslog Linux TCP
Zabezpieczenie portów zapory UFW Publiczny WAN (0.0.0.0/0) ❌ Porty zablokowane Brak nasłuchu publicznego Ochrona przed spoofingiem Reguła Drop WAN Zapora Linux UFW / nftables DROP ALLOW Zaufany Management VLAN ✅ 192.168.1.0/24 & 10.10.99.0/24 Zezwolony UDP 514 (RouterOS) Zezwolony TCP 514 (Linux) Zezwolony TCP 6514 (TLS) Reguły zapory UFW dla serwera telemetrii (Debian / Ubuntu): $ sudo ufw allow from 192.168.1.0/24 to any port 514 proto udp comment "Syslog UDP RouterOS" $ sudo ufw allow from 192.168.1.0/24 to any port 514 proto tcp comment "Syslog TCP Linux stacje" $ sudo ufw allow from 10.10.99.0/24 to any port 6514 proto tcp comment "Syslog TLS WAN VPN" $ sudo ufw status verbose | grep 514 # Weryfikacja aktywnych uprawnień
Slajd 11/46
Ewolucja składni: RainerScript v8+ vs dyrektywy legacy ($)
Cel slajdu: Przedstawienie przewagi nowoczesnej składni obiektowo-blokowej RainerScript nad przestarzałym formatem dyrektyw $.

Budowa serwera rsyslog od zera

W Internecie wciąż można znaleźć wiele przestarzałych poradników wykorzystujących historyczną składnię dyrektyw dolarowych ($ModLoad, $ActionQueueType). Oficjalna dokumentacja projektu rsyslog uznaje format ten za przestarzały (deprecated) i zaleca stosowanie wyłącznie języka RainerScript.

  • Problem składni legacy ($): Dyrektywy $ modyfikują globalny stan procesora. Kolejność wpisów w pliku decyduje o zachowaniu, co prowadzi do trudnych do wykrycia błędów
  • Zalety RainerScript: Czysta struktura blokowa module(), input(), template(), action(), jawne przekazywanie parametrów w nawiasach
  • Instrukcje sterujące: Wsparcie dla pełnych bloków logicznych: if $fromhost-ip == '192.168.1.1' then { ... } else { ... }
  • Wydajność parsera: Składnia RainerScript jest kompilowana przez wewnętrzny optymalizator rsyslog do wydajnego kodu bajtowego
Dlaczego należy unikać mieszania stylów? Łączenie w jednym pliku starego zapisu $ActionFileDefaultTemplate z nowym blokiem action(type="omfile") może wywołać nieoczekiwane zachowanie demona, w którym parametry globalne przesłaniają jawne definicje akcji. W całym poradniku stosujemy w 100% czysty RainerScript.
Wzorzec składniowy RainerScript w nowoczesnym pliku konfiguracyjnym
# Deklaracja modułu wejściowego z parametrami module(load="imtcp" StreamDriver.AuthMode="anon") # Definicja gniazda nasłuchującego powiązanego z regułami input(type="imtcp" port="514" ruleset="remote_network") # Warunkowe przetwarzanie i routing zdarzeń if ($syslogseverity <= 3) then { action(type="omfile" file="/var/log/critical_all.log") }
Ewolucja składni konfiguracyjnej PRZESTARZAŁA SKŁADNIA LEGACY ($) – UNIKAJ JEJ W NOWYCH PROJEKTACH! $ModLoad imudp $UDPServerRun 514 $template DynFile,"/var/log/remote/%FROMHOST-IP%/syslog.log" *.* ?DynFile • Błędy pozycyjne, brak jawnych zasięgów zmiennych, nieczytelne dyrektywy NOWOCZESNA SKŁADNIA RAINERSCRIPT V8+ – STANDARD BRANŻOWY module(load="imudp") input(type="imudp" port="514") template(name="DynFile" type="string" string="/var/log/remote/%FROMHOST-IP%/syslog.log") action(type="omfile" dynaFile="DynFile") • Pełna kontrola blokowa, czytelne parametry nazwane, instrukcje warunkowe if/then/else
Slajd 12/46
Aktywacja nasłuchu UDP/TCP 514 w 10-network-inputs.conf
Cel slajdu: Uruchomienie modułów imudp i imtcp oraz powiązanie procesu rsyslog z portami sieciowymi 514.

Budowa serwera rsyslog od zera

Domyślna instalacja rsyslog nasłuchuje wyłącznie na lokalnym gnieździe uniksowym /dev/log. Aby serwer stał się centralnym kolektorem telemetrycznym, musimy załadować moduły sieciowe imudp (Input Module UDP) oraz imtcp (Input Module TCP).

  • Dedykowany plik konfiguracyjny: Tworzymy plik /etc/rsyslog.d/10-network-inputs.conf, co oddziela definicję gniazd od logiki routingu plików
  • Moduł imudp: module(load="imudp") oraz input(type="imudp" port="514") – obsługa urządzeń MikroTik i switchy
  • Moduł imtcp: module(load="imtcp") oraz input(type="imtcp" port="514") – niezawodny strumień dla stacji roboczych Linux
  • Ograniczenie do interfejsu: Opcjonalny parametr address="192.168.1.100" wiąże nasłuch z konkretnym adresem IP zamiast 0.0.0.0
Wiązanie z dedykowanym adresem IP: Jeśli serwer posiada kilka kart sieciowych, zaleca się ograniczenie nasłuchu wyłącznie do adresu w podsieci zarządzającej:
input(type="imudp" port="514" address="192.168.1.100")
input(type="imtcp" port="514" address="192.168.1.100").
Tworzenie pliku wejść sieciowych i weryfikacja gniazd nasłuchujących
root@nms-syslog:~# cat << 'EOF' > /etc/rsyslog.d/10-network-inputs.conf # Odbior UDP dla MikroTik RouterOS module(load="imudp") input(type="imudp" port="514") # Odbior TCP dla stacji roboczych Linux module(load="imtcp") input(type="imtcp" port="514") EOF root@nms-syslog:~# systemctl restart rsyslog root@nms-syslog:~# ss -tulpn | grep 514 udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1540,fd=6)) tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1540,fd=7))
Aktywacja nasłuchu UDP/TCP 514 # Plik: /etc/rsyslog.d/10-network-inputs.conf # 1. Moduł UDP dla routerów MikroTik i przełączników module(load="imudp") input(type="imudp" port="514" address="0.0.0.0") # 2. Moduł TCP dla serwerów i stacji roboczych Linux module(load="imtcp") input(type="imtcp" port="514" address="0.0.0.0") Weryfikacja gniazd nasłuchujących w systemie Linux (ss -tulpn): udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1420,fd=6)) tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1420,fd=7)) Gniazdo UDP odbiera pakiety z RouterOS; gniazdo TCP czeka na połączenia stacji roboczych.
Slajd 13/46
Mechanizm szablonów (Templates) i dynamicznych ścieżek dynaFile
Cel slajdu: Zrozumienie działania szablonów RainerScript i zmiennych właściwości (properties) używanych do generowania ścieżek.

Budowa serwera rsyslog od zera

Szablony (Templates) to jedna z najpotężniejszych funkcji demona rsyslog. Pozwalają one na formatowanie wyglądu komunikatów wyjściowych oraz dynamiczne wyliczanie ścieżek plików docelowych (tzw. dynaFile) na podstawie danych wyciągniętych z przetwarzanego pakietu.

  • Koncepcja dynaFile: Szablon typu string zwracający pełną ścieżkę do pliku na dysku. Różne komunikaty mogą trafić do różnych plików
  • Automatyczne tworzenie katalogów: Rsyslog automatycznie tworzy brakujące podkatalogi z uprawnieniami określonymi w konfiguracji
  • Właściwość %FROMHOST-IP%: Zawiera zweryfikowany adres IP stacji roboczej lub routera. Uniemożliwia zatrucie ścieżki (Path Traversal)
  • Właściwości czasowe: %$YEAR%, %$MONTH%, %$DAY% pozwalają na codzienną separację logów bez zewnętrznych narzędzi rotujących
Różnica między parametrem 'file' a 'dynaFile': W akcji action(type="omfile") parametr file="/sciezka/stala.log" przyjmuje stałą nazwę pliku, natomiast parametr dynaFile="NazwaSzablonu" przekazuje nazwę szablonu, który dynamicznie oblicza ścieżkę dla każdego napływającego rekordu.
Definicja szablonu dynamicznej ścieżki w RainerScript
# Szablon generujący strukturę: /var/log/remote/<IP_URZADZENIA>/<ROK>-<MIESIAC>-<DZIEN>.log template(name="RemoteHostDaily" type="string" string="/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log") # Akcja omfile wykorzystująca zdefiniowany dynaFile action(type="omfile" dynaFile="RemoteHostDaily" dirCreateMode="0750" fileCreateMode="0640")
Mechanizm szablonów i właściwości rsyslog ANATOMIA SZABLONU DYNAMICZNEGO ŚCIEŻKI (dynaFile) template(name="TmplName" type="string" string="/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log") Zmienna Host / IP %FROMHOST-IP% Adres IP z gniazda Odporny na spoofing %HOSTNAME% Nazwa z nagłówka Może być sfałszowana Zmienne Kalendarzowe %$YEAR% → 2026 %$MONTH% → 09 %$DAY% → 29 Automatyczna rotacja Brak kolizji dat Zmienne Aplikacyjne %PROGRAMNAME% np. sshd, firewall %syslogseverity% Wartość liczbowa (0..7) %syslogseverity-text% Tekst: error, warning
Slajd 14/46
Krok po kroku: Konfiguracja zapisu każdego hosta/PC do osobnego pliku
Cel slajdu: Praktyczna implementacja separacji logów: każda stacja robocza i router otrzymują własny katalog z dziennym podziałem.

Budowa serwera rsyslog od zera

Podstawowy wymóg stawiany centralnemu serwerowi logów to przejrzystość. Administrator nie może szukać incydentów stacji roboczej PC-01 pośród milionów wpisów zapory MikroTik. Rozwiązaniem jest automatyczna kreacja folderów per urządzenie.

  • Tworzenie pliku 20-remote-hosts.conf: Wszystkie reguły dotyczące odbierania telemetrii z obcych maszyn umieszczamy w dedykowanym pliku
  • Szablon RemotePerHost: Ścieżka /var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log izoluje maszyny według ich fizycznego IP
  • Parametry uprawnień: dirCreateMode="0750" oraz fileCreateMode="0640" gwarantują, że nowe katalogi nie będą dostępne dla nieuprawnionych
  • Automatyczna kreacja w locie: Rsyslog sprawdza istnienie folderu w momencie nadejścia pierwszego pakietu i tworzy go automatycznie
Wariant szablonu z nazwą hosta zamiast IP: Jeśli urządzenia mają prawidłowo skonfigurowane unikalne nazwy w nagłówkach RFC 5424, możemy użyć:
string="/var/log/remote/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log"
W środowiskach zaufanych ułatwia to przeglądanie (np. foldery 'router-biuro', 'srv-baza').
Tworzenie pliku /etc/rsyslog.d/20-remote-hosts.conf i test składni
root@nms-syslog:~# cat << 'EOF' > /etc/rsyslog.d/20-remote-hosts.conf # Szablon zapisu per host/IP z podziałem na dni template(name="RemotePerHost" type="string" string="/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log") # Reguła zapisu dla komunikatów sieciowych action(type="omfile" dynaFile="RemotePerHost" dirCreateMode="0750" fileCreateMode="0640") EOF root@nms-syslog:~# rsyslogd -N1 rsyslogd: End of config validation run. No syntax errors found. [SUCCESS]
Zapis per host/IP do osobnego pliku # Plik: /etc/rsyslog.d/20-remote-hosts.conf # 1. Definicja szablonu dedykowanego katalogu per host template(name="RemotePerHost" type="string" string="/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log") # 2. Zastosowanie akcji z prawami dostępu action(type="omfile" dynaFile="RemotePerHost" dirCreateMode="0750" fileCreateMode="0640") Wynikowa struktura katalogów w /var/log/remote/ po podłączeniu urządzeń: /var/log/remote/ ├── 192.168.1.1/ (Brama domyślna MikroTik RouterOS) └── 2026-09-29.log # Wszystkie rekordy z routera z danego dnia └── 192.168.1.150/ (Stacja robocza inżyniera Linux PC-01) └── 2026-09-29.log # Wszystkie rekordy ze stacji roboczej
Slajd 15/46
Krok po kroku: Rozdzielanie logów według poziomów ważności
Cel slajdu: Konfiguracja precyzyjnego sortowania komunikatów wewnątrz katalogu danej stacji roboczej na osobne pliki.

Budowa serwera rsyslog od zera

Zapisywanie wszystkich zdarzeń z maszyny do jednego pliku all.log jest poprawne, ale w sytuacji awarii administrator traci cenny czas na wyłuskiwanie błędów krytycznych. Skonfigurujemy rsyslog tak, aby równolegle zapisywał błędy do pliku critical.log.

  • Plik critical.log: Zawiera zdarzenia o poziomie ważności <= 3 (emerg, alert, crit, err). Pierwsze miejsce kontroli podczas awarii
  • Plik warning.log: Zawiera zdarzenia o poziomie 4 (warning) – symptomatyczne ostrzeżenia o przeciążeniach lub spadkach napięcia
  • Plik auth.log: Filtruje kategorie uwierzytelniania (auth, authpriv.*) – audyt logowań administratorów i nieudanych autoryzacji
  • Plik all.log: Pełne archiwum chronologiczne zawierające wszystkie rekordy (w tym zdarzenia informacyjne i dzierżawy DHCP)
Brak duplikacji pamięciowej: Rsyslog przetwarza rekord w pamięci RAM i przekazuje wskaźnik do rekordu do wielu akcji jednocześnie. Zapis tego samego komunikatu do all.log i critical.log nie powoduje podwójnego narzutu obliczeniowego.
Konfiguracja wielopoziomowego zapisu w pliku /etc/rsyslog.d/20-remote-hosts.conf
# Szablony dynamicznych ścieżek w folderze urządzenia template(name="HostCrit" type="string" string="/var/log/remote/%FROMHOST-IP%/critical.log") template(name="HostWarn" type="string" string="/var/log/remote/%FROMHOST-IP%/warning.log") template(name="HostAuth" type="string" string="/var/log/remote/%FROMHOST-IP%/auth.log") template(name="HostAll" type="string" string="/var/log/remote/%FROMHOST-IP%/all.log") # 1. Zapisz wszystkie logi do archiwum głównego maszyny action(type="omfile" dynaFile="HostAll" dirCreateMode="0750" fileCreateMode="0640") # 2. Jeśli to błąd krytyczny (poziomy 0..3), zapisz również do critical.log if ($syslogseverity <= 3) then { action(type="omfile" dynaFile="HostCrit" dirCreateMode="0750" fileCreateMode="0640") } # 3. Jeśli to kategoria auth/authpriv, zapisz do auth.log if ($syslogfacility-text == 'auth' or $syslogfacility-text == 'authpriv') then { action(type="omfile" dynaFile="HostAuth" dirCreateMode="0750" fileCreateMode="0640") }
Rozdzielanie logów według Severity i Facility # Szablony wielopoziomowe w /etc/rsyslog.d/20-remote-hosts.conf template(name="HostCrit" type="string" string="/var/log/remote/%FROMHOST-IP%/critical.log") template(name="HostWarn" type="string" string="/var/log/remote/%FROMHOST-IP%/warning.log") template(name="HostAll" type="string" string="/var/log/remote/%FROMHOST-IP%/all.log") template(name="HostAuth" type="string" string="/var/log/remote/%FROMHOST-IP%/auth.log") Struktura plików w katalogu urządzenia /var/log/remote/192.168.1.1/: ├── critical.log → Poziomy 0..3 (emerg, alert, crit, error) – natychmiastowe alarmy ├── warning.log → Poziom 4 (warning) – ostrzeżenia dotyczące zasobów i łączy ├── auth.log → Kategorie auth i authpriv (próby logowania, błędne hasła) └── all.log → Kompletny strumień telemetryczny (w tym zdarzenia dhcp i firewall) Audytor weryfikuje critical.log w kilka sekund bez konieczności przeszukiwania gigabajtów zdarzeń ogólnych.
Slajd 16/46
Architektura Ruleset: Izolacja strumienia sieciowego
Cel slajdu: Wdrożenie dedykowanych zestawów reguł (ruleset) w celu odseparowania logów zdalnych od logów systemowych serwera.

Budowa serwera rsyslog od zera

Domyślnie wszystkie wejścia w rsyslog kierowane są do jednego, wspólnego potoku reguł. Bez jawnego podziału na zestawy reguł (rulesets), logi ze stacji roboczych i routera MikroTik trafią równolegle do lokalnego pliku /var/log/syslog serwera, powodując jego błyskawiczne zalanie.

  • Koncepcja Ruleset: Niezależny potok przetwarzania posiadający własne kolejki, szablony i reguły filtrowania
  • Wiązanie gniazda z ruleset: Dyrektywa input(type="imudp" port="514" ruleset="remote_network") natychmiast przekazuje pakiet do dedykowanego toru
  • Czystość /var/log/syslog: Lokalny plik /var/log/syslog rejestruje wyłącznie zdarzenia lokalnego systemu operacyjnego serwera
  • Optymalizacja wątkowa: Każdy ruleset może posiadać dedykowaną kolejkę wątkową, co uniemożliwia zawieszenie systemu przy zatorze sieciowym
Zasada działania bloku ruleset(): Blok ruleset(name="remote_network") { ... } definiuje zamkniętą przestrzeń reguł. Rekordy wpadające do tego bloku wykonują wyłącznie akcje w nim zdefiniowane i nie przechodzą do standardowych plików 50-default.conf.
Konfiguracja wejść sieciowych z parametrem ruleset w /etc/rsyslog.d/10-network-inputs.conf
root@nms-syslog:~# cat << 'EOF' > /etc/rsyslog.d/10-network-inputs.conf module(load="imudp") module(load="imtcp") # Przypisanie gniazd sieciowych do wyizolowanego potoku 'remote_network' input(type="imudp" port="514" ruleset="remote_network") input(type="imtcp" port="514" ruleset="remote_network") EOF
Architektura Ruleset w rsyslog TOR 1: Zdarzenia Lokalne Serwera Źródło: /dev/log (imuxsock, imjournal) Potok: Domyślny zestaw reguł Cel: /var/log/syslog, /var/log/auth.log Zawiera TYLKO procesy lokalnego serwera TOR 2: Zdarzenia Zdalne z Sieci Źródło: Port 514 UDP/TCP (imudp, imtcp) Potok: ruleset(name="remote_network") Cel: /var/log/remote/%FROMHOST-IP%/* Całkowicie wyizolowany zbiór reguł Powiązanie wejść sieciowych z dedykowanym Ruleset w RainerScript: # W pliku 10-network-inputs.conf dodajemy parametr ruleset: input(type="imudp" port="514" ruleset="remote_network") input(type="imtcp" port="514" ruleset="remote_network") Pakiety sieciowe są natychmiast kierowane do bloku ruleset i nigdy nie wchodzą w kontakt z regułami domyślnymi!
Slajd 17/46
Instrukcja stop: Eliminacja duplikacji zdarzeń w /var/log/syslog
Cel slajdu: Zrozumienie mechanizmu kończenia przetwarzania rekordu i trwałej ochrony lokalnych plików serwera.

Budowa serwera rsyslog od zera

W architekturze rsyslog domyślnym zachowaniem po wykonaniu akcji jest przekazanie rekordu do kolejnych reguł w łańcuchu. Instrukcja stop (będąca nowoczesnym odpowiednikiem dawnego znaku & ~) nakazuje silnikowi natychmiastowe przerwanie przetwarzania danego komunikatu.

  • Działanie instrukcji stop: Kończy bieg przetwarzania bieżącego rekordu w danym potoku reguł i zwalnia jego strukturę w pamięci
  • Ochrona plików systemowych: Gwarantuje, że zdarzenia sieciowe z MikroTik i stacji PC nie przenikną do /var/log/syslog, /var/log/messages ani /var/log/auth.log
  • Dawna składnia & ~: W starszych wersjach rsyslog stosowano zapis & ~ po linii akcji. W RainerScript v8+ jest on przestarzały i zastąpiony słowem 'stop'
  • Pozycja w konfiguracji: Instrukcja stop musi znajdować się na samym końcu bloku ruleset, po wykonaniu wszystkich zamierzonych akcji zapisu
Uwaga na kolejność wpisów: Jeśli umieścisz słowo stop przed akcją action(type="omfile"), rsyslog natychmiast porzuci pakiet i plik na dysku w ogóle nie zostanie utworzony! Prawidłowa sekwencja to zawsze: Szablony → Akcje zapisu → stop.
Testowanie obecności obcych wpisów w lokalnym pliku /var/log/syslog
root@nms-syslog:~# tail -n 100 /var/log/syslog | grep -i "MikroTik\|DROP_WAN" # Brak jakichkolwiek wyników oznacza pełną izolację strumieni! # Kod wyjścia 1: Czysto! Logi sieciowe trafiają wyłącznie do /var/log/remote/ root@nms-syslog:~# ls -la /var/log/remote/192.168.1.1/ -rw-r----- 1 syslog adm 284192 Sep 29 19:35 2026-09-29.log Logi routera zapisują się wyłącznie w dedykowanym magazynie!
Mechanizm instrukcji stop w RainerScript # Kompletny plik /etc/rsyslog.d/20-remote-hosts.conf z instrukcją stop ruleset(name="remote_network") { # 1. Zapisz do dedykowanego magazynu dynaFile action(type="omfile" dynaFile="RemotePerHost" dirCreateMode="0750" fileCreateMode="0640") # 2. Bezwzględne zakończenie przetwarzania komunikatu stop } Logika działania instrukcji stop w cyklu życia pakietu: 1. Pakiet wpada do ruleset(name="remote_network") z portu 514 UDP/TCP. 2. Zostaje zapisany na dysku w /var/log/remote/192.168.1.1/2026-09-29.log. 3. Instrukcja stop niszczy strukturę komunikatu w pamięci RAM. ✓ Gwarancja 100%: Żaden obcy pakiet nie trafi do lokalnego /var/log/syslog ani /var/log/messages!
Slajd 18/46
Weryfikacja konfiguracji serwera: rsyslogd -N1 i diagnostyka
Cel slajdu: Opanowanie bezpiecznych procedur walidacji składni przed restartem usługi oraz weryfikacji stanu usługi.

Budowa serwera rsyslog od zera

Zrestartowanie demona rsyslog z błędem składni w pliku konfiguracyjnym skutkuje natychmiastowym zatrzymaniem usługi i utratą wszystkich napływających logów sieciowych. Linux udostępnia wbudowany tryb walidacji rsyslogd -N1.

  • Polecenie rsyslogd -N1: Weryfikuje poprawność leksykalną i gramatyczną wszystkich plików w /etc/rsyslog.conf oraz /etc/rsyslog.d/
  • Kod powrotu $?: Zwrócenie wartości 0 oznacza pełny sukces. Kod różny od 0 oznacza wykrycie błędu i wskazuje numer linii
  • Inspekcja journalctl: journalctl -u rsyslog -f pozwala na bieżąco obserwować komunikaty startowe procesu
  • Weryfikacja gniazd ss: Polecenie ss -tulpn | grep 514 potwierdza, że proces powiązał się z portami UDP i TCP
Nigdy nie restartuj bez testu -N1: Wprowadź żelazną zasadę administracyjną: przed każdym wykonaniem systemctl restart rsyslog zawsze wywołaj rsyslogd -N1. Zabezpiecza to infrastrukturę przed przypadkowym wyłączeniem rejestracji zdarzeń.
Pełna sesja walidacji i uruchomienia centralnego serwera rsyslog
root@nms-syslog:~# rsyslogd -N1 rsyslogd: version 8.2302.0, config validation run... rsyslogd: End of config validation run. No syntax errors found. [SUCCESS] root@nms-syslog:~# echo $? 0 root@nms-syslog:~# systemctl restart rsyslog root@nms-syslog:~# systemctl is-active rsyslog active root@nms-syslog:~# ss -tulpn | grep 514 udp UNCONN 0 0 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1680,fd=6)) tcp LISTEN 0 25 0.0.0.0:514 0.0.0.0:* users:(("rsyslogd",pid=1680,fd=7))
Procedura walidacji rsyslogd -N1 ZŁOTA ZASADA ADMINISTRATORA RSYSLOG rsyslogd -N1 Scenariusz Sukcesu (Kod 0) Parametr: -N1 (weryfikacja poziomu 1) ✓ Brak błędów syntaktycznych ✓ Wszystkie moduły załadowane ✓ Poprawne ścieżki i szablony Można bezpiecznie restartować! Scenariusz Błędu (Kod > 0) ✗ Literówka w nazwie dyrektywy ✗ Brakujący nawias klamrowy } ✗ Niezdefiniowany szablon dynaFile ✗ Błąd uprawnień do katalogu NIE RESTARTUJ! Demon padnie!
Slajd 19/46
Topologia klienta Linux: od /dev/log do modułu omfwd
Cel slajdu: Prześledzenie drogi komunikatu telemetrycznego od aplikacji w przestrzeni użytkownika do gniazda sieciowego.

Konfiguracja zdalnych stacji roboczych Linux

W nowoczesnych systemach Linux architektura rejestrowania zdarzeń łączy binarny dziennik systemd-journald z uniwersalnym demonem rsyslog. Zrozumienie relacji pomiędzy tymi procesami jest kluczem do bezbłędnej konfiguracji klienta sieciowego.

  • Gniazdo /dev/log: Standardowy punkt wejścia dla biblioteki libc (funkcja syslog()). Kompatybilny ze wszystkimi demonami Uniksa
  • Rola systemd-journald: Współczesny menedżer systemd przechwytuje strumienie stdout/stderr usług i zapisuje je w pamięci ulotnej
  • Przekierowanie do rsyslog: Opcja ForwardToSyslog=yes w /etc/systemd/journald.conf przekazuje kopię każdego rekordu do rsyslog
  • Moduł wyjściowy omfwd: Output Module Forwarding – dedykowany komponent rsyslog odpowiedzialny za transmisję pakietów przez sieć IP
Dlaczego nie wysyłać logów bezpośrednio z journald? Demon systemd-journald posiada wprawdzie moduł systemd-journal-upload, lecz wymaga on osobnego serwera z protokołem HTTP/HTTPS. Demon rsyslog zapewnia natywną zgodność ze standardem IETF Syslog, buforowanie dyskowe i bezpośrednią integrację z routerami MikroTik.
Weryfikacja gniazda /dev/log i powiązania z systemd na stacji roboczej
user@PC-01:~$ ls -l /dev/log lrwxrwxrwx 1 root root 28 Sep 29 18:00 /dev/log -> /run/systemd/journal/dev-log user@PC-01:~$ systemctl is-active systemd-journald rsyslog active active
Architektura klienta Linux 1. Aplikacje / Usługi • Demon OpenSSH (sshd) • Zapora UFW / iptables • Polecenie logger / skrypt Zapis do /dev/log Gniazdo 2. systemd-journald • Zapis w /run/log/journal • ForwardToSyslog=yes • Przekazanie do rsyslog Gniazdo systemd-syslog imjournal 3. Klient rsyslog • Filtry selektywne • Kolejka awaryjna • Moduł omfwd (TCP) Wysyłka do sieci TCP 514 # Droga pakietu telemetrycznego ze stacji roboczej do serwera NMS: sshd → /dev/log → systemd-journald → rsyslogd (omfwd) → ETH0 → [LAN 192.168.1.100:514] 1. Usługa sshd rejestruje błędne logowanie i wywołuje syslog(LOG_AUTH|LOG_WARNING, ...) 2. Demon journald indeksuje rekord binarnie i przesyła go do lokalnego gniazda rsyslog 3. Rsyslog sprawdza filtry i modułem omfwd przesyła rekord strumieniem TCP na serwer centralny
Slajd 20/46
Konfiguracja klienta w RainerScript: omfwd przez TCP i UDP
Cel slajdu: Praktyczne wdrożenie konfiguracji przekazywania strumienia zdarzeń ze stacji roboczej do serwera centralnego.

Konfiguracja zdalnych stacji roboczych Linux

Na stacji roboczej lub serwerze aplikacyjnym Linux konfiguracja przesyłania sprowadza się do utworzenia pliku z dyrektywą modułu wyjściowego omfwd. Zalecanym medium dla maszyn linuksowych jest protokół połączeniowy TCP na porcie 514.

  • Plik 99-forward-all.conf: Prefiks 99 gwarantuje, że reguła zostanie przetworzona na samym końcu, po zapisaniu logów lokalnych stacji
  • Parametr target: Wskazuje adres IP lub nazwę FQDN centralnego kolektora rsyslog (192.168.1.100)
  • Parametr protocol="tcp": Wymusza nawiązanie trwałej sesji TCP, zapewniając retransmisję w razie chwilowych zatorów sieciowych
  • Weryfikacja połączenia: Polecenie ss -tan | grep 514 na stacji roboczej potwierdza stan ESTABLISHED dla sesji z serwerem
Zachowanie logów lokalnych na stacji: Zastosowanie dyrektywy action(type="omfwd" ...) bez instrukcji stop powoduje, że logi są jednocześnie zapisywane lokalnie w /var/log/syslog stacji oraz wysyłane przez sieć na serwer centralny.
Wdrożenie pliku przekazywania na stacji roboczej i sprawdzenie sesji TCP
root@PC-01:~# cat << 'EOF' > /etc/rsyslog.d/99-forward-all.conf # Przekazanie wszystkich zdarzeń stacji roboczej na serwer centralny rsyslog action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp") EOF root@PC-01:~# rsyslogd -N1 && systemctl restart rsyslog root@PC-01:~# ss -tan | grep 192.168.1.100:514 ESTAB 0 0 192.168.1.150:48212 192.168.1.100:514
Konfiguracja omfwd klienta Linux # Plik na stacji roboczej: /etc/rsyslog.d/99-forward-all.conf # Nowoczesna składnia RainerScript v8+ (omfwd przez TCP) action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp") Porównanie zapisu RainerScript z zapisem tradycyjnym (Legacy): • Tradycyjny zapis UDP: *.* @192.168.1.100:514 (pojedynczy znak @ oznacza UDP) • Tradycyjny zapis TCP: *.* @@192.168.1.100:514 (podwójny znak @@ oznacza TCP) • Zaleta RainerScript: Czytelność parametrów, jawny protokół i możliwość dodania kolejki awaryjnej ✓ Na stacjach roboczych Linux zawsze preferujemy protokół TCP ze względu na brak strat!
Slajd 21/46
Selektywne filtrowanie na stacji: Ograniczenie wysyłki
Cel slajdu: Optymalizacja pasma sieciowego i zasobów serwera poprzez wstępną selekcję zdarzeń u źródła.

Konfiguracja zdalnych stacji roboczych Linux

W dużych infrastrukturach przesyłanie wszystkich komunikatów ze stacji roboczych (np. każdego zapytania DNS czy uruchomienia zadania cron co minutę) prowadzi do marnotrawstwa pasma sieciowego i przestrzeni dyskowej. Stacja kliencka powinna filtrować zdarzenia u źródła.

  • Filtr *.warning: Przekazuje na serwer wyłącznie anomalie, błędy jądra, awarie dysków i ostrzeżenia usług
  • Filtr auth,authpriv.*: Gwarantuje, że każde logowanie użytkownika, użycie sudo czy próba ataku na SSH trafi do centralnego audytu
  • Wykluczanie kategorii (none): Zapis *.*;cron.none;mail.none zapobiega wysyłaniu rutynowych powiadomień harmonogramu
  • Elastyczność wdrożenia: Możliwość zdefiniowania różnych poziomów dla stacji deweloperskich (tylko błędy) i serwerów bazodanowych (pełen audyt)
Składnia selektorów w rsyslog: Średnik ; oddziela poszczególne reguły selektora. Wyrażenie *.info;mail.none;authpriv.none oznacza: wysyłaj zdarzenia o poziomie info i wyższym z dowolnego źródła, z wyjątkiem poczty i prywatnego podsystemu uwierzytelniania.
Konfiguracja zoptymalizowanego filtra klienta w /etc/rsyslog.d/99-forward-filtered.conf
root@PC-01:~# cat << 'EOF' > /etc/rsyslog.d/99-forward-filtered.conf # Przekazuj ważne zdarzenia: ostrzeżenia, błędy oraz pełny audyt logowania *.warning;auth,authpriv.* action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp") EOF root@PC-01:~# systemctl restart rsyslog Zastosowano filtr: Stacja PC-01 wysyła wyłącznie zdarzenia krytyczne i audyt!
Selektywne filtrowanie zdarzeń u źródła # Plik: /etc/rsyslog.d/99-forward-filtered.conf # 1. Wysyłaj wszystkie zdarzenia od poziomu warning wzwyż *.warning action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp") # 2. Wysyłaj CAŁY podsystem uwierzytelniania (nawet info) auth,authpriv.* action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp") # Hałaśliwe procesy cron i debug zostają na stacji lokalnie! Korzyści inżynierskie z filtrowania u źródła: • Redukcja pasma sieciowego: Eliminacja 80% nieistotnych logów debug/info stacji roboczej • Ochrona dysku serwera: Serwer centralny nie jest zalewany cyklicznymi wpisami CRON co 60 sekund • Zachowanie audytu: Wszystkie logowania SSH, polecenia sudo i błędy trafiają na serwer w 100% ✓ Składnia wykluczająca: *.*;mail.none;cron.none wysyła wszystko oprócz poczty i zadań cron.
Slajd 22/46
Odporność klienta na awarie sieci: Kolejka dyskowo-pamięciowa
Cel slajdu: Zrozumienie mechanizmu buforowania awaryjnego (Disk-Assisted Memory Queue) zapobiegającego utracie danych.

Konfiguracja zdalnych stacji roboczych Linux

Gdy serwer rsyslog ulegnie restartowi lub pracom konserwacyjnym, stacja robocza próbująca wysyłać pakiety przez TCP napotyka na zamknięte gniazdo. Domyślnie rsyslog zablokuje kolejkę pamięciową, co może doprowadzić do zawieszenia demonów systemowych piszących do /dev/log.

  • Architektura hybrydowa: Kolejka typu LinkedList w pamięci RAM wspomagana awaryjnym zrzutem na dysk (Disk-Assisted)
  • Pojemność kolejki RAM: Standardowo mieści kilka tysięcy komunikatów. Gdy próg zostanie przekroczony, demon uruchamia wątek zapisu dyskowego
  • Katalog bufora /var/spool/rsyslog: Pliki fwd_spool.* przechowują wiadomości w kolejności nadejścia aż do momentu powrotu łączności
  • Parametr timeoutenqueue="0": Gwarantuje, że aplikacje lokalne nigdy nie będą blokowane (natychmiastowe przyjęcie do bufora lub zrzut)
Zabezpieczenie przed wyłączeniem stacji (SaveOnShutdown): Parametr queue.saveonshutdown="on" nakazuje demonowi rsyslog zrzucenie całej zawartości kolejki RAM na dysk podczas zamykania systemu (reboot/shutdown). Zapobiega to utracie logów w trakcie restartu stacji roboczej.
Weryfikacja zachowania bufora dyskowego podczas symulowanej awarii serwera
root@PC-01:~# ls -la /var/spool/rsyslog/ total 8 drwxr-x--- 2 syslog adm 4096 Sep 29 19:40 . drwxr-xr-x 8 root root 4096 Sep 29 18:00 .. # Podczas awarii sieci pojawiają się pliki zrzutu: root@PC-01:~# ls -la /var/spool/rsyslog/ -rw------- 1 syslog adm 1048576 Sep 29 19:42 fwd_spool.00000001 # Rsyslog bezpiecznie buforuje logi na dysku lokalnym!
Kolejka dyskowo-pamięciowa LinkedList POZIOM 1: Pamięć RAM (LinkedList) • Szybka kolejka dynamiczna • Działa bez opóźnień I/O • Rozmiar np. 10 000 rekordów Standardowy bufor roboczy POZIOM 2: Dysk SSD (/var/spool) • Aktywowany po zapełnieniu RAM • Pliki bufora: fwd_spool.* • Limit np. 1 GB przestrzeni Ochrona przed awarią łącza Cykl życia kolejki Disk-Assisted Memory Queue: 1. Praca normalna (Sieć UP): Logi trafiają do RAM i są natychmiast wysyłane przez TCP na serwer. 2. Awaria serwera (Sieć DOWN): TCP nie odpowiada. RAM zapełnia się → rsyslog zrzuca logi do /var/spool/. 3. Wznowienie serwera (Sieć UP): Rsyslog automatycznie opróżnia pliki bufora dyskowego do sieci! ✓ Żaden rekord nie ginie, a aplikacje lokalne nie ulegają zawieszeniu!
Slajd 23/46
Wdrożenie kolejki awaryjnej na kliencie krok po kroku
Cel slajdu: Praktyczna implementacja odpornego mechanizmu kolejkowania omfwd w pliku konfiguracyjnym klienta.

Konfiguracja zdalnych stacji roboczych Linux

Składamy wszystkie elementy wiedzy w jeden produkcyjny blok konfiguracyjny. Utworzymy katalog bufora z odpowiednimi uprawnieniami oraz wdrożymy pełną definicję akcji omfwd w pliku /etc/rsyslog.d/99-forward-ha.conf.

  • Przygotowanie katalogu bufora: mkdir -p /var/spool/rsyslog && chown -R syslog:adm /var/spool/rsyslog && chmod 700 /var/spool/rsyslog
  • Parametr resumeRetryCount="-1": Wartość -1 nakazuje rsyslog ponawianie prób połączenia w nieskończoność bez porzucania akcji
  • Zabezpieczenie limitu dyskowego: queue.maxdiskspace="1g" gwarantuje, że bufor awaryjny nie zajmie więcej niż 1 GB przestrzeni dyskowej
  • Format pliku bufora: Rsyslog dzieli bufor dyskowy na części o rozmiarze 10 MB (fwd_spool.00000001, fwd_spool.00000002 itd.)
Uprawnienia do katalogu spool: Jeśli katalog /var/spool/rsyslog będzie należał do roota i nie będzie miał praw zapisu dla użytkownika syslog, mechanizm bufora dyskowego nie zadziała i rsyslog zgłosi błąd w journalctl.
Wdrożenie kompletnego pliku 99-forward-ha.conf na stacji roboczej
root@PC-01:~# mkdir -p /var/spool/rsyslog root@PC-01:~# chown -R syslog:adm /var/spool/rsyslog root@PC-01:~# chmod 700 /var/spool/rsyslog root@PC-01:~# cat << 'EOF' > /etc/rsyslog.d/99-forward-ha.conf action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp" action.resumeRetryCount="-1" queue.type="LinkedList" queue.filename="fwd_spool" queue.spoolDirectory="/var/spool/rsyslog" queue.maxdiskspace="1g" queue.saveonshutdown="on") EOF root@PC-01:~# rsyslogd -N1 && systemctl restart rsyslog Klient skonfigurowany w trybie wysokiej dostępności (HA) z buforem dyskowym!
Wdrożenie bufora awaryjnego klienta # Kompletna produkcyjna konfiguracja klienta w /etc/rsyslog.d/99-forward-ha.conf action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp" action.resumeRetryCount="-1" # Wznawiaj próby w nieskończoność queue.type="LinkedList" # Pamięć dynamiczna RAM queue.filename="fwd_spool" # Aktywacja bufora dyskowego queue.spoolDirectory="/var/spool/rsyslog" queue.maxdiskspace="1g" queue.saveonshutdown="on") Kluczowe parametry odpornościowe akcji omfwd: • action.resumeRetryCount="-1": Nie porzucaj serwera po 10 próbach – ponawiaj próby w nieskończoność • queue.maxdiskspace="1g": Twardy limit dyskowy chroniący stację roboczą przed przepełnieniem dysku • queue.saveonshutdown="on": Zapis bufora RAM na dysk w locie podczas restartu maszyny ✓ Wzorzec inżynierski: Bezpieczna stacja robocza odporna na awarie infrastruktury sieciowej.
Slajd 24/46
Integracja systemd-journald z demonem rsyslog
Cel slajdu: Prawidłowa konfiguracja przekazywania zdarzeń z binarnego dziennika systemd do rsyslog na stacjach roboczych.

Konfiguracja zdalnych stacji roboczych Linux

W nowoczesnych dystrybucjach Linux menedżer systemd zarządza procesami i loguje ich komunikaty przez systemd-journald. Aby te zdarzenia mogły zostać wysłane do sieci przez moduł omfwd, journald musi przekazywać je do demona rsyslog.

  • Plik /etc/systemd/journald.conf: Kluczowa dyrektywa ForwardToSyslog=yes nakazuje journald przesyłanie kopii do gniazda /run/systemd/journal/syslog
  • Moduł imuxsock: Domyślny moduł rsyslog odbierający tradycyjne pakiety z gniazda unixowego z minimalnym narzutem procesora
  • Moduł imjournal (Opcjonalny): Czyta bezpośrednio z binarnej bazy journald. Umożliwia wyciąganie zaawansowanych metadanych (_SYSTEMD_UNIT, _EXE)
  • Zalecenie produkcyjne: W środowiskach o dużym natężeniu logów preferowany jest imuxsock ze względu na wyższą wydajność i brak blokowania bazy journald
Dlaczego niektóre usługi nie trafiały do Syslog? Jeśli w pliku journald.conf opcja ForwardToSyslog jest zakomentowana lub ustawiona na no, komunikaty generowane przez usługi piszące wyłącznie do standardowego wyjścia (stdout) zostaną uwięzione w binarnej bazie journald i nigdy nie trafią na serwer centralny!
Konfiguracja i restart usługi systemd-journald
root@PC-01:~# sed -i 's/^#ForwardToSyslog=.*/ForwardToSyslog=yes/' /etc/systemd/journald.conf root@PC-01:~# systemctl restart systemd-journald root@PC-01:~# systemctl is-active systemd-journald active # Usługa journald przekazuje teraz 100% zdarzeń do rsyslog
Integracja systemd-journald z rsyslog systemd-journald Plik: /etc/systemd/journald.conf ForwardToSyslog=yes Przekazuje strumień stdout/stderr Gniazdo /run/systemd/journal/syslog Gniazdo rsyslogd (imuxsock / imjournal) Moduł: imuxsock (lekki, szybki) Moduł: imjournal (metadane systemd) Parsuje właściwości i priorytety Wysyła do omfwd (Sieć NMS) Weryfikacja parametrów systemd-journald na stacji roboczej: $ grep -E "^ForwardToSyslog" /etc/systemd/journald.conf ForwardToSyslog=yes # Aktywne przekazywanie do gniazda rsyslog $ journalctl -u ssh.service -f # Podgląd tych samych logów w journald Zarówno journalctl, jak i centralny rsyslog widzą dokładnie te same wpisy usług systemd.
Slajd 25/46
Testowanie wysyłki poleceniem logger z konsoli
Cel slajdu: Praktyczna weryfikacja toru telemetrycznego za pomocą syntetycznych zdarzeń generowanych z wiersza poleceń.

Konfiguracja zdalnych stacji roboczych Linux

Standardowe uniksowe narzędzie logger jest niezastąpionym instrumentem każdego inżyniera sieciowego. Pozwala ono na wygenerowanie dowolnego rekordu o zadanym kodzie Facility i Severity bez konieczności oczekiwania na wystąpienie realnej awarii.

  • Narzędzie CLI logger: Standardowy komponent pakietu bsdutils / util-linux obecny w każdej dystrybucji Linuksa
  • Przełącznik -p: Definiuje parę kategoria.ważność, np. local0.warning, authpriv.alert, kern.crit
  • Przełącznik -t: Nadaje procesowi unikalny identyfikator TAG, ułatwiający korelatorom NMS identyfikację źródła
  • Przełącznik -s: Wypisuje komunikat na standardowe wyjście błędów (stderr) konsoli, umożliwiając podgląd w skryptach
Skrypt automatyzujący testy weryfikacyjne: Możesz utworzyć prosty skrypt Bash wysyłający serię komunikatów o rosnącym poziomie istotności, aby zweryfikować czy serwer poprawnie rozdziela je do warning.log i critical.log.
Generowanie serii testowej poleceniem logger ze stacji roboczej PC-01
user@PC-01:~$ logger -p local0.info -t NMS-AUDIT "KROK 1: Test komunikatu informacyjnego info" user@PC-01:~$ logger -p local0.warning -t NMS-AUDIT "KROK 2: Test komunikatu ostrzegawczego warning" user@PC-01:~$ logger -p local0.crit -t NMS-AUDIT "KROK 3: Test krytycznego błędu critical" user@PC-01:~$ journalctl -t NMS-AUDIT -n 3 --no-pager Sep 29 19:48:01 PC-01 NMS-AUDIT[2104]: KROK 1: Test komunikatu informacyjnego info Sep 29 19:48:03 PC-01 NMS-AUDIT[2105]: KROK 2: Test komunikatu ostrzegawczego warning Sep 29 19:48:05 PC-01 NMS-AUDIT[2106]: KROK 3: Test krytycznego błędu critical
Testowanie telemetrii narzędziem logger # Składnia polecenia logger do testów syntetycznych logger -p <FACILITY>.<SEVERITY> -t <TAG> "TREŚĆ ZDARZENIA" • -p facility.severity: Jawne wskazanie kategorii i poziomu ważności • -t TAG: Etykieta aplikacji (np. NMS-TEST, AUDIT-SSH, FW-SIM) • -s: Opcjonalne jednoczesne wypisanie komunikatu na konsolę stderr Przykłady laboratoryjnych wywołań diagnostycznych: $ logger -p local0.warning -t ROUTER-TEST "Symulacja awarii łącza WAN" $ logger -p auth.alert -t SEC-INCIDENT "Nieautoryzowana próba eskalacji uprawnień" $ logger -p daemon.err -t APP-BACKUP "Błąd zapisu bazy danych na wolumen NFS" Komunikaty trafiają natychmiast do /dev/log → rsyslog → sieć → serwer centralny!
Slajd 26/46
Zaawansowane testy logger: Bezpośrednie wstrzykiwanie sieciowe
Cel slajdu: Opanowanie diagnostyki sieciowej za pomocą bezpośredniej wysyłki pakietów RFC 5424 przez UDP i TCP.

Konfiguracja zdalnych stacji roboczych Linux

Gdy serwer nie rejestruje logów ze stacji roboczej, inżynier musi ustalić, czy problem leży w konfiguracji lokalnego demona rsyslog na stacji, w regułach zapory sieciowej, czy na samym serwerze. Narzędzie logger pozwala na całkowite ominięcie lokalnego rsyslog.

  • Parametr -n <IP>: Kieruje pakiet bezpośrednio do gniazda sieciowego zdalnego serwera z pominięciem /dev/log
  • Wymuszenie protokołu: Przełącznik -T wymusza nawiązanie sesji TCP, z kolei -d (domyślny) wysyła pojedynczy datagram UDP
  • Flaga --rfc5424: Generuje nowoczesną ramkę IETF z pełnym znacznikiem czasu ISO 8601 oraz wersją protokołu
  • Struktury Structured Data: Możliwość dołączenia parametrów --sd-id oraz --sd-param do testowania parserów SIEM
Testowanie portu UDP z konsoli: Ponieważ narzędzie telnet ani standardowy nc nie dają pewności przy UDP, komenda logger -n 192.168.1.100 -P 514 -d "Test UDP" jest najszybszym i najbardziej niezawodnym sposobem zweryfikowania odbioru datagramów UDP.
Bezpośrednie wstrzykiwanie testowego pakietu RFC 5424 przez TCP
user@PC-01:~$ logger -n 192.168.1.100 -P 514 -T --rfc5424=app-name,procid -t TEST-DIRECT "Wstrzyknięcie bezpośrednie przez TCP RFC5424" # Pakiet przesłany bezpośrednio do gniazda TCP serwera 192.168.1.100:514 user@PC-01:~$ logger -n 192.168.1.100 -P 514 -d -p local0.alert -t TEST-UDP "Wstrzyknięcie datagramu UDP 514" # Datagram UDP wysłany do serwera!
Bezpośrednie wstrzykiwanie pakietów logger # Zaawansowane opcje sieciowe narzędzia logger logger -n 192.168.1.100 -P 514 -T --rfc5424 -t SEC-AUDIT "Payload testowy" • -n <IP>: Bezpośredni adres IP serwera (omija lokalnego rsyslog!) • -P 514: Port docelowy (domyślnie 514) • -T / -d: Wymuszenie TCP (-T) lub UDP (-d); --rfc5424 wymusza format IETF Dlaczego bezpośrednie testy sieciowe są kluczowe w diagnostyce? 1. Izolacja problemu: Pozwala sprawdzić czy serwer odbiera pakiety, wykluczając błędy lokalnego rsyslog klienta. 2. Test zapory UFW: Weryfikuje czy port 514 UDP/TCP nie jest blokowany przez switch lub router pośredni. 3. Test parsera RFC 5424: Weryfikuje czy kolektor rsyslog poprawnie rozbija mikrosekundy i dane ustrukturyzowane. ✓ Narzędzie logger z parametrem -n działa jak natychmiastowy próbnik sieciowy!
Slajd 27/46
Weryfikacja odbioru na serwerze: Inspekcja katalogów per host
Cel slajdu: Potwierdzenie prawidłowego działania dynamicznych szablonów na serwerze i podgląd napływających logów.

Konfiguracja zdalnych stacji roboczych Linux

Po wysłaniu pierwszych zdarzeń ze stacji roboczej przechodzimy na konsolę serwera rsyslog. Sprawdzamy, czy demon w locie utworzył katalog odpowiadający adresowi IP stacji (192.168.1.150) oraz czy odpowiednie pliki zostały zasilone rekordami.

  • Polecenie tree /var/log/remote: Błyskawiczny podgląd drzewa katalogów utworzonych przez reguły dynaFile
  • Weryfikacja uprawnień: Katalogi powinny mieć prawa drwxr-x--- (0750) z właścicielem syslog:adm
  • Śledzenie ciągłe tail -f: tail -f /var/log/remote/192.168.1.150/all.log pozwala obserwować napływające pakiety na żywo
  • Kontrola critical.log: Sprawdzenie, czy zdarzenie o poziomie 'crit' trafiło równolegle do pliku critical.log
Podgląd wielu maszyn jednocześnie: Za pomocą narzędzia multitail lub potoku tail -f /var/log/remote/*/*.log administrator może obserwować strumienie ze wszystkich podłączonych maszyn w jednym oknie terminala.
Weryfikacja na serwerze rsyslog po odebraniu zdarzeń ze stacji PC-01
root@nms-syslog:~# ls -la /var/log/remote/192.168.1.150/ total 24 drwxr-x--- 2 syslog adm 4096 Sep 29 19:50 . drwxr-x--- 3 syslog adm 4096 Sep 29 19:45 .. -rw-r----- 1 syslog adm 420 Sep 29 19:50 all.log -rw-r----- 1 syslog adm 142 Sep 29 19:50 critical.log -rw-r----- 1 syslog adm 280 Sep 29 19:50 warning.log root@nms-syslog:~# cat /var/log/remote/192.168.1.150/critical.log 2026-09-29T19:50:05+02:00 PC-01 NMS-AUDIT[2106]: KROK 3: Test krytycznego błędu critical Potwierdzono: Rekord krytyczny trafił do dedykowanego pliku critical.log!
Inspekcja magazynu na serwerze rsyslog # Inspekcja struktury magazynu na serwerze (polecenie tree): /var/log/remote/ ├── 192.168.1.150/ # Folder stacji roboczej PC-01 utworzony automatycznie! ├── all.log # Wszystkie komunikaty stacji roboczej ├── warning.log # Ostrzeżenia i błędy └── critical.log # Błędy krytyczne (poziomy 0..3) Śledzenie napływu zdarzeń w czasie rzeczywistym (tail -f): 2026-09-29T19:50:01+02:00 PC-01 NMS-AUDIT[2104]: KROK 1: Test komunikatu informacyjnego info 2026-09-29T19:50:03+02:00 PC-01 NMS-AUDIT[2105]: KROK 2: Test komunikatu ostrzegawczego warning 2026-09-29T19:50:05+02:00 PC-01 NMS-AUDIT[2106]: KROK 3: Test krytycznego błędu critical ✓ Szablon dynaFile zadziałał bezbłędnie: stacja PC-01 ma własny odizolowany magazyn!
Slajd 28/46
Architektura podsystemu logowania w MikroTik RouterOS
Cel slajdu: Zrozumienie trójwarstwowej struktury logowania w systemie RouterOS: Tematy (Topics), Reguły decyzyjne i Cele (Actions).

Zdalne logowanie w MikroTik RouterOS

Podsystem logowania w MikroTik RouterOS (zarówno w wersji 6, jak i nowoczesnej wersji 7) różni się architektonicznie od klasycznego demona linuksowego. Zamiast sztywnego podziału na Facility i Severity, RouterOS posługuje się elastycznym mechanizmem tematów (Topics) i akcji (Actions).

  • Tematy (Topics): Znaczniki przypisywane do każdego zdarzenia przez jądro i pakiety RouterOS (np. firewall, info, critical, dhcp, ospf)
  • Tabela reguł /system logging: Łączy wybrane kombinacje tematów z konkretną akcją docelową (odpowiednik reguł filtrujących)
  • Miejsca docelowe (Actions): Definiują sposób utrwalenia zdarzenia: pamięć RAM (memory), pamięć masowa (disk), ekran konsoli (echo) lub sieć (remote)
  • Obsługa w RouterOS v6 i v7: Architektura jest w pełni spójna pomiędzy generacjami, z rozszerzeniem v7 o lepsze wsparcie dla IPv6 i FQDN
Wielotematowość zdarzeń w RouterOS: Pojedynczy komunikat w RouterOS może posiadać kilka tematów jednocześnie, np. firewall,info lub system,error,critical. Reguła dopasowuje zdarzenie tylko wtedy, gdy zawiera ono wszystkie tematy wymienione w regule.
Podgląd domyślnej konfiguracji logowania w konsoli RouterOS
[admin@MikroTik-GW] > /system logging print Flags: X - disabled, I - invalid, * - default # TOPICS ACTION PREFIX 0 * info memory 1 * error memory 2 * warning memory 3 * critical echo # Uwaga: Domyślnie logi info, error i warning trafiają do ulotnej pamięci RAM (memory), a critical — do konsoli (echo)!
Trójwarstwowa architektura RouterOS Logging 1. Źródła (Topics) • system, critical, error • firewall, info • dhcp, wireless • account, interface Tagi zdarzeń w jądrze Reguły 2. /system logging • Tablica decyzyjna • Dopasowanie tematów • Wykluczenia (!dns) • Prefiksy wiadomości Wiązanie Topics → Action Kierunek 3. Cele (Actions) • memory (RAM ulotny) • disk (pamięć flash) • echo (konsola COM) • remote (UDP 514) Cel docelowy strumienia Model przetwarzania zdarzeń w RouterOS CLI: [admin@MikroTik] > /system logging action add name=syslog-srv target=192.168.1.100 ... [admin@MikroTik] > /system logging add topics=critical,error,warning action=syslog-srv ✓ RouterOS oddziela definicję generowania zdarzenia od miejsca jego wysyłki.
Slajd 29/46
Akcje docelowe w RouterOS: Charakterystyka akcji 'remote'
Cel slajdu: Zrozumienie ograniczeń lokalnych akcji RouterOS oraz konieczności stosowania akcji zdalnej (remote).

Zdalne logowanie w MikroTik RouterOS

RouterBoardy posiadają ograniczone zasoby sprzętowe. Modele takie jak hEX, RB750Gr3 czy hAP ac2 wyposażone są w miniaturowe kości pamięci flash o pojemności zaledwie 16 MB. Nieodpowiedzialne logowanie na dysk wewnętrzny prowadzi do nieodwracalnego uszkodzenia urządzenia.

  • Ulotność akcji memory: Bufor pamięci RAM trzyma domyślnie 1000 ostatnich linii. Restart urządzenia kasuje wszystkie ślady włamania
  • Ryzyko zużycia Flash (Wear-out): Kości NAND posiadają ograniczoną liczbę cykli zapisu (P/E cycles). Ciągły zapis logów zapory prowadzi do uszkodzenia pamięci
  • Przewaga akcji remote: Pakiety UDP są wysyłane asynchronicznie bezpośrednio z pamięci RAM do sieci, nie dotykając pamięci flash routera
  • Nieograniczona retencja: Serwer centralny rsyslog dysponuje macierzami SSD o pojemności terabajtów, umożliwiając przechowywanie logów przez lata
Zasada projektowa dla MikroTik: Nigdy nie ustawiaj action=disk dla tematów o wysokiej częstotliwości (firewall, dhcp, wireless). Pamięć flash powinna być zarezerwowana wyłącznie dla konfiguracji urządzenia i kopii zapasowych. Wszystkie logi operacyjne powinny być natychmiast wysyłane do akcji remote.
Podgląd parametrów akcji w RouterOS CLI
[admin@MikroTik-GW] > /system logging action print detail where name="remote" Flags: * - default 3 * name="remote" target=remote remote="0.0.0.0" remote-port=514 src-address=0.0.0.0 bsd-syslog=no syslog-facility=daemon syslog-severity=auto # Domyślna akcja 'remote' jest nieskonfigurowana (remote=0.0.0.0)
Porównanie akcji w MikroTik RouterOS AkcjaTypNośnik / CelWady i ryzyka produkcyjneRekomendacjamemoryWewnętrznyPamięć ulotna RAM (1000 linii)Wymazanie po restarcie routera, brak retencjiTylko doraźny podgląddiskWewnętrznyPamięć Flash NAND routeraFizyczne zużycie komórek Flash, ryzyko awariiUnikać przy dużym natężeniuechoLokalnyWyjście szeregowe / konsolaWymaga fizycznego podłączenia kabla COMSytuacje awaryjne unbrickemailSieciowyWysyłka SMTP do administratoraSpamowanie skrzynki przy pętli błędówPowiadomienia incydentalneremoteSieciowyZewnętrzny kolektor Syslog (UDP)Brak strat pamięci flash, pełna retencja NMSStandard branżowy! Ostrzeżenie inżynierskie: Zagrożenie zużyciem pamięci Flash NAND w RouterOS: Włączenie akcji disk dla logowania zapory ogniowej potrafi zniszczyć wbudowaną pamięć flash taniego routera (np. hEX / hAP) w ciągu kilku miesięcy ciągłego zapisu! Logi zapory i DHCP ZAWSZE kieruj do akcji remote!
Slajd 30/46
Konfiguracja akcji zdalnej w CLI RouterOS krok po kroku
Cel slajdu: Pełna parametryzacja akcji 'remote' w wierszu poleceń MikroTik RouterOS i wyjaśnienie każdego atrybutu.

Zdalne logowanie w MikroTik RouterOS

Zamiast modyfikować domyślną akcję 'remote', dobrą praktyką inżynierską jest utworzenie nowej, nazwanej akcji docelowej (np. syslog-server). Pozwala to na precyzyjne dostosowanie parametrów bez zakłócania innych podsystemów routera.

  • Nazwa akcji (name=syslog-server): Unikalna nazwa celu używana później w regułach /system logging
  • Typ celu i adres (target=remote remote=192.168.1.100): Określa akcję sieciową oraz docelowy adres IP serwera rsyslog (w RouterOS v7 może to być także nazwa FQDN)
  • Kategoria (syslog-facility=local0): Wymusza kod Facility 16 (local0), co pozwala serwerowi Linux na bezbłędne rozpoznanie routera
  • Format czasu (bsd-syslog=no): Flaga nakazująca generowanie znacznika czasu ISO 8601 ze strefą czasową zamiast skróconego formatu BSD
Rola parametru src-address: Jeśli router posiada kilka interfejsów (np. WAN, LAN, DMZ, Loopback), pakiet UDP może opuścić router z różnymi adresami źródłowymi w zależności od tablicy routingu. Ustawienie src-address=192.168.1.1 wymusza stały adres IP nadawcy, dzięki czemu rsyslog zawsze zapisze logi w tym samym katalogu /var/log/remote/192.168.1.1/!
Wprowadzenie konfiguracji akcji zdalnej w CLI MikroTik
[admin@MikroTik-GW] > /system logging action add name=syslog-server target=remote remote=192.168.1.100 remote-port=514 syslog-facility=local0 syslog-severity=auto bsd-syslog=no src-address=192.168.1.1 [admin@MikroTik-GW] > /system logging action print detail where name="syslog-server" 4 name="syslog-server" target=remote remote="192.168.1.100" remote-port=514 src-address=192.168.1.1 bsd-syslog=no syslog-facility=local0 syslog-severity=auto Akcja zdalna skonfigurowana poprawnie i gotowa do powiązania z tematami!
Konfiguracja akcji zdalnej w RouterOS CLI [admin@MikroTik-GW] > /system logging action add name=syslog-server target=remote remote=192.168.1.100 remote-port=514 syslog-facility=local0 syslog-severity=auto bsd-syslog=no src-address=192.168.1.1 Znaczenie poszczególnych parametrów akcji zdalnej: • target=remote remote=192.168.1.100: Akcja sieciowa ze wskazaniem adresu serwera rsyslog • syslog-facility=local0: Identyfikuje zdarzenia jako pochodzące z routera sieciowego • bsd-syslog=no: Format czasu ISO 8601 ze strefą czasową zamiast skróconego BSD • src-address=192.168.1.1: Gwarantuje stały adres źródłowy przy wielu interfejsach routera
Slajd 31/46
Wiązanie tematów (Topics) z akcją zdalną w CLI RouterOS
Cel slajdu: Precyzyjne zdefiniowanie zestawu reguł przekazujących kluczowe zdarzenia z routera na serwer rsyslog.

Zdalne logowanie w MikroTik RouterOS

Po utworzeniu akcji docelowej musimy wskazać, które zdarzenia mają być do niej kierowane. W podmenu /system logging tworzymy zestaw reguł przechwytujących błędy systemowe, próby logowania, reguły zapory oraz stan dzierżaw DHCP.

  • Tematy krytyczne (critical, error, warning): Podstawa każdego wdrożenia – informuje o awariach zasilania, restarcie usług i błędach konfiguracji
  • Temat account: Audyt bezpieczeństwa – rejestruje logowania administratorów przez WinBox, SSH, WebFig i konsolę
  • Temat firewall: Zdarzenia generowane przez reguły zapory ogniowej z włączoną flagą log=yes
  • Tematy złożone (dhcp,info): Zapis dhcp,info przechwytuje zdarzenia serwera DHCP bez konieczności włączania całego ogólnego tematu info
Przestroga przed tematem info bez filtrów: Dodanie reguły topics=info action=syslog-server w sieci, gdzie router pełni rolę serwera DNS i obsługuje setki klientów, wygeneruje potok tysięcy pakietów na sekundę. Zawsze stosuj tematy zawężone (np. dhcp,info) lub wykluczenia (!dns).
Wprowadzanie reguł logowania w CLI RouterOS
[admin@MikroTik-GW] > /system logging add action=syslog-server topics=critical [admin@MikroTik-GW] > /system logging add action=syslog-server topics=error [admin@MikroTik-GW] > /system logging add action=syslog-server topics=warning [admin@MikroTik-GW] > /system logging add action=syslog-server topics=account [admin@MikroTik-GW] > /system logging add action=syslog-server topics=firewall [admin@MikroTik-GW] > /system logging add action=syslog-server topics=dhcp,info [admin@MikroTik-GW] > /system logging print Reguły zostały aktywowane i router natychmiast rozpoczyna nadawanie UDP 514!
Wiązanie Topics z akcją syslog-server [admin@MikroTik-GW] > /system logging add action=syslog-server topics=critical add action=syslog-server topics=error add action=syslog-server topics=warning add action=syslog-server topics=account add action=syslog-server topics=firewall add action=syslog-server topics=dhcp,info Zasady konstruowania reguł w /system logging: • Selektywne podejście: Zamiast dodawać ogólny temat 'info', dodawaj pary dhcp,info lub interface,info • Prefiks negacji (!): Zapis topics=info,!dns chroni przed zalaniem serwera milionami zapytań DNS • Prefiksy tekstowe: Opcja prefix="ROUTER-MAIN: " dodaje stały identyfikator do każdego komunikatu
Slajd 32/46
Logowanie zapory ogniowej (Firewall) z prefiksami log-prefix
Cel slajdu: Prawidłowa konfiguracja logowania odrzucanych pakietów zapory sieciowej z unikalnymi znacznikami identyfikacyjnymi.

Zdalne logowanie w MikroTik RouterOS

Domyślnie reguły zapory RouterOS odrzucają pakiety po cichu (silent drop). Aby zarejestrować próbę ataku na serwerze rsyslog, na wybranej regule musimy aktywować flagę log=yes oraz zdefiniować unikalny parametr log-prefix.

  • Flaga log=yes: Wymusza wygenerowanie zdarzenia o temacie 'firewall' w momencie wykonania akcji reguły (np. drop, reject)
  • Parametr log-prefix: Dowolny tekst doklejany na początku każdego komunikatu. Pozwala zidentyfikować, która reguła odrzuciła pakiet
  • Zasada wydajnościowa: Nigdy nie loguj reguł akceptujących ruch Established/Related! Loguj wyłącznie pakiety odrzucane na interfejsie WAN
  • Struktura rekordu firewall: Pakiet zawiera: in-interface, out-interface, src-mac, src-ip:port, dst-ip:port, proto oraz wielkość pakietu len
Zalecana konwencja nazewnicza prefiksów: Używaj zwięzłych, wielkich liter ze znakiem dwukropka, np. log-prefix="FW_DROP_WAN_IN: ", log-prefix="FW_PORT_SCAN: ", log-prefix="FW_BRUTE_FORCE: ". Ułatwia to automatyczne parsowanie w potokach Bash i silnikach SIEM.
Konfiguracja reguły zapory z logowaniem w CLI MikroTik
[admin@MikroTik-GW] > /ip firewall filter add chain=input in-interface-list=WAN protocol=tcp dst-port=22,8291 action=drop log=yes log-prefix="DROP_MANAGEMENT_ATTEMPT: " comment="Blokada prób logowania SSH/WinBox z WAN" # W momencie uderzenia pakietu z zewnątrz serwer rsyslog rejestruje wpis: 2026-09-29T19:55:12+02:00 MikroTik-GW firewall,info DROP_MANAGEMENT_ATTEMPT: in:ether1 out:(unknown 0), src-mac 00:50:56:c0:00:08, proto TCP (SYN), 198.51.100.24:54122->192.168.1.1:22, len 60
Logowanie zapory RouterOS z prefiksami [admin@MikroTik-GW] > /ip firewall filter add chain=input in-interface-list=WAN action=drop log=yes log-prefix="DROP_WAN_INPUT: " comment="Blokada nieautoryzowanego dostepu do routera" add chain=forward in-interface-list=WAN connection-state=invalid action=drop log=yes log-prefix="DROP_INVALID_FWD: " Dlaczego prefiks log-prefix jest kluczowy dla systemów NMS i SIEM? 1. Błyskawiczna korelacja: Skrypty na serwerze filtrują zdarzenia po ciągu DROP_WAN_INPUT bez Regex 2. Identyfikacja reguły: RouterOS nie przesyła numeru reguły w pakiecie – prefiks jest jedynym śladem reguły! 3. Integracja z Fail2ban: Serwer Linux może automatycznie banować IP dopasowane do prefiksu ataku
Slajd 33/46
Logowanie translacji adresów (NAT) i audyt przekierowań
Cel slajdu: Rejestrowanie przychodzących połączeń przekierowywanych przez mechanizm DST-NAT do wewnętrznych serwerów.

Zdalne logowanie w MikroTik RouterOS

Gdy serwer wewnątrz sieci LAN lub DMZ udostępnia usługi dla publicznego Internetu przez przekierowanie portów (DSTNAT), zapora routera dokonuje translacji adresu docelowego. Logowanie reguły DSTNAT jest niezbędne dla spełnienia norm bezpieczeństwa (audyt dostępu do zasobów wewnętrznych).

  • Logowanie reguł DSTNAT: Rejestruje publiczny adres IP klienta, port źródłowy oraz prywatny adres IP serwera docelowego
  • Identyfikacja prób eksploracji: Pozwala wykryć próby skanowania podatności webowych jeszcze zanim dotrą one do logów serwera aplikacji
  • Przestroga przed logowaniem SRCNAT/Masquerade: Logowanie każdego pakietu wychodzącego generuje gigabajty danych na godzinę i przeciąża CPU routera
  • Znaczenie w dochodzeniach: Zgodnie z wymaganiami KRI i RODO administrator musi być w stanie wykazać, kto i kiedy łączył się z bazą danych
Kiedy logować pakiety INVALID? W łańcuchu forward warto dodać regułę logującą pakiety ze statusem connection-state=invalid z prefiksem "DROP_INVALID: ". Pakiety te często świadczą o próbach ominięcia filtrów stanowych lub błędach routingu asymetrycznego u dostawcy ISP.
Konfiguracja reguły logowania podejrzanych pakietów invalid
[admin@MikroTik-GW] > /ip firewall filter add chain=forward connection-state=invalid action=drop log=yes log-prefix="DROP_INVALID_FWD: " comment="Odrzucanie pakietów uszkodzonych/nieprawidłowych" [admin@MikroTik-GW] > /ip firewall filter print where log=yes Flags: X - disabled, I - invalid, D - dynamic 0 chain=input action=drop log=yes log-prefix="DROP_WAN_INPUT: " 1 chain=forward action=drop connection-state=invalid log=yes log-prefix="DROP_INVALID_FWD: "
Logowanie translacji NAT w RouterOS [admin@MikroTik-GW] > /ip firewall nat add chain=dstnat in-interface-list=WAN protocol=tcp dst-port=443 action=dst-nat to-addresses=192.168.1.200 to-ports=443 log=yes log-prefix="NAT_PORT_FWD_HTTPS: " comment="Przekierowanie WWW" add chain=srcnat out-interface-list=WAN action=masquerade log=no # NIE loguj ogólnego masquerade – zarzuci serwer milionami pakietów! Przykładowy rekord przekierowania NAT w rsyslog: 2026-09-29T19:58:00+02:00 MikroTik-GW firewall,info NAT_PORT_FWD_HTTPS: in:ether1 out:(unknown 0), proto TCP (SYN), 203.0.113.88:41235->WAN_IP:443, NAT (203.0.113.88:41235->192.168.1.200:443), len 60 ✓ Ślad audytowy: Wiadomo dokładnie, który zewnętrzny adres IP połączył się z serwerem w strefie DMZ!
Slajd 34/46
Logowanie podsystemu DHCP Server w RouterOS
Cel slajdu: Rejestrowanie cyklu przyznawania adresów IP oraz wykrywanie konfliktów i obcych stacji w sieci LAN.

Zdalne logowanie w MikroTik RouterOS

W dynamicznych sieciach biurowych stacje robocze regularnie zmieniają adresy IP. Aby w razie wykrycia incydentu (np. pobrania złośliwego oprogramowania) ustalić, który pracownik korzystał z danego IP o godzinie 14:15, administrator musi dysponować kompletnym archiwum dzierżaw DHCP.

  • Zdarzenie assigned: Rejestruje przydział nowego adresu IP wraz z adresem MAC karty sieciowej oraz nazwą stacji roboczej (hostname)
  • Zdarzenie conflict detected: Alarmuje o sytuacji, w której stacja ustawiła statyczny adres IP zajęty już w puli DHCP
  • Zdarzenie deassigned: Informuje o zwolnieniu adresu lub wygaśnięciu czasu dzierżawy (Lease Time)
  • Zgodność z audytem prawnym: Kluczowy dowód kryminalistyczny w sprawach naruszeń praw autorskich lub włamań z sieci Wi-Fi
Wyszukiwanie adresu MAC dla historycznego incydentu: Za pomocą prostego polecenia na serwerze Linux możemy ustalić, jakie urządzenie posiadało dany IP w przeszłości:
grep "192.168.1.155" /var/log/remote/192.168.1.1/all.log | grep "assigned".
Weryfikacja logów DHCP RouterOS na centralnym serwerze rsyslog
root@nms-syslog:~# grep "dhcp,info" /var/log/remote/192.168.1.1/all.log | tail -n 3 2026-09-29T20:00:15+02:00 MikroTik-GW dhcp,info defconf assigned 192.168.1.155 to 3C:06:30:11:22:33 (laptop-jnowak) 2026-09-29T20:01:22+02:00 MikroTik-GW dhcp,info defconf assigned 192.168.1.156 to F4:D4:88:55:66:77 (drukarka-ksiegowosc) 2026-09-29T20:02:10+02:00 MikroTik-GW dhcp,info defconf deassigned 192.168.1.150 from BC:24:11:AA:BB:CC Pełna historia dzierżaw zindeksowana w repozytorium zdalnym!
Logowanie serwera DHCP RouterOS [admin@MikroTik-GW] > /system logging add action=syslog-server topics=dhcp,info • Rejestruje pełny cykl życia dzierżawy IP w podsieci lokalnej LAN • Zdarzenia przyznania adresu (assigned), odnowienia (renew) i zwolnienia (deassigned) • Wykrywanie konfliktów adresowych (conflict detected) i obcych serwerów Rogue DHCP Przykładowy rekord telemetryczny DHCP odebrany na serwerze Linux: 2026-09-29T20:00:15+02:00 MikroTik-GW dhcp,info defconf assigned 192.168.1.155 to 3C:06:30:11:22:33 (laptop-jnowak) Identyfikatory w logu: Adres IP (192.168.1.155), Adres MAC karty, Hostname urządzenia ✓ Niezbędne do dochodzeń: powiązanie adresu IP z fizycznym urządzeniem w czasie!
Slajd 35/46
Audyt i bezpieczeństwo dostępu do RouterOS (WinBox / SSH)
Cel slajdu: Rejestrowanie sesji administracyjnych oraz wykrywanie nieautoryzowanych prób logowania do routera.

Zdalne logowanie w MikroTik RouterOS

Zabezpieczenie routera brzegowego wymaga ścisłego monitorowania dostępu do kont administracyjnych. Temat 'account' w RouterOS rejestruje każdą próbę autoryzacji, adres IP stacji zarządzającej oraz typ użytego interfejsu (WinBox port 8291, SSH port 22 czy REST API port 443).

  • Temat account,info: Informuje o poprawnym zalogowaniu administratora (logged in) oraz wylogowaniu (logged out)
  • Temat account,warning: Kluczowy alert bezpieczeństwa – rejestruje zdarzenia 'login failure' wraz z użytą nazwą konta i IP intruza
  • Zdarzenia system,info: Rejestruje zmiany w konfiguracji urządzenia (dodanie reguły, zmiana hasła, restart)
  • Odporność na sabotaż: Nawet jeśli intruz po udanym logowaniu usunie lokalny log, serwer rsyslog posiada już nienaruszalny zapis
Zasada minimalizacji usług zarządzających: W celach bezpieczeństwa wyłącz nieużywane usługi w /ip service (np. telnet, ftp, www) i pozostaw wyłącznie zaszyfrowany SSH oraz WinBox na niestandardowych portach lub w dedykowanej strefie VPN.
Weryfikacja nieudanych prób logowania na routerze z konsoli serwera
root@nms-syslog:~# grep "login failure" /var/log/remote/192.168.1.1/all.log | tail -n 3 2026-09-29T20:05:44+02:00 MikroTik-GW account,warning: login failure for user root from 203.0.113.88 via ssh 2026-09-29T20:05:46+02:00 MikroTik-GW account,warning: login failure for user admin from 203.0.113.88 via ssh 2026-09-29T20:05:48+02:00 MikroTik-GW account,warning: login failure for user ubnt from 203.0.113.88 via ssh Wykryto zmasowany atak brute-force SSH na router MikroTik!
Audyt dostępu administracyjnego RouterOS [admin@MikroTik-GW] > /system logging add action=syslog-server topics=account • Monitoruje próby logowania administratorów do routera (WinBox, SSH, WebFig, API, Console) • Rejestruje poprawne autoryzacje (logged in) oraz błędne próby haseł (login failure) • Informuje o zmianach konfiguracji dokonywanych przez operatorów sieci Przykłady komunikatów audytowych w repozytorium rsyslog: 2026-09-29T20:05:01+02:00 MikroTik-GW account,info: user admin logged in from 192.168.1.50 via winbox 2026-09-29T20:05:44+02:00 MikroTik-GW account,warning: login failure for user root from 203.0.113.88 via ssh 2026-09-29T20:06:12+02:00 MikroTik-GW system,info: filter rule added by admin ✓ Natychmiastowe wykrywanie ataków siłowych (brute-force) na interfejsy zarządzające!
Slajd 36/46
Monitorowanie stanu interfejsów (Link Up/Down) i routingu
Cel slajdu: Rejestrowanie zdarzeń awarii łączy fizycznych, przełączania tras zapasowych oraz sesji OSPF/BGP.

Zdalne logowanie w MikroTik RouterOS

Standardowy polling SNMP odpytuje routery zazwyczaj co 1 lub 5 minut. W przypadku przecięcia kabla światłowodowego asynchroniczny komunikat Syslog trafia na serwer w czasie poniżej 10 milisekund od zgaśnięcia diody portu, co pozwala systemowi NMS na natychmiastowe zaalarmowanie inżynierów.

  • Temat interface,info: Rejestruje natychmiastową zmianę stanu interfejsu (link down / link up) oraz negocjację prędkości (speed 1Gbps, full duplex)
  • Zjawisko Link Flapping: Wykrywa niestabilne łącza radiowe lub uszkodzone wkładki SFP, które generują dziesiątki przełączeń na minutę
  • Tematy OSPF i BGP: Rejestrują przejścia stanów sąsiedztwa routingu dynamicznego (Neighbor Down, Full State)
  • Korelacja z metrykami SNMP: Potwierdza przyczynę nagłego spadku wykresu ruchu SNMP do zera na łączu głównym
Dlaczego Syslog jest szybszy od SNMP: SNMP opiera się na cyklicznym odpytywaniu (Pull Model) – jeśli awaria nastąpi tuż po zapytaniu, NMS dowie się o niej dopiero za 60 sekund. Syslog działa w modelu zdarzeniowym (Push Model) – pakiet opuszcza router natychmiast po wykryciu braku nośnej na złączu fizycznym.
Weryfikacja zmian stanu interfejsów w logach serwera
root@nms-syslog:~# grep "interface,info" /var/log/remote/192.168.1.1/all.log | tail -n 2 2026-09-29T20:10:00+02:00 MikroTik-GW interface,info: sfp-sfpplus1 link down 2026-09-29T20:11:15+02:00 MikroTik-GW interface,info: sfp-sfpplus1 link up (speed 10Gbps, full duplex) Czas trwania przerwy w fizycznej łączności światłowodowej: dokładnie 75 sekund.
Detekcja awarii łączy i routingu [admin@MikroTik-GW] > /system logging add action=syslog-server topics=interface,info add action=syslog-server topics=ospf add action=syslog-server topics=bgp • Błyskawiczna detekcja awarii fizycznych portów Ethernet, wkładek SFP i sesji tunelowych Przykładowa sekwencja awarii światłowodu w logach: 2026-09-29T20:10:00+02:00 MikroTik-GW interface,info: sfp-sfpplus1 link down 2026-09-29T20:10:02+02:00 MikroTik-GW bgp,warning: session with 198.51.100.1 is DOWN (hold timer expired) 2026-09-29T20:10:03+02:00 MikroTik-GW route,info: fallback to backup gateway 10.255.0.1 ✓ Asynchroniczny Syslog informuje NMS o awarii w ułamku sekundy, bez czekania na polling SNMP!
Slajd 37/46
Narzędzia diagnostyczne logowania w RouterOS CLI
Cel slajdu: Opanowanie zaawansowanych poleceń wiersza poleceń RouterOS do podglądu, filtrowania i śledzenia logów.

Zdalne logowanie w MikroTik RouterOS

Podczas prac wdrożeniowych na routerze inżynier często musi na bieżąco weryfikować, czy tworzone reguły zapory lub akcje logowania działają poprawnie. RouterOS CLI udostępnia zaawansowane narzędzia filtrowania bufora pamięci ulotnej.

  • Polecenie /log print: Wyświetla aktualną zawartość bufora pamięci RAM wraz z czasem, tematami i tekstem wiadomości
  • Przełącznik follow: Wymusza tryb ciągłego śledzenia w czasie rzeczywistym (odpowiednik uniksowego tail -f)
  • Filtrowanie wyrażeniami regularnymi (~): Klauzula where topics~"firewall" lub where message~"DROP" zawęża wyniki do interesujących zdarzeń
  • Statystyki zdarzeń: Przełącznik count-only pozwala szybko zliczyć liczbę incydentów w danym przedziale czasu
Szybki test wysyłki logów z CLI RouterOS: Możesz wygenerować testowy wpis logu bezpośrednio z konsoli MikroTik poleceniem:
:log info "TEST_MANUAL: Reczny test wysylki logu do rsyslog"
i natychmiast sprawdzić czy pojawił się on w /var/log/remote/192.168.1.1/all.log.
Interaktywna sesja śledzenia logów zapory w RouterOS CLI
[admin@MikroTik-GW] > /log print follow where topics~"firewall" 20:15:10 firewall,info DROP_WAN_INPUT: in:ether1 proto TCP, 198.51.100.12:44122->192.168.1.1:23, len 40 20:15:12 firewall,info DROP_WAN_INPUT: in:ether1 proto UDP, 203.0.113.55:5060->192.168.1.1:5060, len 320 20:15:14 firewall,info DROP_INVALID_FWD: in:ether1 proto TCP, 198.51.100.99:80->192.168.1.200:54122, len 52 -- naciśnij Ctrl+C aby zatrzymać śledzenie --
Diagnostyka CLI RouterOS [admin@MikroTik-GW] > /log print follow where topics~"firewall" # Odpowiednik tail -f dla zapory print where message~"failed" # Filtrowanie błędów wyrażeniem Regex print detail where topics~"account" # Pełne szczegóły audytu logowania /log print count-only where time > ([/system clock get time] - 1h) Zaawansowane techniki diagnostyki logów w RouterOS: • print follow: Tryb ciągłego śledzenia przyrostu bufora – idealny podczas testów reguł zapory • where topics~"wzorzec": Operator tyldy (~) wykonuje dopasowanie wyrażenia regularnego (Regex) • Skrót klawiszowy Ctrl+C: Bezpieczne przerwanie ciągłego podglądu konsoli w trybie follow
Slajd 38/46
Organizacja repozytorium logów i struktura uprawnień
Cel slajdu: Budowa bezpiecznego, zgodnego z normami audytowymi magazynu /var/log/remote/ w systemie plików Linux.

Integracja, bezpieczeństwo i utrzymanie

Centralne repozytorium zdarzeń gromadzi poufne informacje o użytkownikach, adresach IP, otwartych portach oraz próbach logowań. Niewłaściwe uprawnienia w systemie plików mogłyby umożliwić nieuprawnionym pracownikom odczyt danych objętych tajemnicą przedsiębiorstwa.

  • Prawa katalogów 0750 (drwxr-x---): Właściciel 'syslog' ma pełen dostęp (rwx), grupa 'adm' ma wgląd (r-x), pozostali nie mają dostępu (---)
  • Prawa plików 0640 (-rw-r-----): Zapewniają możliwość odczytu przez narzędzia audytorskie bez ryzyka przypadkowej modyfikacji zawartości
  • Grupa administracyjna adm: Zamiast logować się na konto roota, administratorów dodaje się do grupy systemowej: usermod -aG adm audytor
  • Atrybut niezmienności (append-only): W skrajnie restrykcyjnych systemach pliki można zabezpieczyć atrybutem chattr +a (dozwolone tylko dopisywanie)
Zarządzanie kontami audytorów: Nadanie użytkownikowi uprawnienia do grupy adm pozwala mu na przeglądanie logów poleceniami less, grep i zgrep, chroniąc jednocześnie system przed przypadkowym skasowaniem plików.
Konfiguracja konta audytora i weryfikacja praw dostępu
root@nms-syslog:~# usermod -aG adm inzynier_sieci root@nms-syslog:~# id inzynier_sieci uid=1001(inzynier_sieci) gid=1001(inzynier_sieci) groups=1001(inzynier_sieci),4(adm) root@nms-syslog:~# su - inzynier_sieci -c "head -n 2 /var/log/remote/192.168.1.1/critical.log" 2026-09-29T20:10:00+02:00 MikroTik-GW interface,info: sfp-sfpplus1 link down # Odczyt powiódł się bez uprawnień konta root!
Struktura uprawnień POSIX w /var/log/remote/ # Drzewo produkcyjnego repozytorium /var/log/remote/ drwxr-x--- syslog adm /var/log/remote/ # Katalog główny (0750) ├── 192.168.1.1/ drwxr-x--- syslog adm # Folder bramy MikroTik │ ├── critical.log -rw-r----- syslog adm │ └── all.log -rw-r----- syslog adm └── 192.168.1.150/ drwxr-x--- syslog adm # Folder stacji PC-01 Matryca bezpieczeństwa dostępu do repozytorium logów: • Właściciel procesu (syslog): Pełne prawa zapisu i tworzenia nowych folderów • Grupa audytorów (adm): Prawa tylko do odczytu (r-x) – brak możliwości edycji ani skasowania! • Pozostali użytkownicy (others): Całkowity brak uprawnień (---) – blokada dostępu dla osób postronnych ✓ Członkowie grupy adm czytają logi bez konieczności podnoszenia uprawnień do konta root!
Slajd 39/46
Retencja i automatyczna rotacja logów w logrotate
Cel slajdu: Zabezpieczenie serwera przed wyczerpaniem dysku za pomocą cyklicznej rotacji, kompresji gzip i retencji.

Integracja, bezpieczeństwo i utrzymanie

Serwer rsyslog w sieci korporacyjnej rejestruje od kilkuset megabajtów do kilkunastu gigabajtów danych dziennie. Bez automatycznej rotacji partycja dyskowa uległaby zapełnieniu w ciągu kilku tygodni. Narzędzie logrotate zarządza cyklem życia plików dziennika.

  • Maska wieloznaczna /var/log/remote/*/*.log: Obejmuje automatycznie wszystkie podfoldery utworzone dynamicznie przez dynaFile dla każdego hosta
  • Dyrektywy compress i delaycompress: Kompresuje archiwa algorytmem gzip (oszczędność do 90% dysku). delaycompress chroni procesy przed zablokowaniem
  • Parametr rotate 90: Utrzymuje historię zdarzeń z 90 ostatnich dni, automatycznie usuwając najstarsze archiwa
  • Blok postrotate (rsyslog-rotate): Wysyła sygnał SIGHUP do rsyslogd, nakazując ponowne otwarcie uchwytów plików po rotacji
Testowanie reguł w trybie symulacji (-d): Przed wdrożeniem nowego pliku rotacji zawsze przetestuj go w trybie debugowania: logrotate -d /etc/logrotate.d/remote-syslog. W tym trybie logrotate wypisuje na ekran dokładnie to, co zamierza zrobić, nie modyfikując żadnego pliku na dysku!
Tworzenie pliku rotacji i test próbny w trybie symulacji
root@nms-syslog:~# cat << 'EOF' > /etc/logrotate.d/remote-syslog /var/log/remote/*/*.log { daily rotate 90 compress delaycompress missingok notifempty sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } EOF root@nms-syslog:~# logrotate -d /etc/logrotate.d/remote-syslog reading config file /etc/logrotate.d/remote-syslog considering log /var/log/remote/192.168.1.1/all.log -> log does not need rotating [SUCCESS]
Mechanizm rotacji i kompresji logrotate # Plik: /etc/logrotate.d/remote-syslog /var/log/remote/*/*.log { daily rotate 90 compress delaycompress missingok sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } Cykl życia pliku logu pod nadzorem logrotate (90 dni retencji): Dzień 0: all.log # Aktywny plik, do którego rsyslog dopisuje pakiety Dzień 1: all.log.1 # Wczorajszy plik po rotacji (niekompresowany - delaycompress) Dzień 2: all.log.2.gz # Skompresowany archiwum gzip (redukcja rozmiaru o 92%!) Dzień 91: all.log.91.gz usunięty automatycznie zgodnie z polityką retencji
Slajd 40/46
Utwardzanie bezpieczeństwa systemu: SELinux i AppArmor
Cel slajdu: Rozwiązywanie problemów z odmową dostępu mechanizmów kontroli dostępu Mandatory Access Control.

Integracja, bezpieczeństwo i utrzymanie

Gdy magazyn logów zostanie przeniesiony na zewnętrzny punkt montowania (np. /data/log/ lub /mnt/storage/remote/), rsyslog pomimo posiadania praw konta root/syslog może zgłaszać błędy 'Permission Denied'. Przyczyną są mechanizmy kontroli wymuszonej (MAC) – SELinux oraz AppArmor.

  • Zasada działania SELinux: Proces rsyslogd działa w domenie syslogd_t i ma prawo zapisu wyłącznie do plików z kontekstem var_log_t
  • Polecenie semanage fcontext: semanage fcontext -a -t var_log_t "/data/log(/.*)?" trwale rejestruje kontekst w polityce jądra
  • Polecenie restorecon -Rv: Aplikuje zdefiniowane etykiety bezpieczeństwa do istniejących plików i katalogów
  • Profile AppArmor (Debian/Ubuntu): Jeśli katalog wykracza poza standardowe /var/log/, należy dodać regułę do /etc/apparmor.d/local/usr.sbin.rsyslogd
Nigdy nie wyłączaj SELinux (setenforce 0): Wyłączenie SELinux w środowisku produkcyjnym to rażące naruszenie zasad bezpieczeństwa. Prawidłowym podejściem inżynierskim jest nadanie właściwych etykiet kontekstu za pomocą semanage i restorecon.
Diagnoza i naprawa kontekstów SELinux dla magazynu zdalnego
root@nms-rhel:~# ls -dZ /var/log/remote unconfined_u:object_r:default_t:s0 /var/log/remote # Błędny kontekst default_t! root@nms-rhel:~# semanage fcontext -a -t var_log_t "/var/log/remote(/.*)?" root@nms-rhel:~# restorecon -Rv /var/log/remote Relabeled /var/log/remote from default_t to var_log_t. root@nms-rhel:~# ls -dZ /var/log/remote system_u:object_r:var_log_t:s0 /var/log/remote # Prawidłowy kontekst var_log_t!
Zarządzanie SELinux i AppArmor dla rsyslog AppArmor (Ubuntu / Debian) Profil: /etc/apparmor.d/usr.sbin.rsyslogd Wymagany wpis dla ścieżki: /var/log/remote/** rw, Przeładowanie: apparmor_parser -r SELinux (RHEL / Rocky / Alma) Kontekst bezpieczeństwa: var_log_t Polecenie nadania kontekstu: semanage fcontext -a -t var_log_t ... restorecon -Rv /var/log/remote Objawy blokady Mandatory Access Control (MAC): • Demon rsyslog raportuje błąd: error: could not open file ... Permission denied • Mimo że uprawnienia POSIX (ls -ld) wskazują 0750 syslog:adm, pliki NIE powstają! ✓ Diagnostyka: Zawsze weryfikuj dmesg | grep -i apparmor lub audit2why na RHEL!
Slajd 41/46
Szyfrowanie sesji rsyslog protokołem TLS (RFC 5425 na porcie 6514)
Cel slajdu: Wdrożenie kryptograficznej ochrony strumienia logów przesyłanych przez niezaufane sieci publiczne.

Integracja, bezpieczeństwo i utrzymanie

Gdy stacje robocze lub serwery oddziałowe przesyłają logi przez publiczny Internet bez tunelu VPN, nieszyfrowany protokół TCP/UDP naraża organizację na podsłuch haseł, danych osobowych oraz modyfikację rekordów w ataku Man-in-the-Middle. Standard RFC 5425 definiuje bezpieczny transport TLS na porcie 6514.

  • Sterownik rsyslog-gnutls: Dostarcza moduł biblioteki GnuTLS dla procesora sieciowego rsyslog
  • Certyfikacja x509: Lokalny urząd certyfikacji (Internal CA) podpisuje certyfikaty serwera i klientów
  • Parametr StreamDriver.Mode="1": Wymusza szyfrowanie sesji TLS. Połączenia czystym tekstem są natychmiast odrzucane
  • Uwierzytelnianie x509/name: Klient weryfikuje czy nazwa CN certyfikatu serwera zgadza się z oczekiwanym adresem
Uprawnienia do kluczy prywatnych: Pliki kluczy prywatnych (np. server.key) muszą mieć bezwzględnie ograniczone uprawnienia: chmod 600 /etc/rsyslog.d/keys/*.key && chown syslog:adm /etc/rsyslog.d/keys/*.key.
Konfiguracja klienta Linux przesyłającego logi przez TLS 6514
root@PC-01:~# apt install -y rsyslog-gnutls root@PC-01:~# cat << 'EOF' > /etc/rsyslog.d/99-tls-forward.conf global(DefaultNetstreamDriver="gtls" DefaultNetstreamDriverCAFile="/etc/rsyslog.d/keys/ca.crt" DefaultNetstreamDriverCertFile="/etc/rsyslog.d/keys/pc01.crt" DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/keys/pc01.key") action(type="omfwd" target="syslog.firma.pl" port="6514" protocol="tcp" StreamDriver="gtls" StreamDriverMode="1" StreamDriverAuthMode="x509/name") EOF
Kryptografia TLS Syslog RFC 5425 # Konfiguracja szyfrowanego odbioru TLS na porcie 6514 module(load="imtcp" StreamDriver.Name="gtls" StreamDriver.Mode="1") global(DefaultNetstreamDriverCAFile="/etc/rsyslog.d/keys/ca.crt" DefaultNetstreamDriverCertFile="/etc/rsyslog.d/keys/server.crt" DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/keys/server.key") input(type="imtcp" port="6514" ruleset="remote_network") Architektura wzajemnego uwierzytelniania mTLS (RFC 5425): • Wymagany pakiet: apt install rsyslog-gnutls dostarcza sterownik kryptograficzny • Poufność i Integralność: Szyfrowanie symetryczne AES-256 chroni logi przed podsłuchem w sieci WAN • Uwierzytelnienie dwustronne: Serwer weryfikuje certyfikat stacji PC, a stacja sprawdza certyfikat serwera ✓ Port IANA dla TLS Syslog: 6514 TCP (zgodnie ze standardem RFC 5425).
Slajd 42/46
Bezpieczny transport logów z RouterOS: Tunel WireGuard / IPsec
Cel slajdu: Rozwiązanie braku natywnego TLS w RouterOS za pomocą nowoczesnego tunelowania VPN.

Integracja, bezpieczeństwo i utrzymanie

MikroTik RouterOS nie implementuje standardu RFC 5425 (TLS Syslog), a wysyłanie nieszyfrowanych pakietów UDP 514 przez publiczny Internet narusza podstawowe zasady cyberbezpieczeństwa. Standardem inżynierskim jest tunelowanie ruchu telemetrycznego przez WireGuard lub IPsec.

  • Architektura Overlay VPN: Zestawienie lekkiego, szyfrowanego tunelu WireGuard pomiędzy routerem a serwerem rsyslog
  • Prywatna podsieć tunelowa: Przydział dedykowanej puli adresowej punkt-punkt (np. 10.255.0.0/30) dla ruchu telemetrycznego
  • Parametry akcji remote: Ustawienie target=10.255.0.1 oraz src-address=10.255.0.2 kieruje cały ruch UDP 514 do wnętrza tunelu
  • Wydajność kryptograficzna: Szyfr ChaCha20-Poly1305 w WireGuard jest akcelerowany sprzętowo i nie obciąża procesora routera
Zaleta WireGuard w RouterOS v7: WireGuard jest natywnie wbudowany w jądro RouterOS v7. W przeciwieństwie do OpenVPN nie wymaga skomplikowanego handshake'u TCP ani certyfikatów – konfiguracja opiera się na statycznych kluczach publicznych Curve25519.
Weryfikacja tunelu WireGuard na serwerze Linux
root@nms-syslog:~# wg show wg0 interface: wg0 public key: 8vBqF1K...= listening port: 51820 peer: WzK9... (MikroTik-CCR2004) endpoint: 198.51.100.24:13231 allowed ips: 10.255.0.2/32 latest handshake: 14 seconds ago # Tunel aktywny! transfer: 4.21 MiB received, 112 KiB sent
Tunelowanie logów RouterOS przez WireGuard MikroTik RouterOS • UDP 514 (czysty tekst) • Tunel: wireguard1 • IP: 10.255.0.2/30 Brak natywnego TLS Pakiet UDP Tunel WireGuard Kryptografia ChaCha20 Publiczny Internet / WAN Hermetyzacja pakietu Odszyfrowany Serwer rsyslog • Nasłuch na 10.255.0.1 • Port 514 UDP w tunelu • dynaFile zapis per host 100% Bezpieczeństwa Konfiguracja tunelu WireGuard dla telemetrii MikroTik RouterOS v7: [admin@MikroTik] > /interface wireguard add name=wg-telemetry listen-port=13231 [admin@MikroTik] > /ip address add address=10.255.0.2/30 interface=wg-telemetry [admin@MikroTik] > /system logging action set syslog-server target=10.255.0.1 src-address=10.255.0.2 ✓ Pakiety UDP są w 100% zaszyfrowane wewnątrz tunelu WireGuard przed wysłaniem w Internet!
Slajd 43/46
Zaawansowane przeszukiwanie i analiza logów w CLI Linuksa
Cel slajdu: Opanowanie szybkich potoków powłoki Bash do wyciągania informacji telemetrycznych i wykrywania incydentów.

Integracja, bezpieczeństwo i utrzymanie

Prawdziwą siłą systemu Linux jest możliwość błyskawicznej analizy milionów wierszy logów za pomocą standardowych narzędzi potokowych (grep, zgrep, awk, sed, sort, uniq). Inżynier NMS potrafi w kilka sekund ustalić źródło anomalii bez uruchamiania ciężkich interfejsów graficznych.

  • Narzędzie zgrep: Wyszukuje wzorce bezpośrednio w plikach skompresowanych algorytmem gzip (.gz) bez ich wcześniejszego rozpakowywania na dysk
  • Potok awk '{print $field}': Wyciąga konkretne kolumny tekstu (np. adres IP, protokół, nazwę użytkownika)
  • Kombinacja sort | uniq -c: Zlicza wystąpienia unikalnych wartości, tworząc natychmiastowe zestawienia statystyczne
  • Flaga grep -oE: Wyciąga wyłącznie dopasowaną część wyrażenia regularnego (Regex), eliminując zbędny tekst nagłówka
Wyszukiwanie incydentów z określonego przedziału godzinowego: Polecenie awk '$1 >= "2026-09-29T14:00:00" && $1 <= "2026-09-29T15:00:00"' /var/log/remote/192.168.1.1/all.log filtruje zdarzenia z dokładnością do godziny na podstawie znacznika czasu ISO 8601.
Szybki potok Bash analizujący próby ataków na routerze MikroTik
root@nms-syslog:~# zgrep "DROP_MANAGEMENT_ATTEMPT" /var/log/remote/192.168.1.1/*.log* | grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}:[0-9]+->" | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 3 1420 198.51.100.88 892 203.0.113.14 314 192.0.2.77 Wykryto 3 główne źródła ataków. Gotowe do przekazania do Fail2ban!
Potoki analizy telemetrycznej w Linux CLI # 1. Wyszukiwanie w skompresowanych archiwach .gz bez rozpakowywania: zgrep "DROP_WAN_INPUT" /var/log/remote/192.168.1.1/*.gz | wc -l # 2. Ranking 10 najaktywniejszych adresów IP atakujących zaporę MikroTik: zgrep "DROP_WAN_INPUT" /var/log/remote/192.168.1.1/all.log* | grep -oE "proto [A-Z]+, [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | awk '{print $3}' | sort | uniq -c | sort -nr | head -n 10 Wynik analizy w konsoli serwera Linux (Top Attacking IPs): 1420 198.51.100.88 (Atak brute-force SSH z botnetu) 892 203.0.113.14 (Skanowanie portu WinBox 8291) 314 192.0.2.77 (Skanowanie portów SIP UDP 5060) ✓ Potok Uniksa pozwala na wyciągnięcie metryk w 3 sekundy bez drogich narzędzi GUI!
Slajd 44/46
Integracja rsyslog z platformą NMS (LibreNMS Syslog Collector)
Cel slajdu: Połączenie centralnego serwera rsyslog z platformą monitorowania LibreNMS i korelacja zdarzeń z metrykami SNMP.

Integracja, bezpieczeństwo i utrzymanie

Pliki tekstowe na dysku są idealne do archiwizacji i audytu, lecz operatorzy centrum monitorowania NOC potrzebują interaktywnego pulpitu WWW z wykresami i automatycznymi powiadomieniami. Rsyslog potrafi zduplikować napływający strumień i przekazać go do LibreNMS.

  • Równoległa akcja omfwd: Wewnątrz tego samego bloku ruleset rsyslog wykonuje zapis dynaFile na dysk oraz przekazuje pakiet na port 5140 kontenera LibreNMS
  • Tabela syslog w MariaDB: LibreNMS parsuje komunikaty i indeksuje je w bazie danych, wiążąc rekord z urządzeniem po adresie IP
  • Korelacja z SNMP: Gdy wykres ruchu interfejsu spada do zera, w zakładce Syslog natychmiast widoczny jest powiązany komunikat 'link down'
  • Silnik reguł alertacyjnych: Możliwość zdefiniowania reguły: wyślij powiadomienie na Slack/E-mail, jeśli w logu pojawi się fraza 'DROP_WAN_INPUT'
Dlaczego nie podłączać urządzeń bezpośrednio do LibreNMS? Rsyslog posiada zoptymalizowany, wielowątkowy silnik w języku C z buforami dyskowymi. Bezpośrednie skierowanie tysięcy pakietów UDP do interpretera PHP w LibreNMS doprowadziłoby do utraty logów przy zatorach. Rsyslog pełni rolę bufora ochronnego.
Konfiguracja rsyslog duplikująca strumień do kontenera LibreNMS
# W pliku /etc/rsyslog.d/20-remote-hosts.conf wewnątrz ruleset: ruleset(name="remote_network") { # 1. Trwały zapis na dysk SSD serwera action(type="omfile" dynaFile="RemotePerHost") # 2. Przekazanie kopii do lokalnego kontenera LibreNMS na porcie 5140 action(type="omfwd" target="127.0.0.1" port="5140" protocol="udp") stop }
Integracja rsyslog z platformą LibreNMS Kolektor rsyslog • Zapis na dysk SSD • dynaFile per host • Duplikacja pakietu Silnik telemetryczny UDP 5140 Platforma LibreNMS • Moduł Syslog • Zapis w MariaDB • Korelacja z SNMP Pulpit operatorski Korelacja Reguły Alarmowe • Powiadomienia Slack • SMS do inżyniera • Ticket w Jira Reakcja na incydent Konfiguracja przekazywania strumienia do LibreNMS w RainerScript: # Wewnątrz ruleset(name="remote_network") dodajemy równoległą akcję: action(type="omfwd" target="127.0.0.1" port="5140" protocol="udp") # W konfiguracji LibreNMS (config.php): $config['enable_syslog'] = 1; ✓ Rsyslog zapisuje kopię na trwały dysk SSD, a drugą kopię przesyła do pulpitu NMS!
Slajd 45/46
Aktywna ochrona i automatyczna blokada: Fail2ban + MikroTik
Cel slajdu: Budowa pętli aktywnej odpowiedzi na incydenty: automatyczne blokowanie atakujących na routerze MikroTik przez Fail2ban.

Integracja, bezpieczeństwo i utrzymanie

Pasywne logowanie zdarzeń to dopiero połowa sukcesu. Prawdziwą przewagę osiągamy, gdy serwer rsyslog staje się mózgiem systemu aktywnej obrony. Narzędzie Fail2ban na serwerze Linux może na bieżąco analizować plik logów routera i po wykryciu ataku dynamicznie zablokować IP intruza na MikroTiku.

  • Analiza strumienia logpath: Fail2ban śledzi plik /var/log/remote/192.168.1.1/all.log za pomocą mechanizmu inotify
  • Wyrażenie regularne failregex: Wzorzec wychwytuje próby ataku: login failure for user .* from <HOST>
  • Akcja blokady (action): Skrypt na serwerze Linux łączy się przez RouterOS REST API lub SSH i dodaje adres do tablicy /ip firewall address-list
  • Automatyczny timeout: Wpis w Address-List otrzymuje parametr timeout=24h, po czym zostaje automatycznie wykasowany bez udziału człowieka
Sprzętowa reguła zapory w RouterOS: Aby zablokować adresy z listy, w MikroTiku dodajemy na samej górze regułę zapory: /ip firewall filter add chain=input src-address-list=black_list action=drop comment="Fail2ban Auto-Block".
Weryfikacja aktywnego zablokowania adresu IP intruza na routerze
root@nms-syslog:~# fail2ban-client status mikrotik-ssh Status for the jail: mikrotik-ssh |- Filter | |- Currently failed: 0 | `- Total failed: 6 `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 203.0.113.88 # Adres został automatycznie zablokowany! [admin@MikroTik-GW] > /ip firewall address-list print # LIST ADDRESS TIMEOUT 0 black_list 203.0.113.88 23h59m48s
Aktywna pętla obrony Fail2ban i RouterOS 1. Atakujący Skanuje porty Brute-force SSH Atak 2. MikroTik Odrzuca pakiet Generuje log UDP 514 3. rsyslog Zapisuje do pliku critical.log Tail 4. Fail2ban Wykrywa 3 błędy Blokuje IP! API / SSH: /ip firewall address-list add list=black_list address=<IP> timeout=24h # Konfiguracja więzienia Fail2ban na serwerze Linux (/etc/fail2ban/jail.d/mikrotik.conf): [mikrotik-ssh] enabled = true logpath = /var/log/remote/192.168.1.1/all.log failregex = login failure for user .* from <HOST> via ssh action = mikrotik-block[target="192.168.1.1"]
Slajd 46/46
Podsumowanie inżynierskie i lista kontrolna wdrożenia
Cel slajdu: Finalne zestawienie procedur weryfikacyjnych i macierz odbiorcza gotowości produkcyjnej systemu telemetrii.

Podsumowanie warsztatu inżynierskiego

Gratulacje! Przeszedłeś przez wszystkie etapy budowy profesjonalnego, scentralizowanego systemu logowania. Aby upewnić się, że żadna krytyczna dyrektywa nie została pominięta, przed przekazaniem systemu do eksploatacji produkcyjnej zweryfikuj kompletną listę kontrolną (Deployment Checklist).

  • Rdzeń serwera: Potwierdź czystość składni rsyslogd -N1, aktywne gniazda UDP/TCP 514 oraz dedykowany potok ruleset ze słowem kluczowym stop
  • Magazyn dynaFile: Sprawdź czy katalog /var/log/remote/ posiada prawa 0750, a podkatalogi per host tworzą się automatycznie
  • Stacje robocze Linux: Zweryfikuj obecność kolejki LinkedList na wypadek awarii sieci oraz integrację z systemd-journald
  • Routery MikroTik: Upewnij się, że opcja bsd-syslog jest wyłączona (bsd-syslog=no) oraz że reguły zapory posiadają jednoznaczne prefiksy log-prefix
Pieczęć gotowości produkcyjnej: System spełnia rygorystyczne normy bezpieczeństwa teleinformatycznego (ISO 27001, PCI-DSS, KRI). Zdarzenia są rejestrowane asynchronicznie, segregowane dynamicznie na poziomie systemu plików i zabezpieczone przed utratą w razie awarii.
Automatyczny audyt gotowości produkcyjnej na serwerze Linux
root@nms-syslog:~# ./verify-syslog-stack.sh [*] Sprawdzanie procesu rsyslog... [PASS] [*] Sprawdzanie nasłuchu gniazd UDP/TCP 514... [PASS] [*] Walidacja składni rsyslogd -N1... [PASS] [*] Uprawnienia katalogu /var/log/remote (0750)...[PASS] [*] Konfiguracja rotacji logrotate... [PASS] [*] Odbiór pakietów z routera MikroTik... [PASS] [*] Odbiór pakietów ze stacji roboczych Linux... [PASS] ================================================================ STATUS: System zdalnego logowania w 100% gotowy do eksploatacji!
Checklist wdrożenia produkcyjnego Syslog Serwer Linux (rsyslog) [x] Pakiety: rsyslog, rsyslog-gnutls [x] Porty: 514 UDP/TCP otwarte w UFW [x] Składnia: 100% czysty RainerScript [x] Moduły: imudp i imtcp aktywne [x] dynaFile: Zapis per host/IP [x] Podział wag: critical.log i all.log [x] Izolacja: ruleset(name="remote") [x] Tarcza: instrukcja 'stop' na końcu [x] Uprawnienia: 0750 syslog:adm [x] Rotacja: logrotate (90 dni, compress) [x] Weryfikacja: rsyslogd -N1 (kod 0) Klienci (Linux & RouterOS) [x] Linux: omfwd przez niezawodny TCP [x] Linux: Bufor dyskowy LinkedList [x] Linux: queue.maxdiskspace="1g" [x] Linux: ForwardToSyslog=yes w journald [x] MikroTik: action=remote UDP 514 [x] MikroTik: bsd-syslog=no (czas ISO) [x] MikroTik: src-address na interfejs [x] MikroTik: Tematy critical, error, warn [x] MikroTik: log=yes na regułach drop [x] MikroTik: log-prefix dla identyfikacji [x] MikroTik: Logowanie dhcp,info i account