================================================================ 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:-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 ================================================================