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:
@@ -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
|
||||
================================================================
|
||||
Reference in New Issue
Block a user