================================================================
  Apache Guacamole + Nginx + Web GUI — Instalacijske upute
================================================================

SADRŽAJ
-------
1. Što je ovo?
2. Preduvjeti
3. Instalacija
4. Pitanja pri instalaciji
5. Nakon instalacije
6. Web GUI — stranice i funkcije
7. Upravljanje putem terminala (manage.sh)
8. Sigurnosni slojevi
9. SSL opcije
10. Korisne naredbe
11. Struktura datoteka


================================================================
1. ŠTO JE OVO?
================================================================

Kompletno rješenje za pristup Windows/Linux računalima putem
web browsera koristeći RDP, VNC ili SSH protokole.

Komponente:
  - Apache Guacamole  — web-based remote desktop gateway
  - PostgreSQL        — baza podataka (u Dockeru)
  - Nginx             — reverse proxy s Basic Auth zaštitom
  - fail2ban          — automatsko blokiranje brute-force napada
  - TOTP 2FA          — dvofaktorska autentikacija (Google Auth)
  - Web GUI           — web sučelje za upravljanje svim gore navedenim

Podržani operativni sustavi:
  - Ubuntu / Debian / Linux Mint / Pop!_OS
  - RHEL / CentOS / Rocky Linux / AlmaLinux
  - Fedora
  - Arch Linux / Manjaro
  - openSUSE


================================================================
2. PREDUVJETI
================================================================

  - Svježa instalacija Linuxa
  - Root pristup (sudo)
  - Internetska veza (za preuzimanje paketa i Docker imagea)
  - Za Let's Encrypt SSL: javna domena koja pokazuje na server
  - Za GeoIP: besplatni MaxMind račun (maxmind.com/en/geolite2/signup)


================================================================
3. INSTALACIJA
================================================================

Kopirati datoteke na server i pokrenuti:

    sudo bash install.sh

Skripta je potpuno automatizirana — sve instalira sama.
Nema potrebe pokretati ništa drugo nakon toga.

Što skripta instalira:
  - Docker + Docker Compose
  - Nginx, fail2ban, openssl, apache2-utils
  - Apache Guacamole (guacamole + guacd + PostgreSQL) u Dockeru
  - TOTP 2FA ekstenziju za Guacamole
  - Nginx reverse proxy konfiguraciju
  - HTTP Basic Auth
  - fail2ban pravila
  - SSL certifikat (po izboru)
  - GeoIP blokiranje (po izboru)
  - Web GUI za upravljanje (po izboru)


================================================================
4. PITANJA PRI INSTALACIJI
================================================================

Skripta postavlja sljedeća pitanja redom:

  1. DOMENA
     Unesite domenu (npr. rdp.firma.com)
     Pritisnite Enter za automatsko korištenje IP adrese servera.

  2. NGINX BASIC AUTH — korisničko ime
     Zadano: admin

  3. NGINX BASIC AUTH — lozinka
     Obavezno polje. Ovo je PRVI sloj zaštite ispred Guacamolea.

  4. SSL CERTIFIKAT
     L = Let's Encrypt  — besplatan, treba valjana domena, auto-obnova
     S = Self-signed    — radi s IP adresom, browser pokazuje upozorenje,
                          vrijedi 10 godina, bez obnove
     N = Bez SSL        — HTTP only (ok za internu mrežu)

     Za L: zatražit će i email adresu za Let's Encrypt obavijesti.

  5. GEOIP BLOKIRANJE
     y = da, n = ne
     Blokira pristup iz svih zemalja osim onih koje navedete.
     Potrebni: MaxMind Account ID i License Key (besplatno).
     Primjer zemalja: HR BA SI RS AT DE

  6. WEB GUI
     y = da, n = ne
     Instalira Flask web aplikaciju za upravljanje svim postavkama.
     Ako da:
       - Korisničko ime za GUI
       - Lozinka za GUI (min 8 znakova)
       - URL path (zadano: /guacadmin/)

Nakon unosa svih podataka skripta prikazuje generirane lozinke
koje treba sačuvati, a zatim automatski instalira sve.

Sve lozinke se na kraju spremaju u:
    /opt/guacamole/credentials.txt
    (čitljivo samo root korisniku)


================================================================
5. NAKON INSTALACIJE
================================================================

Pristup Guacamolea:
    http(s)://DOMENA-ILI-IP/guacamole/

  Korak 1: Browser traži Nginx Basic Auth (korisnik/lozinka iz koraka 3)
  Korak 2: Guacamole login stranica
             Korisnik: guacadmin
             Lozinka:  guacadmin
  Korak 3: TOTP 2FA (ako je ekstenzija preuzeta)
             Skenirajte QR kod s Google Authenticator ili Authy

  !! ODMAH PROMIJENITE guacadmin lozinku nakon prvog prijave !!
     Settings → Users → guacadmin → Promijeni lozinku

Pristup Web GUI (ako je instaliran):
    http(s)://DOMENA-ILI-IP/guacadmin/
    Korisnik/lozinka: ono što ste upisali pri instalaciji

Za self-signed SSL — browser upozorenje:
    Chrome:  kliknite "Napredno" → "Nastavi na [IP/domena]"
    Firefox: kliknite "Napredno" → "Prihvati rizik i nastavi"
    Edge:    kliknite "Detalji" → "Nastavi na stranicu"


================================================================
6. WEB GUI — STRANICE I FUNKCIJE
================================================================

  DASHBOARD
    - Prikaz statusa svih Docker kontejnera (guacamole, guacd, postgres)
    - Prikaz statusa sistemskih servisa (nginx, fail2ban, docker)
    - Status GeoIP blokiranja
    - Status SSL certifikata
    - Broj trenutno zabanjenih IP adresa
    - Auto-osvježava se svakih 15 sekundi

  BASIC AUTH
    - Prikaz svih korisnika
    - Dodavanje novog korisnika
    - Promjena lozinke postojećeg korisnika
    - Brisanje korisnika

  GEOIP
    - Uključivanje GeoIP blokiranja (treba MaxMind account)
    - Promjena dozvoljenih zemalja (ISO-2 kodovi)
    - Onemogućavanje GeoIP blokiranja
    - Ažuriranje GeoIP baze podataka
    - Brza selekcija čestih zemalja klikom

  FAIL2BAN
    - Prikaz zabanjenih IP adresa po jailu
    - Odbanjivanje IP adrese
    - Ručno baniranje IP adrese
    - Promjena maxretry (broj pokušaja prije bana)
    - Promjena bantime (trajanje bana u sekundama)
      Primjeri: 3600=1h, 86400=1dan, 604800=1tjedan

  KONTEJNERI
    - Status svakog Docker kontejnera
    - Start / Stop / Restart svih kontejnera
    - Live log streaming (guacamole, guacd, postgres,
      nginx access, nginx error, fail2ban)

  SSL
    - Aktivacija Let's Encrypt certifikata
    - Generiranje self-signed certifikata
    - Ručna obnova Let's Encrypt certifikata
    - Prikaz informacija o self-signed certifikatu

  AŽURIRANJA
    - Ažuriranje Guacamole (docker pull + restart)
      Live output — vidite svaki korak u realnom vremenu
    - Ažuriranje Nginx
      Live output
    - Ažuriranje fail2ban
    - Ažuriranje svih sistemskih paketa
      Live output (može potrajati duže)

  BACKUP
    - Kreiranje backupa (konfiguracija + PostgreSQL baza)
      Sprema se u /root/guacamole_backup_DATUM_VRIJEME.tar.gz
    - Prikaz dostupnih backupa
    - Brisanje backupa

  POSTAVKE
    - Promjena lozinke za Web GUI


================================================================
7. UPRAVLJANJE PUTEM TERMINALA (manage.sh)
================================================================

Alternativno, sve se može upravljati i putem CLI skripte:

    sudo bash manage.sh

Meni opcije:
  1) Status servisa
  2) Basic Auth (korisnici)
  3) SSL certifikat
  4) GeoIP blokiranje
  5) fail2ban (banned IP-ovi)
  6) Guacamole (Docker kontejneri)
  7) Nginx
  8) Backup & Restore


================================================================
8. SIGURNOSNI SLOJEVI
================================================================

Pristup Guacamolea prolazi kroz sljedeće slojeve zaštite:

  1. GEOIP (ako je uključen)
     Blokira sve IP adrese iz zemalja koje nisu na listi.
     Vraca HTTP 403.

  2. RATE LIMITING (nginx)
     Ograničava broj zahtjeva po IP adresi.
     Sprječava preopterećenje servisa.

  3. NGINX BASIC AUTH
     Korisničko ime i lozinka prije nego se uopće vidi
     Guacamole login stranica. Drugi sloj.

  4. FAIL2BAN
     Nakon 5 neuspjelih pokušaja Basic Auth ili Guacamole
     logina, IP adresa se automatski bani na 1 sat.
     SSH je zaštićen s 3 pokušaja, ban 24 sata.

  5. GUACAMOLE LOGIN
     Vlastita autentikacija Guacamole aplikacije.

  6. TOTP 2FA (ako je ekstenzija instalirana)
     Jednokratni kod iz authenticator aplikacije.

  7. SSL/TLS (ako je konfiguriran)
     Enkriptira sav promet između browsera i servera.


================================================================
9. SSL OPCIJE
================================================================

LET'S ENCRYPT:
  - Besplatan certifikat, povjerljiv u svim browserima
  - Zahtijeva domenu koja je javno dostupna
  - DNS mora pokazivati na IP servera
  - Auto-obnova (svakih 90 dana, automatski)
  - Certifikati: /etc/letsencrypt/live/DOMENA/

SELF-SIGNED:
  - Radi s IP adresom ili domenom
  - Enkriptiran promet (HTTPS)
  - Browser pokazuje upozorenje — normalno je, kliknite "Nastavi"
  - Vrijedi 10 godina, ne treba obnovu
  - Certifikati: /etc/ssl/guacamole/selfsigned.crt
                 /etc/ssl/guacamole/selfsigned.key

BEZ SSL (HTTP):
  - Promet nije enkriptiran
  - Ok za internu mrežu gdje je fizička sigurnost osigurana
  - Može se naknadno dodati SSL kroz Web GUI (SSL stranica)


================================================================
10. KORISNE NAREDBE
================================================================

--- Guacamole ---
  Logovi:          docker logs -f guacamole
  Restart:         cd /opt/guacamole && docker compose restart
  Stop:            cd /opt/guacamole && docker compose stop
  Status:          docker ps

--- Nginx ---
  Test konfiguracije: nginx -t
  Reload:             systemctl reload nginx
  Logovi:             tail -f /var/log/nginx/access.log
  Error logovi:       tail -f /var/log/nginx/error.log

--- fail2ban ---
  Status:             fail2ban-client status
  Zabanjeni (nginx):  fail2ban-client status nginx-basicauth
  Odbani IP:          fail2ban-client set nginx-basicauth unbanip IP
  Baniraj IP:         fail2ban-client set nginx-basicauth banip IP

--- SSL ---
  Obnovi certifikat:  certbot renew --force-renewal
  Provjera certif.:   certbot certificates
  Self-signed info:   openssl x509 -noout -dates -in /etc/ssl/guacamole/selfsigned.crt

--- Web GUI ---
  Start:    systemctl start guacamole-webgui
  Stop:     systemctl stop guacamole-webgui
  Restart:  systemctl restart guacamole-webgui
  Logovi:   journalctl -u guacamole-webgui -f

--- Backup ---
  Ručni backup: tar -czf /root/backup_$(date +%Y%m%d).tar.gz /opt/guacamole


================================================================
11. STRUKTURA DATOTEKA
================================================================

/opt/guacamole/
  docker-compose.yml          — Docker definicija kontejnera
  .env                        — PostgreSQL lozinka (samo root)
  credentials.txt             — Sve lozinke (samo root)
  db-init/
    initdb.sql                — PostgreSQL inicijalizacijska skripta
  extensions/
    guacamole-auth-totp-*.jar — TOTP 2FA ekstenzija
  webgui/                     — Web GUI aplikacija
    app.py                    — Flask backend
    config.json               — GUI korisnik i lozinka
    venv/                     — Python virtualenv
    templates/                — HTML stranice

/etc/nginx/
  sites-available/guacamole   — Nginx konfiguracija (Debian/Ubuntu)
  conf.d/guacamole.conf       — Nginx konfiguracija (RHEL/Arch)
  conf.d/guacamole-maps.conf  — WebSocket i rate limit zone
  conf.d/guacamole-geoip.conf — GeoIP konfiguracija (ako je uključena)
  .guac_htpasswd              — Basic Auth korisnici

/etc/fail2ban/
  jail.d/guacamole.conf       — fail2ban jail konfiguracija
  filter.d/nginx-basicauth.conf
  filter.d/nginx-guacamole.conf

/etc/ssl/guacamole/           — Self-signed certifikati (ako su generirani)
  selfsigned.crt
  selfsigned.key

/etc/systemd/system/
  guacamole-webgui.service    — Web GUI systemd servis

/root/
  guacamole_backup_*.tar.gz   — Backupi (samo root)


================================================================
  Verzija dokumenta: 1.0
  Guacamole verzija: 1.5.5
================================================================
