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.