Files
GuacPanel/UPUTE.txt
T
njomac 9b04c158a5 feat: hrvatski raspored tipkovnice za RDP (hr-hr-qwertz)
Guacamole isporucuje 22 rasporeda, hrvatskog nema. Rasporedi se
kompajliraju u libguac-client-rdp, pa se ne mogu dodati naknadno —
guacd se mora ponovno prevesti.

guacd-hr/hr_hr_qwertz.keymap
  Izveden iz X11 "hr" rasporeda na stvarnom sustavu (hr -> rs(latin):
  rs(common) za brojcani red, rs(latalpha) za s/d/c/c/z s dijakriticima,
  rs(latlevel3) za AltGr), ne po sjecanju. Strukturno prati cs-cz-qwertz
  jer njegov caps model dira samo slova, dok de_de_qwertz izvrce i
  brojcani red.

guacd-hr/build.sh
  Preuzme sluzbeni izvor tražene verzije, ubaci keymap u keymaps/ i u
  popis rdp_keymaps, pa gradi koristeci Dockerfile koji dolazi uz taj
  izvor. Namjerno se ne prepisuje upstream receptura, da nadogradnja
  bude "./build.sh 1.7.0" umjesto odrzavanja vlastitog builda.

  Ovisnosti su zakljucane jer ih upstream gradi iz gita i bira najnoviji
  tag, pa gradnja pukne sama od sebe: libwebsockets v5 trazi GnuTLS
  kojeg build okruzenje 1.6.0 nema, a FreeRDP 2.x je odmakao na razvojne
  tagove koje configure odbija. Zakljucani su na v4.x i 2.11.7 — ono sto
  nosi sluzbeni guacd:1.6.0 — i pregazivi su preko env varijabli.

install.sh
  Novo pitanje pri instalaciji; ako se prihvati, gradi image i compose
  koristi njega umjesto sluzbenog guacd-a. Postojeci image se ne gradi
  ponovno.

Provjereno cistom instalacijom na Ubuntu 24.04: gradnja prolazi u sklopu
installera, image sadrzi hr-hr-qwertz uz svih 22 standardnih, FreeRDP je
2.11.7 kao u sluzbenom, i svih 9 GUI stranica vraca 200.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 17:44:05 +02:00

408 lines
13 KiB
Plaintext

================================================================
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 CIJELI repo na server i pokrenuti:
sudo bash install.sh
Installer uzima Web GUI iz webgui/ direktorija pokraj sebe, pa
kopiranje same install.sh nije dovoljno — skripta ce javiti gresku.
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. REVERSE PROXY
y = da, n = ne
Odgovorite DA ako je server iza Nginx Proxy Managera,
Traefika, HAProxyja ili slicnog. Trazi IP adresu proxyja.
Zasto je vazno: bez toga nginx za svaki zahtjev vidi IP
proxyja umjesto klijentovog. Posljedice su ozbiljne —
fail2ban banira sam proxy i time zakljuca SVE korisnike
odjednom, rate limit postaje jedan zajednicki budzet za
sve, a GeoIP filtrira po adresi proxyja i ne radi nista.
7. HRVATSKI RASPORED TIPKOVNICE
y = da, n = ne
Guacamole ne isporucuje hrvatski raspored — postoji 22 rasporeda,
hrvatskog nema. Rasporedi su kompajlirani u libguac-client-rdp,
pa se ne mogu dodati naknadno; guacd se mora ponovno prevesti.
Odgovorite li DA, install.sh pokrece guacd-hr/build.sh koji
preuzme sluzbeni izvor, ubaci hr_hr_qwertz.keymap i sagradi
image guacd:<verzija>-hr. Traje 15-30 min (gradi se i FreeRDP).
Nakon toga na svakoj RDP konekciji treba postaviti:
server-layout = hr-hr-qwertz
a ciljno racunalo mora imati hrvatski raspored.
Napomena: time prelazite na vlastiti guacd image, pa nadogradnja
Guacamolea trazi ponovnu gradnju:
./guacd-hr/build.sh 1.7.0
Za VNC konekcije ovo nije potrebno — VNC prenosi znak izravno.
8. 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
================================================================