Initial commit — GuacPanel v1.0

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>
This commit is contained in:
njomac
2026-04-26 11:21:44 +02:00
commit 50c125e0db
17 changed files with 5249 additions and 0 deletions
+373
View File
@@ -0,0 +1,373 @@
================================================================
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
================================================================