SYSLOG-Tools(at)Work består av to Python-programmer, SYSLOG Receiver og SYSLOG Sender, med hvert sitt web-grensesnitt. Dokumentet beskriver arkitekturen, protokollhåndteringen, sikkerhetsmekanismene, installasjonsmodellen og grensesnittene, og er skrevet for drift, sikkerhetsgjennomgang og videreutvikling.
1. Formål og omfang
Produkt |
SYSLOG-Tools(at)Work 2.0.0 |
Komponenter |
SYSLOG Receiver ( |
Bruksområde |
Testing, feilsøking, demonstrasjon og opplæring i syslog (UDP og TLS 1.3), og validering av syslog-oppsett i nettverksutstyr og servere |
Ikke formål |
Langtidslagring, SIEM eller loggarkiv. Mottakeren holder meldinger bare i minnet. |
Målplattformer |
Rocky Linux 9 / RHEL 9 / AlmaLinux 9 (primær), Debian 12, Ubuntu 22.04/24.04, Photon OS – på fysisk server, VMware-VM, Proxmox VE VM og Proxmox VE LXC |
Kjøremodell |
Vanlige Linux-prosesser styrt av systemd (ingen containere, ingen pip, ingen internettilgang) |
Språk |
Engelsk og norsk (bokmål) i web-grensesnitt, servermeldinger, manualer og installasjonsskript |
2. Arkitektur
2.1. Oversikt
avsendere (nettverksutstyr, servere, SYSLOG Sender)
│ UDP 514 │ TLS 1.3 / TCP 6514
▼ ▼
┌───────────────────────────── syslog-receiver.service ─────────────────────────────┐
│ UDP-tråd ──┐ TLS-lytter ──► én tråd per tilkobling │
│ ├─► parse (RFC 3164/5424) ─► ringbuffer (deque, 2000) + statistikk │
│ │ ▲ │
│ HTTP-server (ThreadingHTTPServer, 8080) ───────┘ /api/messages, /api/stats … │
│ ├─ innlogging, CSRF, Host-sjekk (WebSecurityMixin) │
│ ├─ sertifikat-API (CertAPIMixin) ──► /opt/syslog-tools/certs │
│ └─ HTML/JS-side + manual (EN/NO) │
└────────────────────────────────────────────────────────────────────────────────────┘
┌───────────────────────────── syslog-sender.service ───────────────────────────────┐
│ HTTP-server (8000) ─► /send ─► SyslogHTTPConfigurator ─► UDP-socket / TLS 1.3 │
│ └─► RepeatJob (bakgrunnstråd, fast takt, kan stoppes) │
│ sertifikat-API (delt kode) ─► /opt/syslog-tools/certs │
│ kommandolinje: python3 sender.py -d … -m … (uten web) │
└────────────────────────────────────────────────────────────────────────────────────┘
2.2. Kodemoduler
| Fil | Linjer (ca.) | Innhold |
|---|---|---|
|
1 650 |
|
|
1 600 |
|
|
820 |
Nettverkshjelpere (IPv4/IPv6, dual stack), |
|
700 |
Felles brukergrensesnitt: tema (CSS), topplinje, bunnlinje, faner, utlogging, sertifikatfanen, loggfanen, sidene |
|
540 |
Norsk ordliste for brukergrensesnittet ( |
Det er ingen avhengigheter utenfor Pythons standardbibliotek. Minste Python-versjon er 3.7, kontrollert med vermin.
2.3. Prosess- og trådmodell
-
Receiver: én prosess. Én tråd leser UDP (
recvfromi en løkke), én tråd tar imot TLS-tilkoblinger, og hver TLS-tilkobling får sin egen tråd (daemon-tråder). HTTP håndteres avThreadingHTTPServer(én tråd per forespørsel). Delte data (buffer og statistikk) beskyttes av énthreading.Lock. -
Sender: én prosess med
ThreadingHTTPServer. Enkeltmeldinger sendes i forespørselstråden (serialisert medsingle_lock). Gjentatt sending kjører i en egenRepeatJob-tråd med egen socket. Bare én jobb kan kjøre om gangen (job_lock).
3. Protokoller
3.1. Mottak (Receiver)
UDP (RFC 5426) |
Én melding per datagram, opptil 65 535 byte. Ingen |
TLS (RFC 5425) |
Bare TLS 1.3 ( |
Klientsertifikat |
Valgfritt ( |
Begrensninger |
256 samtidige TLS-tilkoblinger, 32 per kildeadresse, 15 s til håndtrykket er ferdig, 600 s inaktivitet ( |
3.1.1. Tolking
-
<PRI>(0–191) gir facility = PRI ÷ 8 og alvorlighet = PRI mod 8. Mangler PRI eller er den ugyldig, brukes USER.NOTICE og meldingen merkesNO-PRI(RFC 3164 §4.3.3). -
RFC 5424:
1 TIMESTAMP HOST APP PROCID MSGID SD [MSG]. Strukturerte data tolkes med anførselstegn og escape-tegn (\",\],\\), og en eventuell BOM foran meldingen fjernes. -
RFC 3164:
Mmm dd hh:mm:sseller ISO-tidsstempel, deretter vert ogTAG[PID]:. Alle deler er valgfrie i praksis.
Feltene i en tolket melding: id, received_at, source_ip, transport, tls_version, tls_cipher, client_cn, facility, severity, rfc_type, timestamp, hostname, app_name, procid, msgid, structured_data, message, raw.
3.1.2. Buffer og fortløpende visning
Meldingene ligger i en collections.deque(maxlen=N) (standard 2000, --buffer). Nettleseren spør /api/messages?since=<siste id> hvert sekund og får bare nye meldinger. En «epoke» (start_token-clear_count) forteller nettleseren om bufferen er tømt eller tjenesten startet på nytt, slik at hele listen da lastes på nytt. Statistikk hentes hvert annet sekund. Nye spørringer sendes først når den forrige er ferdig, så de ikke hoper seg opp på trege linjer.
3.2. Sending (Sender)
RFC 3164 |
|
RFC 5424 |
|
MAC-adresse |
RFC 3164: |
UDP |
Adressen slås opp én gang per socket. Valgfri kildeadresse ( |
TLS 1.3 |
|
Gjentatt sending |
Meldingene planlegges mot starttiden ( |
4. Web-grensesnitt
4.1. Oppbygning
Hver side er ett selvstendig HTML-dokument, satt sammen av programmet ved første forespørsel og deretter mellomlagret. Delte deler fra syslog_ui.py settes inn via plassholdere: {{THEME_CSS}}, {{NAVBAR}}, {{FOOTER}}, {{I18N_JS}}, {{FETCH_JS}}, {{APP_JS}}, {{CERT_PANEL}}, {{CERT_JS}}, {{LOG_PANEL}}, {{LOG_JS}}, {{APP_TITLE}}, {{APP_ICON}}, {{HOSTNAME}}, {{VERSION}} og {{DEFAULT_LANG}}.
Sidene laster ingen eksterne ressurser og har ingen JavaScript-biblioteker. Ikonene er egne SVG-tegninger i siden, og pilen i nedtrekkslistene er en innebygd SVG (data:-URI).
Design |
Samme visuelle språk som SNMP-Trap-Tools(at)Work: topplinje |
Faner |
|
Meldingstabell |
Én |
Utlogging |
HTTP Basic har ingen utlogging. Knappen Logg ut sender en |
Logger |
|
Manual |
|
4.2. Språk (i18n)
Kildespråk |
Engelsk. Alle tekster skrives på engelsk i HTML/JS og oversettes med |
Statisk tekst |
|
Dynamisk tekst |
|
Språkbytte |
Lyttere ( |
Lagring |
|
Servermeldinger |
|
Standardspråk |
|
Lokale formater |
Klokkeslett med |
4.3. HTTP-API
Se Brukermanual, kapittel 8, for alle endepunkter. Alle svar er JSON (application/json; charset=utf-8), og tilstandsendrende kall er POST.
5. Sikkerhet
5.1. Tilgangskontroll i web-laget
Innlogging |
HTTP Basic, bruker |
CSRF |
POST krever hodet |
DNS rebinding |
|
Klikkapring m.m. |
|
XSS |
All tekst fra nettverket (syslog-meldinger, filnavn, sertifikatfelt) escapes før den settes inn i HTML. |
Filvalg |
TLS-filer valgt i nettleseren må ligge direkte i sertifikatkatalogen ( |
Opplasting |
Maks 1 MiB, filnavn etter |
Nedlasting |
Filer som inneholder en privat nøkkel, kan aldri lastes ned. |
Sertifikatgenerering |
|
Skrivebeskyttet modus |
|
5.2. Prosessisolasjon (systemd)
Bruker |
|
Rettigheter |
|
Profil |
|
Profil |
|
Valg av profil |
|
SELinux |
|
5.3. Kjente begrensninger
-
Web-grensesnittet bruker vanlig HTTP (ikke HTTPS). Passord og opplastede nøkler går ukryptert over nettet. Tiltak: eget administrasjonsnett,
--admin-net, eller en omvendt proxy med TLS foran. -
HTTP Basic har ingen utlogging eller tidsavbrudd for økten (nettleseren husker innloggingen til den lukkes).
-
UDP-syslog er verken autentisert eller kryptert, og kildeadresser kan forfalskes.
-
Meldinger lagres bare i minnet.
6. Installasjon og filstruktur
6.1. Installert struktur
| Sti | Eier/modus | Innhold |
|---|---|---|
|
root 755 |
|
|
root 755 |
|
|
syslog-tools 600 |
Passord til web-grensesnittet |
|
root 755 |
Tilsvarende for senderen |
|
syslog-tools 750 |
Sertifikater og nøkler (600), |
|
root 644 |
Tjeneste |
|
root 644 |
Tjeneste |
6.2. Installasjonsprogrammet
install.sh går gjennom 8 trinn: forutsetninger, bruker og kataloger, programfiler, sertifikater, systemd, start (med reserve til basic), brannmur og verifisering. Det kan kjøres på nytt så mange ganger du vil (idempotent): valg fra install.conf blir standardverdier, passord og sertifikater beholdes, og tjenestene startes på nytt.
Verifiseringen sender en testmelding over UDP og leter etter den med /api/messages.
Plattformgjenkjenning (lib/common.sh):
-
/etc/os-release(leses i et underskall) →OS_FAMILY= rhel / debian / photon / suse / other -
systemd-detect-virt→VIRT= none / vmware / kvm / lxc …, ogIS_CONTAINER -
brannmur: aktiv
firewalld→firewall-cmd, aktivufw→ufw, ellers ingen endring
6.3. Oppgradering fra 1.x
Når /opt/syslog-infrastructure finnes og den nye sertifikatkatalogen er tom, kopieres sertifikatene, og stiene i receiver-tls.json skrives om. Web-passordene kopieres. Tjenestenavnene er de samme som før og skrives over. Programmene ser også etter den gamle sertifikatkatalogen hvis den nye mangler (LEGACY_ROOT).
7. Konfigurasjon
7.1. Receiver – kommandolinje
| Valg | Standard | Beskrivelse |
|---|---|---|
|
0.0.0.0 |
Lytteadresse ( |
|
514 |
UDP-port |
|
8080 / 0.0.0.0 |
Web-grensesnitt |
|
2000 |
Meldinger i minnet |
|
av |
Ikke skriv hver melding til journalen |
|
TLS ved oppstart (overstyres av |
|
|
600 |
Sekunder før en inaktiv TLS-tilkobling lukkes |
|
/opt/syslog-tools/certs |
Sertifikatkatalog |
|
Skrivebeskyttet / ignorer lagrede TLS-innstillinger |
|
|
Lag test-PKI og avslutt |
|
|
Innlogging og vertsnavn |
|
|
en |
Standardspråk i web-grensesnittet ( |
7.2. Sender – kommandolinje
--http, --port, --http-bind, --lang, --auth-file, --no-auth, --allowed-host, --cert-dir og --no-cert-upload styrer web-modus. -d, -s, -t, -p, -m, --rfc, --facility, --severity, --hostname, --app, --mac, --procid, --msgid, --repeat, --duration og --tls- styrer kommandolinjemodus. I web-modus brukes --tls- som standardverdier i skjemaet.
7.3. Lagret tilstand
|
TLS-innstillinger fra web-grensesnittet ( |
|
Valgene fra installasjonen ( |
Nettleseren |
|
8. Drift
-
Logg: fanen Logger i web-grensesnittet (siste 2000 linjer), eller
journalctl -u syslog-receiver/-u syslog-sender. Hver melding (med mindre--quieter brukt), hver TLS-tilkobling, hvert mislykket håndtrykk og hver sertifikatendring logges på engelsk. -
Overvåking:
GET /api/stats(krever innlogging) gir tellere og status (udp_status,tls_status). -
Ressursbruk: En melding tar typisk 1–2 KiB i minnet, så standardbufferen på 2000 meldinger bruker bare noen få MiB. Hele prosessen bruker typisk 20–40 MiB RAM. CPU-bruken øker med meldingsraten. Ved høy trafikk bør
--quietbrukes, fordi skriving til journalen ellers dominerer. -
Sikkerhetskopi:
/opt/syslog-tools/certsogweb-password-filene. Alt annet kan installeres på nytt fra pakken.
9. Kvalitetssikring
Se Revisjonsrapport.md for kodegjennomgang, sikkerhetsvurdering og testresultater.