50c125e0db
All-in-one installer za Apache Guacamole s Nginx reverse proxy, fail2ban, SSL (Let's Encrypt / Self-signed), GeoIP blokiranjem i Flask web GUI za upravljanje. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
374 lines
12 KiB
Plaintext
374 lines
12 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 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
|
|
================================================================
|