Guida basata su un intervento sistemistico concluso e verificato. Caso reale: il pannello mod_proxy_balancer rispondeva HTTP 200 senza credenziali nonostante AuthType Basic e Require user. Diagnosi, correzione e test.
La scoperta
Durante un audit dei reverse proxy Apache, l'endpoint /balancer-manager restituiva HTTP 200 senza inviare credenziali. Non si trattava di un generico 200 applicativo: il contenuto HTML mostrava il titolo Balancer Manager e il nome del bilanciatore. Un pannello del genere permette di intervenire sulla disponibilità e sul routing dei backend.
Configurazione difettosa
<Location /balancer-manager>
SetHandler balancer-manager
Require all granted
AuthUserFile /etc/apache2/passwd
AuthName "Restricted Access"
AuthType Basic
Require user operatore
</Location>
La presenza contemporanea di Require all granted e Require user rende la configurazione permissiva: con la semantica di autorizzazione di Apache 2.4 basta una condizione soddisfatta per poter consentire l’accesso.
Correzione controllata
<Location /balancer-manager>
SetHandler balancer-manager
AuthUserFile /etc/apache2/passwd
AuthName "Restricted Access"
AuthType Basic
Require user operatore
</Location>
È stata eliminata soltanto la direttiva Require all granted, dopo backup del VirtualHost e mantenendo la configurazione di autenticazione esistente. Ulteriore hardening consigliato: aggiungere una whitelist di rete valutando la corretta combinazione delle direttive Require con <RequireAll>.
Test prima e dopo
apachectl -t
systemctl reload apache2
# Senza credenziali: atteso HTTP 401
curl -sS -o /dev/null -w '%{http_code}\n' -H 'Host: NOME_VHOST' http://IP_PROXY/balancer-manager
# Controllare che il portale pubblico non sia cambiato
curl -sS -o /dev/null -w '%{http_code}\n' -H 'Host: NOME_VHOST' http://IP_PROXY/
Nel caso reale entrambi i proxy coinvolti sono passati da 200 a 401 senza credenziali. I siti sono rimasti accessibili con HTTP 200 e redirect previsti.
Perché il solo controllo sintattico non basta
apachectl -t conferma la validità della sintassi, non la correttezza delle policy di accesso. Occorre richiedere la pagina sia senza credenziali sia con credenziali valide e verificare i codici HTTP, il contenuto e gli header.
Prevenzione
Eseguire periodicamente un controllo degli endpoint di amministrazione Apache, soprattutto sui vhost di default, sui frontend TLS e sui file copiati tra sites-available e sites-enabled. Evitare pannelli amministrativi esposti su reti pubbliche.
Guide correlate
I comandi con nomi segnaposto vanno adattati al proprio ambiente. Le configurazioni di produzione, gli IP e le credenziali non sono riportati.