Nega tutto, consenti solo un IP tramite htaccess


156

Sto cercando di negare tutto e consentire solo un singolo IP. Ma vorrei che il seguente htaccess funzionasse per quel singolo IP. Non trovo un modo per far funzionare entrambi: nega tutto e consenti solo uno, oltre alle seguenti opzioni:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

C'è un modo per farlo funzionare?

Risposte:


356
order deny,allow
deny from all
allow from <your ip> 

95
NOTA! Apache è sensibile agli spazi in htaccess. Non consentire spazi tra negare, consentire. Vale a dire non scrivere ordine negare, consentire.
H.Rabiee,

2
INFO: - funziona anche per IPv6! basta aggiungere un'altra riga conallow from yourIPv6
jave.web

È possibile in nginx?
shgnInc,

10
Nota sui documenti 2.4 : le direttive Consenti, Nega e Ordina, fornite da mod_access_compat, sono obsolete e scompariranno in una versione futura. Dovresti evitare di usarli ed evitare tutorial obsoleti che raccomandano il loro uso.
Martin Schneider,

4
Come ha sottolineato @ MA-Maddin, - allora mod_access_compat sono obsoleti. Questo post mostra come fare nelle versioni più recenti. E si dovrebbe anche considerare, se il server utilizza un proxy, poiché ciò visualizzerebbe quindi l'IP proxy per il visitatore. Questo post suggerisce una soluzione a questo.
Zeth,

115

So che questa domanda ha già una risposta accettata, ma la documentazione di Apache dice:

Le direttive Consenti, Nega e Ordina, fornite da mod_access_compat, sono obsolete e scompariranno in una versione futura. Dovresti evitare di usarli ed evitare tutorial obsoleti che raccomandano il loro uso.

Quindi, una risposta più a prova di futuro sarebbe:

<RequireAll>
    Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

Spero di aver contribuito a impedire che questa pagina diventasse uno di quei "tutorial obsoleti". :)


Dove mettiamo il nostro IP?
Gary Carlyle Cook,

1
Ben fatto! Questa dovrebbe essere una soluzione accettata in quanto non solo funziona, ma è anche timeproof.
6opko,

L'altra risposta non ha aiutato nella mia situazione. Ma questo lo ha fatto. Grazie per aver aggiornato un vecchio thread.
Johann Dyck,

1
L'esempio di questa risposta consente l'accesso da due IP? Quindi, per aggiungere più IP abbiamo solo uno spazio tra di loro? Puoi mettere Require ipsu più righe per renderlo più leggibile dall'utente o tutti gli IP devono essere su una riga?
Hastig Zusammenstellen,

se lo utilizzassi, come reindirizzeresti a una nuova pagina temporanea come hanno fatto alcune delle risposte?
Rudtek,

39

Ciò può essere migliorato utilizzando la direttiva progettata per tale compito.

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

Dove 111.222.333.444 è il tuo indirizzo IP statico.

Quando si utilizza la direttiva "Ordine Consenti, Nega" le richieste devono corrispondere a Consenti o Nega, se nessuna delle due viene soddisfatta, la richiesta viene rifiutata.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order


1
come aggiungere acustom uRL?
secondi

32

Versione leggermente modificata di quanto sopra, inclusa una pagina personalizzata da mostrare a coloro a cui viene negato l'accesso:

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

... e in questo modo quelle richieste che non provengono da 111.222.333.444 vedranno specific_page.html

(pubblicarlo come commento sembrava terribile perché si perdono nuove righe)


Ciao. Ho lo stesso codice che hai nel mio .htaccess ma continuo a ricevere un errore 500. La pagina che ho specificato si chiama test.htmled è nella stessa cartella di .htaccess. Tuttavia, non riesco a visualizzare i registri (non consentiti dal server). Hai idea del perché potrei avere quel problema? Quando ottengo il percorso del file tramite un client ftp mi dice che /test.htmlil percorso non dovrebbe essere un problema, giusto?
Musterknabe,

Inoltre, l'errore 500 arriva anche quando ho commentato la riga con l'errordocument. Quindi non dovrebbe essere questo il problema. C'è un motivo per cui le altre 3 linee non possono funzionare? Nel mio .htaccess ho altre tre linee, in cui reindirizzo non www a www, ma il gioco è fatto. Ma ricevo anche l'errore quando ho SOLO le tre righe con nega, consenti, ecc.
Musterknabe,

Come aggiungere un URL personalizzato?
secondi

8

Migliorando un po 'di più le risposte precedenti, una pagina di manutenzione può essere mostrata ai tuoi utenti mentre esegui modifiche al sito:

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

Dove:


Quando uso ErrorDocument 403, ricevo un ulteriore errore 403 per quel file maintenance.html, perché non può accedere a quel file. Hai una soluzione per questo?
Zdravko Donev,

3

Oltre alla risposta di @David Brown, se si desidera bloccare un IP, è necessario prima consentire tutto quindi bloccare gli IP in quanto tali:

    <RequireAll>
      Require all granted
      Require not ip 10.0.0.0/255.0.0.0
      Require not ip 172.16.0.0/12
      Require not ip 192.168
    </RequireAll>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

È possibile utilizzare una qualsiasi delle notazioni sopra menzionate per soddisfare le esigenze del CIDR.


Grazie, questo è il modo corretto di gestire Apache 2.4!
Aleksandar Pavić,

2

Puoi utilizzare quanto segue in htaccess per consentire e negare l'accesso al tuo sito:

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

Prima impostiamo una variabile ENV consentita se l'indirizzo IP del client corrisponde al modello, se il modello corrisponde, alla variabile ENV consentita viene assegnato il valore 1 .

Nel passaggio successivo, utilizziamo Consenti, rifiuta le direttive per consentire e negare l'accesso al sito. Order deny,allowrappresenta l'ordine di denye allow. deny from allquesta riga dice al server di negare a tutti. l'ultima riga allow from env=allowedipconsente l'accesso a un singolo indirizzo IP per cui impostiamo la variabile env.

Sostituisci 1\.2\.3\.4\.5con il tuo indirizzo IP consentito.

Rifrazioni:


1
Quali sono i vantaggi di utilizzare questo invece di consentire solo da 324.234.22.1?
Berry M.,

2

Non ero in grado di utilizzare il metodo 403 perché volevo la pagina di manutenzione e le immagini di pagina in una sottocartella sul mio server, quindi ho usato il seguente approccio per reindirizzare a una "pagina di manutenzione" per tutti tranne che per un singolo IP *

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

Fonte: creazione di una pagina di attesa per nascondere il tuo blog WordPress


Questa soluzione è la più semplice - la preferisco
Gerfried,

1

Puoi avere più di un IP o anche qualche altro tipo di permesso come utente, nome host, ... maggiori informazioni qui https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip


0

Aggiungi il seguente comando nel file .htaccess. E metti quel file nella tua cartella htdocs.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

Per me, questo sembra funzionare (utilizzando IPv6 anziché IPv4) Non so se questo è diverso per alcuni siti Web, ma per il mio funziona.

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.