Modul Sigurnost (Fail2ban)

Kompletan pregled modula Sigurnost u panelu — instalacija, tabovi (Pregled, Jailovi, Banani IP-jevi, Log, Postavke), preset jailovi, zaštita prijave i UFW integracija.

  1. Što modul radi

    Modul Sigurnost (ruta /fail2ban) upravlja Fail2ban servisom na serveru: automatski ban IP adresa nakon neuspjelih pokušaja (SSH, web auth, FTP, prijava na panel). Dostupan je admin korisnicima u bočnom izborniku nakon instalacije Fail2ban paketa kroz Web stack. Ako paket nije instaliran, stranica prikazuje upute za instalaciju.

  2. Instalacija Fail2bana

    Web stack → Instalacija → označite komponentu Fail2ban → Pregled instalacije → potvrdite. Panel instalira apt paket fail2ban i pokreće post-instalacijsku skriptu install-fail2ban.sh koja kreira uAdmin preset datoteke u /etc/fail2ban/jail.d/uadmin-*.conf i filter za panel login.

    # Ručno (SSH, root) — isto kao panel:
    sudo /usr/local/uadmin/bin/install-stack.sh fail2ban
    sudo fail2ban-client status
    Savjet

    Preporučeno je imati instaliran i UFW (modul Firewall) — banovi se tada primjenjuju kroz UFW umjesto raw iptables.

  3. Preset jailovi (uAdmin)

    Nakon instalacije panel automatski kreira sljedeće jailove (ovisno o instaliranim servisima). Datoteke su u /etc/fail2ban/jail.d/ s prefiksom uadmin-.

    sshd                 — SSH brute-force (maxretry 4, bantime 24h)
    nginx-http-auth      — Nginx HTTP auth greške (port 80/443)
    apache-auth          — Apache auth greške (port 80/443)
    vsftpd               — FTP neuspjeli login (maxretry 3)
    uadmin-panel-login   — Panel login (port 10001, log:
                           /var/log/uadmin-panel/login-failed.log)
    uadmin-cms-admin-login — Joomla /administrator, WordPress wp-login.php
                           (log: /web/logs/*/proxy-access.log, access.log)
                           maxretry 25 / 5m, bantime 2h
    
    Globalni DEFAULT (uadmin-default.conf):
      bantime  = 1h
      findtime = 10m
      maxretry = 5
      ignoreip = 127.0.0.1/8 ::1
  4. Tab Pregled (Dashboard)

    Prikazuje: status Fail2ban servisa (aktivan/neaktivan), ukupan broj trenutno bananih IP-jeva, broj aktivnih jailova, korišteni ban backend (ufw / iptables). Kartice s globalnim pragovima (bantime, findtime, maxretry) i pregledom jailova s brojem banova. Gumb Reload ponovno učitava konfiguraciju (fail2ban-client -t + systemctl reload).

  5. Sažetak na nadzornoj ploči

    Na početnoj nadzornoj ploči (/) lazy widget Fail2ban prikazuje isti sažetak bez otvaranja modula Sigurnost — broj banova, aktivne jailove i status servisa.

  6. Tab Jailovi

    Tablica svih jailova koje Fail2ban prijavljuje. uAdmin preset jailovi imaju link Uredi i gumb Isključi. Uređivanje otvara editor datoteke uadmin-*.conf — možete mijenjati enabled, maxretry, findtime, bantime, port, logpath itd. Prije spremanja potrebna je potvrda checkboxom. Jail sshd je označen kao zaštićen (SSH) — isključivanje traži dodatnu potvrdu jer uklanja SSH brute-force zaštitu.

    Savjet

    Jailovi koji nisu uAdmin preset (npr. ručno dodani u /etc/fail2ban/jail.local) prikazuju se u tablici, ali se ne mogu uređivati kroz panel.

  7. Tab Banani IP-jevi

    Popis svih trenutno bananih IP adresa po jailu. Za svaki red: gumb Unban uklanja ban za tu IP u tom jailu. Ispod tablice, po jailu s aktivnim banovima, dostupan je Unban sve u jailu. Korisno kad ste se slučajno banali s vlastite adrese ili trebate hitno otključati klijenta.

    # SSH alternativa (root):
    sudo fail2ban-client status sshd
    sudo fail2ban-client set sshd unbanip 203.0.113.50
    sudo fail2ban-client set uadmin-panel-login unbanip 203.0.113.50
    sudo fail2ban-client set uadmin-cms-admin-login unbanip 203.0.113.50
  8. Tab Log

    Dva dijela: (1) Audit panela — zadnje akcije koje su admini poduzeli u modulu Sigurnost (reload, uključivanje/isključivanje jaila, unban, spremanje jaila ili globalnih postavki). (2) Fail2ban log — zadnje linije iz /var/log/fail2ban.log (tail).

  9. Tab Postavke (globalni DEFAULT)

    Uređivanje [DEFAULT] sekcije u /etc/fail2ban/jail.d/uadmin-default.conf: bantime (trajanje bana, npr. 1h, 24h), findtime (prozor promatranja, npr. 10m), maxretry (broj neuspjelih prije bana), ignoreip (pouzdane IP/CIDR adrese odvojene razmakom). Promjena zahtijeva potvrdu checkboxom. Nakon spremanja panel pokreće fail2ban-client -t i reload servisa.

    ignoreip = 127.0.0.1/8 ::1 203.0.113.10 198.51.100.0/24
    Savjet

    Uvijek dodajte svoju fiksnu uredsku/kućnu IP u ignoreip prije agresivnih postavki — inače se možete banati sami.

  10. Zaštita prijave na panel (rate limit)

    Odvojeno od Fail2bana, ali dio sigurnosne priče: Postavke → Sigurnost. Laravel rate limit ograničava neuspjele pokušaje prijave po IP adresi (default 5 pokušaja u 60 sekundi). Nakon prekoračenja korisnik vidi poruku o privremenoj blokadi. Uspješna prijava resetira brojač. Svaki neuspjeli login zapisuje se u /var/log/uadmin-panel/login-failed.log — taj log koristi jail uadmin-panel-login.

    # Primjer log linije:
    2026-07-02 12:00:00 Login FAILED from 203.0.113.50 email=admin@localhost
    
    # Jail uadmin-panel-login (preset):
    maxretry = 10
    findtime = 10m
    bantime  = 24h
    port     = 10001
  11. CMS admin login (Joomla, WordPress)

    Standardni jailovi nginx-http-auth i apache-auth hvataju samo HTTP Basic Auth (401). Joomla brute-force na /administrator/index.php vraća 200/302 — ne aktivira ih. uAdmin preset jail uadmin-cms-admin-login broji POST zahtjeve na /administrator i /wp-login.php u access logovima projekata. Logpath koristi glob /web/logs/*/proxy-access.log (frontend proxy) i /web/logs/*/access.log (direktni backend). Pri kreiranju novog projekta panel automatski reloada Fail2ban da prepozna novi log. Napomena: intenzivan legitiman rad u admin sučelju (mnogo POST u kratkom vremenu) može teorijski preći prag — stavite uredsku IP u ignoreip ili povećajte maxretry u Sigurnost → Jailovi.

    # Primjer linije u proxy-access.log:
    203.0.113.50 - - [02/Jul/2026:12:00:00 +0000] "POST /administrator/index.php HTTP/1.1" 200 4521
    
    # Jail uadmin-cms-admin-login (preset):
    maxretry = 25
    findtime = 5m
    bantime  = 2h
    port     = http,https
    
    sudo fail2ban-client status uadmin-cms-admin-login
  12. UFW i Firewall modul

    Kad je UFW instaliran, install-fail2ban.sh postavlja banaction = ufw. Banovi se tada vide u modulu Firewall (UFW status/rules) kao REJECT/DENY pravila koja Fail2ban dodaje. Modul Sigurnost na Pregledu prikazuje hint ako UFW nije instaliran (Fail2ban koristi iptables). Preporuka: instalirajte UFW prije Fail2bana.

  13. Audit zapisnik panela

    Sve akcije u modulu Sigurnost bilježe se u globalni audit zapisnik panela (Logovi → Audit): fail2ban_reload, fail2ban_jail_toggle, fail2ban_unban, fail2ban_save_jail, fail2ban_save_settings. Korisno za reviziju tko je uključio/isključio jail ili ručno unbanirao IP.

  14. CLI naredbe (SSH)

    Panel koristi skripte iz /usr/local/uadmin/bin/. Ručno održavanje kad nema pristupa panelu:

    sudo /usr/local/uadmin/bin/fail2ban-status.sh
    sudo /usr/local/uadmin/bin/fail2ban-reload.sh
    sudo /usr/local/uadmin/bin/install-fail2ban.sh
    
    sudo fail2ban-client status
    sudo fail2ban-client status uadmin-panel-login
    sudo fail2ban-client status uadmin-cms-admin-login
    sudo fail2ban-client ping
    sudo systemctl status fail2ban
    sudo tail -30 /var/log/fail2ban.log
    sudo tail -30 /var/log/uadmin-panel/login-failed.log
  15. Rješavanje problema

    Servis neaktivan: systemctl start fail2ban i provjerite fail2ban-client -t. Konfiguracija ne prolazi test: često krivi banaction (ufw vs ufw-multiport) — pokrenite install-fail2ban.sh ponovno. Banali ste sami: SSH s druge IP ili konzola hypervisora → unban u modulu ili fail2ban-client set <jail> unbanip. Panel login ne radi nakon više pokušaja: rate limit (minute) ili Fail2ban ban na port 10001 (sati) — provjerite Banani IP-jevi. Ne mogu se spremiti postavke: provjerite sudoers i da www-data/uadmin PHP-FPM pool može pokrenuti skripte.