Ubuntu 16.04 / phpMyAdmin / Come renderlo accessibile solo da IP specifici

Per limitare gli indirizzi IP che possono accedere a phpMyAdmin in Apache 2.4, utilizzare Require ip nelle impostazioni di accesso della directory di phpMyAdmin. Specificare gli indirizzi consentiti, controllare la sintassi della configurazione e quindi ricaricare Apache. L'accesso sarà quindi consentito solo per gli indirizzi specificati nei percorsi in cui le impostazioni sono applicate.

Ambito di applicazione e prerequisiti

Questo articolo utilizza l'esempio di phpMyAdmin installato dal pacchetto su Ubuntu, servito direttamente da Apache 2.4, in cui la directory /usr/share/phpmyadmin è usata nella sua configurazione. Il metodo di installazione, l'host virtuale, gli alias e la posizione dei file di configurazione variano a seconda dell'ambiente. Non applicare questo esempio così com'è per configurazioni che utilizzano Nginx, container o proxy separati.

Il supporto standard di sicurezza per Ubuntu 16.04 LTS è terminato nell'aprile 2021, e il supporto Ubuntu Pro è terminato nel maggio 2026. Controlla le condizioni per un supporto Legacy aggiuntivo e pianifica la migrazione a una versione supportata. Puoi controllare il programma dettagliato su Programma di manutenzione della sicurezza di Ubuntu.

Se le impostazioni vengono applicate in modo errato, anche gli amministratori potrebbero non essere in grado di accedere al sistema. Prima di apportare modifiche, assicurati di avere accesso alla console o via SSH al server e verifica gli indirizzi IP effettivi degli amministratori autorizzati ad accedere e il percorso utilizzato da phpMyAdmin. Quando si accede tramite Internet, generalmente è richiesto l'IP pubblico visto dal server piuttosto che l'IP privato del PC di gestione. L'indirizzo visto dal server può variare a seconda dell'utilizzo di VPN, proxy, NAT e IPv6.

Controllo e backup della configurazione attuale di Apache

Controlla gli alias e le impostazioni delle directory di phpMyAdmin nella versione di Apache e nella configurazione attiva. Se i seguenti file non esistono, individua il file di configurazione effettivo in base al metodo di installazione. I seguenti risultati di ricerca possono includere impostazioni non attive, quindi verifica anche le impostazioni attive e i virtual host.

apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i phpmyadmin /etc/apache2/conf-enabled /etc/apache2/sites-enabled

Se esiste la configurazione del pacchetto in /etc/apache2/conf-available/phpmyadmin.conf e tale configurazione è attiva, esegui un backup prima di apportare modifiche. Se i file di backup sottostanti esistono già, assegna un nome diverso in modo da non sovrascriverli.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction

Apri il file di configurazione effettivo con un editor di testo e trova la sezione <Directory /usr/share/phpmyadmin>. Ad esempio, puoi modificarlo con il seguente comando.

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Impostazione degli indirizzi IP consentiti

Dopo aver controllato le regole di autorizzazione all'accesso nella sezione della directory phpMyAdmin esistente, impostare le regole di approvazione che si applicano a quella sezione come segue. Gli indirizzi riportati di seguito sono esempi a scopo esplicativo, quindi assicurati di sostituirli con gli indirizzi effettivi dell'amministratore. Mantieni le impostazioni di elaborazione PHP esistenti o altre impostazioni necessarie nella sezione originale.

<Directory /usr/share/phpmyadmin>
    Require ip 192.0.2.10
</Directory>

Il blocco sopra è un esempio che mostra la parte di controllo degli accessi. Non eliminare l'intera sezione della directory esistente e incollala così com'è. Se posizioni Require all granted e Require ip uno accanto all'altro nella stessa sezione, l'accesso potrebbe essere consentito se è permesso almeno uno dei due, quindi revisiona le regole di approvazione esistenti per assicurarti che le restrizioni previste siano effettivamente applicate. Altre sezioni Directory o Location o le impostazioni di autenticazione possono influenzare i risultati, quindi verifica l'intera configurazione.

Se ci sono più indirizzi, puoi elencarli separandoli con degli spazi. Ad esempio, la seguente regola consente l'accesso se corrisponde a uno dei due indirizzi. Se specifichi un intervallo di rete, l'intero intervallo sarà consentito, quindi specifica solo l'intervallo necessario. Sono supportati anche gli indirizzi IPv6 e la notazione CIDR.

Require ip 192.0.2.10 198.51.100.25

Le direttive Order, Deny e Allow sono sintassi precedenti supportate per compatibilità in Apache 2.4. Evita di mescolare vecchie e nuove regole indiscriminatamente; esamina la configurazione esistente e gli altri requisiti di autenticazione prima di passare alla sintassi attuale. Consulta la guida Apache al controllo degli accessi e la documentazione di Require ip per i formati degli indirizzi e l'ambito di applicazione.

Controllo della sintassi, applicazione e verifica della connessione

  1. Dopo aver salvato il file, controllare la sintassi dell'intera configurazione di Apache con il comando seguente. Se Syntax OK non appare, controllare e correggere il file e la riga dell'errore. Il controllo della sintassi non garantisce che la policy di accesso funzioni come previsto.
sudo apache2ctl configtest
  1. Se il controllo della sintassi ha esito positivo, ricarica la configurazione e verifica lo stato del servizio. Il nome del servizio può variare a seconda della distribuzione.
sudo systemctl reload apache2
sudo systemctl status apache2
  1. Accedi a phpMyAdmin da una rete consentita utilizzando il suo indirizzo esistente. Se superi il controllo di accesso, potrebbe apparire la schermata di login, ma è necessario un accesso separato al database.
  2. Controlla lo stesso indirizzo da una rete separata non inclusa nella lista consentita. Se si applica la regola Apache pertinente e non ci sono altri errori, 403 Forbidden viene generalmente visualizzato. Se un indirizzo consentito viene bloccato o un indirizzo non consentito riesce ad aprire la pagina, verifica i log del server, le sezioni di configurazione applicabili, il proxy e gli indirizzi IP.

Ambiente Proxy e Sicurezza Aggiuntiva

Se Apache si trova dietro un proxy inverso o un bilanciatore di carico, potrebbe vedere l'IP del proxy invece dell'utente effettivo. In questa situazione, consentire l'indirizzo del proxy può dare accesso a più utenti del previsto, quindi siate cauti. Per utilizzare l'indirizzo reale del client, è necessario configurare solo proxy attendibili. Non fidatevi ciecamente degli header inviati da client arbitrari; dopo aver consultato la documentazione di Apache mod_remoteip , configurate secondo la vostra configurazione di rete.

Le restrizioni IP non sostituiscono il login a phpMyAdmin o la gestione dei permessi del database. Usate HTTPS e limitate i permessi degli account all'ambito necessario. Se gli IP pubblici cambiano frequentemente nel vostro ambiente, invece di consentire ciecamente un'ampia gamma di indirizzi, considerate percorsi di accesso come le VPN.

Problemi di connessione e ripristino delle impostazioni

Se l'accesso è bloccato, controlla l'attuale IP pubblico dell'amministratore, le rotte IPv4 e IPv6, se il file di configurazione è attivo e se vengono applicate regole di approvazione da altre zone. La posizione dei log degli errori di Apache dipende dalla configurazione e, nella configurazione predefinita di Ubuntu, puoi controllare /var/log/apache2/error.log. Fai attenzione quando condividi i log, poiché possono contenere informazioni sensibili.

Se hai bisogno di ripristinare le modifiche, confronta prima per assicurarti che nessun altro abbia modificato i file dal backup, ripristina il file di backup nel percorso originale, quindi esegui un controllo della sintassi e ricarica. Ripristinare la configurazione precedente può consentire nuovamente l'accesso precedentemente permesso, quindi verifica l'ambito di accesso dopo il ripristino.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction /etc/apache2/conf-available/phpmyadmin.conf
sudo apache2ctl configtest && sudo systemctl reload apache2

Se un controllo della sintassi risulta con degli errori, non ricaricare; correggi invece la configurazione. Verifica inoltre che le restrizioni di accesso e login previste siano mantenute sia negli ambienti consentiti che in quelli non consentiti.