Apache 2.4, URL'yi belirli IP'lerle sınırlandırır


14

Ağ dışında yalnızca belirli IP adresleriyle kullanılabilecek belirli bir URL'yi kısıtlamaya çalışıyorum. Dışarıdaki bir kullanıcı IP listesinden değil, bu URL'ye erişmeye çalıştığında ana sayfaya yönlendirilmesi gerekir.

Şimdiye kadar hiç şanssız denedim. Son bölüm, IP'den bağımsız olarak herkesi ana sayfaya yönlendirir.

<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>

Not: / secret URL aslında sanal bir URL'dir ve sürücüde fiziksel olarak mevcut değildir.


If ifadeleri yorumlanır mı? Yeniden yazmayı etkinleştir - RewriteEngine On?
user9517

<If> deyimi denediğim bir sürüm. RewriteEngine On yönergesi daha önce bildirilmiştir. Herkesi yönlendirmesinin nedeni budur
Denis Rendler 28:15

1
Bence seçilen cevabın işaretini kaldırmalısınız, çünkü talep ettiğiniz gibi Apache 2.4 için geçerli değil (geçen insanlara yanlış bilgi veriyor)
Erenor Paz

Yanıtlar:


4

Kullanın Order, Denyve allowsenin sankondan veya konumu erişimi olanları belirtmek için.

<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>

Yönlendirme söz konusu olduğunda, özel bir hata sayfası düşünün . Bu çok daha geneldir, çünkü her yetkisiz erişim bir 403 hatasını provoke etmelidir ve bu nedenle kolayca değerlendirilebilir.

Bunu apache ile hiç yapmadım, ama nginx ile bu stratejiyi kullan. Apache için böyle bir şey yapmalı:

ErrorDocument 403 http://homepage.example.com

Özel hata belgeleri, global, sanal ana bilgisayar veya dizin bağlamında kullanılabilen ErrorDocument yönergesi kullanılarak yapılandırılır. AllowOverride, FileInfo olarak ayarlanmışsa, .htaccess dosyalarında kullanılabilir. (apache dokümanlarından)


2
Bu bir dizi Apache httpd 2.2 yapılandırmasına benziyor. Hala 2.4 ile çalışacak mı?
user9517

En azından ErrorDocumentparça 2.4 dokümana ait. Ben nginx etrafında olduğundan, apache kullanabilirsiniz, ancak farz değil Order, Denyve Allowapache 2.4 civarında hala
ansi_lumen

Teşekkürler, ama yardım etmiyorum. Bahsetmeyi unuttum, ancak soruyu güncelledim, / secret URL aslında sanal bir URL ve sürücüde fiziksel olarak mevcut değil. Kendisi URL, index.php bir yeniden yazma bu yüzden <Location> yönergesini kullandım.
Denis Rendler

4
Bu sözdizimi apache 2.4'te kullanımdan kaldırılmıştır
Luca Reghellin

1
Bu neden kabul edilen cevap? Sorunun ima ettiği gibi bu Apache 2.2 için değil 2.4 ... Bu işe yaramayacak.
Jeremy

23

Apache 2.4'te Sipariş, Reddet ve İzin Ver seçenekleri,

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

Aşağıdakileri kullanarak adresleri açıkça kısıtlayabilirsiniz:

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

Tam tersi de geçerlidir, hepsini kısıtlamak ve sadece bir alt kümenin aşağıdakileri kullanmasına izin vermek için:

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

Apache 2.4 erişim kontrolü belgelerinde daha fazla bilgi bulabilirsiniz .

Sorunuzla ilgili olarak (yorum eklemek için puan eksikliği nedeniyle kendimi düzenledim), URL yolu olarak ayarlanan dizinle bir ErrorDocument ayarlayabilmeniz gerekir:

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

Bu yardımcı olur umarım!


Teşekkürler, @ Linztm! Ama bu sadece sorunumu çözüyor. Sadece kullanıcıyı engellemek istemiyorum, aynı zamanda onu ana sayfaya yönlendiriyorum.
Denis Rendler

Yalnızca alan adı ve protokol dahil olmak üzere tam URL'yi sağlarsam ErrorDocument yönergesi ile çalışıyor gibi görünüyor. Daha fazla araştırma yapacağım. Teşekkürler.
Denis Rendler

Kullanımdan allowkaldırılmış olsa da kullanmanız gerektiğinde en az bir durum buldum, Require 127.0.0.1 yerel makineden harici adresle erişime izin verin, sözdiziminin sadece 127 adrese izin verdiği gibi.
Alexei Martianov

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.