fix: fail2ban nginx jailovi nisu citali log + podrska za reverse proxy
1) Debian/Ubuntu u jail.d/defaults-debian.conf postavlja globalni backend = systemd. Nasi nginx jailovi ga nisu nadjacali, pa su naslijedili systemd, ignorirali logpath i citali journal u kojem nginx access loga nema. "fail2ban-client get nginx-basicauth logpath" je vracao "No file is currently monitored" — jailovi nikad nisu banali nista, iako fail2ban-regex nad istim logom nalazi 48 poklapanja. Dodan eksplicitan backend = auto na oba nginx jaila; sshd ostaje na systemd backendu gdje mu je mjesto. 2) Novo pitanje pri instalaciji: je li server iza reverse proxyja. Ako da, generira se conf.d/guacamole-realip.conf sa set_real_ip_from / real_ip_header X-Forwarded-For. Bez toga je $remote_addr uvijek IP proxyja, pa bi fail2ban banirao proxy i zakljucao sve korisnike odjednom, rate limit bi bio jedan zajednicki budzet, a GeoIP bi gledao krivu adresu. Provjereno iza Nginx Proxy Managera: direktan pristup i dalje daje LAN IP, spoofani X-Forwarded-For s nepovjerljive adrese se ignorira, a kroz proxy fail2ban sad biljezi stvarni javni IP klijenta. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -108,7 +108,18 @@ Skripta postavlja sljedeća pitanja redom:
|
||||
Potrebni: MaxMind Account ID i License Key (besplatno).
|
||||
Primjer zemalja: HR BA SI RS AT DE
|
||||
|
||||
6. WEB GUI
|
||||
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. WEB GUI
|
||||
y = da, n = ne
|
||||
Instalira Flask web aplikaciju za upravljanje svim postavkama.
|
||||
Ako da:
|
||||
|
||||
+35
@@ -125,6 +125,21 @@ if [[ "$DO_GEOIP" =~ ^[Yy]$ ]]; then
|
||||
read -rp "Dozvoljene zemlje (ISO kodovi, razmak, npr: HR BA SI): " GEO_COUNTRIES
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}Reverse proxy${NC} ispred ovog servera (npr. Nginx Proxy Manager)?"
|
||||
echo " Bez ovoga nginx vidi IP proxyja umjesto klijentovog, pa fail2ban"
|
||||
echo " banira proxy i zakljuca sve korisnike odjednom."
|
||||
read -rp "Je li server iza reverse proxyja? [y/N]: " DO_PROXY
|
||||
DO_PROXY="${DO_PROXY:-n}"
|
||||
TRUSTED_PROXY=""
|
||||
if [[ "$DO_PROXY" =~ ^[Yy]$ ]]; then
|
||||
while true; do
|
||||
read -rp "IP adresa proxyja (npr. 192.168.1.5 ili 10.0.0.0/24): " TRUSTED_PROXY
|
||||
[[ -n "$TRUSTED_PROXY" ]] && break
|
||||
warn "Adresa ne moze biti prazna"
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
read -rp "$(echo -e "${CYAN}Web GUI${NC} — instalirati web sučelje za upravljanje? [y/N]: ")" DO_WEBGUI
|
||||
DO_WEBGUI="${DO_WEBGUI:-n}"
|
||||
@@ -361,6 +376,20 @@ limit_req_zone $binary_remote_addr zone=guac_req:10m rate=10r/s;
|
||||
limit_req_zone $binary_remote_addr zone=guac_ws:10m rate=30r/m;
|
||||
EOF
|
||||
|
||||
# Iza reverse proxyja je $remote_addr uvijek IP proxyja. Bez ovoga
|
||||
# fail2ban banira proxy (pa i sve korisnike odjednom), rate limit
|
||||
# postaje jedan zajednicki budzet, a GeoIP gleda krivi IP.
|
||||
if [[ -n "$TRUSTED_PROXY" ]]; then
|
||||
cat > /etc/nginx/conf.d/guacamole-realip.conf << EOF
|
||||
set_real_ip_from ${TRUSTED_PROXY};
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
EOF
|
||||
info "Real IP: vjerujem X-Forwarded-For zaglavlju od ${TRUSTED_PROXY}"
|
||||
else
|
||||
rm -f /etc/nginx/conf.d/guacamole-realip.conf
|
||||
fi
|
||||
|
||||
if [[ "$PKG" == "apt" ]]; then
|
||||
NGINX_CONF="/etc/nginx/sites-available/guacamole"
|
||||
NGINX_ENABLED="/etc/nginx/sites-enabled/guacamole"
|
||||
@@ -436,8 +465,13 @@ ignoreregex =
|
||||
EOF
|
||||
|
||||
cat > /etc/fail2ban/jail.d/guacamole.conf << EOF
|
||||
# Debian/Ubuntu u jail.d/defaults-debian.conf postavlja globalni
|
||||
# backend = systemd. Bez eksplicitnog backenda ovi jailovi naslijede
|
||||
# systemd, ignoriraju logpath i ne procitaju nijednu liniju
|
||||
# nginx access loga — nikad nista ne banaju.
|
||||
[nginx-basicauth]
|
||||
enabled = true
|
||||
backend = auto
|
||||
port = http,https
|
||||
filter = nginx-basicauth
|
||||
logpath = /var/log/nginx/access.log
|
||||
@@ -447,6 +481,7 @@ bantime = 3600
|
||||
|
||||
[nginx-guacamole]
|
||||
enabled = true
|
||||
backend = auto
|
||||
port = http,https
|
||||
filter = nginx-guacamole
|
||||
logpath = /var/log/nginx/access.log
|
||||
|
||||
Reference in New Issue
Block a user