Apache 2.4 limita l'URL a determinati IP


14

Sto cercando di limitare un URL specifico per renderlo disponibile all'esterno della rete solo a indirizzi IP specifici. Quando un utente esterno tenta di accedere a tale URL e non dall'elenco degli IP, dovrebbe essere reindirizzato alla home page.

Questo è quello che ho provato finora senza fortuna. L'ultima parte reindirizza tutti alla homepage indipendentemente dall'IP.

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: l'URL / secret è in realtà un URL virtuale e non esiste fisicamente sull'unità.


le dichiarazioni If vengono commentate? Abilita riscrittura - RewriteEngine On?
utente9517

L'istruzione <If> è una versione che ho provato. La direttiva RewriteEngine On è stata dichiarata in precedenza. Questo è il motivo per cui reindirizza tutti
Denis Rendler,

1
Penso che dovresti deselezionare la risposta selezionata, perché non è valida per Apache 2.4 come da te richiesto (fornisce informazioni errate alle persone che passano)
Erenor Paz

Risposte:


4

Usa Order, Denye allowper specificare chi ha accesso al vostro vhost o la posizione.

<VirtualHost *:80>
    ServerName example.net
    DocumentRoot /docroot

    <Directory "/docroot">
        Order Deny,Allow
        Deny from all
        Allow from 10.10.10.10
        Allow from 10.10.11.0/24
    </Directory>   
</VirtualHost>

Quando si tratta di reindirizzamento, pensare a una pagina di errore personalizzata . Questo è molto più generale, perché ogni accesso non autorizzato dovrebbe provocare un errore 403 e quindi può essere valutato facilmente.

Non l'ho mai fatto con apache, ma uso questa strategia con nginx. Per apache qualcosa del genere dovrebbe fare:

ErrorDocument 403 http://homepage.example.com

I documenti di errore personalizzati sono configurati utilizzando la direttiva ErrorDocument, che può essere utilizzata nel contesto globale, virtualhost o della directory. Può essere utilizzato nei file .htaccess se AllowOverride è impostato su FileInfo. (dai documenti apache)


2
Questo sembra un insieme di configurazione di Apache httpd 2.2. Funzionerà ancora con 2.4?
user9517

Almeno la ErrorDocumentparte proviene dai documenti 2.4. Non uso apache, dato che nginx è in circolazione, ma ho pensato che fosse Order, Denye Allowsono ancora in giro in apache 2.4
ansi_lumen,

Grazie, ma non mi aiuta. Ho dimenticato di menzionare, ma ho aggiornato la domanda, l'URL / secret è in realtà un URL virtuale e non esiste fisicamente sull'unità. L'URL stesso è una riscrittura da index.php ed è per questo che ho usato la direttiva <Location>.
Denis Rendler,

4
Questa sintassi è deprecata in apache 2.4
Luca Reghellin il

1
Perché questa è la risposta accettata? Questo è per Apache 2.2 non 2.4 come implica la domanda ... Questo non funzionerà.
Jeremy,

22

Le opzioni Ordine, Nega e Consenti sono state sostituite in Apache 2.4 con

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

È possibile limitare esplicitamente gli indirizzi utilizzando quanto segue:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

È vero anche il contrario, per limitare tutto e consentire solo un sottoinsieme usare quanto segue:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

Ulteriori informazioni sono disponibili sulla documentazione di controllo degli accessi di Apache 2.4.

Per quanto riguarda la tua domanda (modificata dalla mia a causa della mancanza di punti per aggiungere un commento), dovresti essere in grado di impostare semplicemente un ErrorDocument con l'indice impostato come percorso URL:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

Spero che sia di aiuto!


Grazie, @Linztm! Ma questo risolve solo parzialmente il mio problema. Non voglio solo bloccare l'utente ma anche reindirizzarlo alla homepage.
Denis Rendler,

Sembra funzionare con la direttiva ErrorDocument solo se fornisco l'URL completo inclusi dominio e protocollo. Cercherò ulteriori ricerche. Grazie.
Denis Rendler,

Ho trovato almeno un caso in cui è necessario utilizzare allowsebbene deprecato, Require 127.0.0.1 consentire comunque l'accesso tramite indirizzo esterno dal computer locale, dove come consenti la sintassi consenti solo dall'indirizzo 127.
Alexei Martianov,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.