Apache 2: SetEnvIf “IP Aralığı”


10

Apache yapılandırmamda, ziyaretçinin belirli bir IP aralığından geldiğini görürsem bir ortam değişkeni ayarlamak istiyorum. Şu anda bu şekilde yapıyorum:

SetEnvIfNoCase Remote_Addr "^194\.8\.7[45]\." banned=spammer-ip
SetEnvIfNoCase Remote_Addr "^212\.156\.170\." banned=spammer-ip

Ne tercih ederim böyle bir şeydir:

SetEnvIfIpRange 194.8.74.0/23 banned=spammer-ip
SetEnvIfIpRange 212.156.170.0/24 banned=spammer-ip

... çünkü bir IP adresini bir dizeye dönüştürüp düzenli bir ifade yapmanın toplam kaynak israfı olduğunu düşünüyorum.

Yapabilirim

Deny From 194.8.74.0/23

... ancak daha sonra 403 hata sayfamda kontrol edebileceğim bir değişken almıyorum - erişimin reddedilmesinin nedenini bulmak için.

Neyi kaçırabilirim? "IP Adres Aralıkları" na dayalı ortam değişkenlerini ayarlayabilen bir Apache2 MOD var mı?

Yanıtlar:


4

Sahip olduğunuz (SetEnvIfNoCase Remote_Addr "^ abc" env_key = env_value) kolayca yapabileceğiniz en iyisidir. Bu yapılandırma stilinin, gözle görülür bir performans düşüşü olmaksızın ağır yüklü bir makine kümesinde uygulandığını gördüm. CIDR aralıkları daha uygun olduğunda rahatsız edici olduğunda düzenli ifadeler kullanmayı kabul ediyorum. CIDR aralıkları listesinden yapılandırmayı otomatik olarak oluşturmak için küçük bir program yazabilirsiniz.

Perl hakkında bilginiz varsa, hangi yolu seçerseniz seçin isteklere izin veren / reddeden bir modperl işleyicisi oluşturabilirsiniz. modperl, kodunuzun bir HTTP isteği boyunca farklı noktalarda çalışmasına izin verir - mod_perl 2.0 HTTP İstek Döngüsü Aşamaları . PerlAuthzHandler kullanmak için uygun işleyici olacaktır.

Lockie


8

SetEnv ile ayarlanan değişkenlerin bazı işlemlerde görünmediğini unutmayın (matrise bakın):

http://www.onlinesmartketer.com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/

senin çözümün

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

bkz. https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html#SetEnvIfExpr


Bu kabul edilen cevap olmalı! Bu en iyisi. Ayrıca .htaccess
Jeroen Vermeulen - MageHost

8

Aşağıdakilere izin veren Apache 2.4 ile CIDR biçimlendirmesini kullanabilirsiniz <If>:

<If "%{REMOTE_ADDR} -ipmatch 194.8.74.0/23">
    SetEnv banned = spammer-ip
</If>

Cevabınız için teşekkürler! Apache sürümümde
Lucas Cimon

0

Bu gerçekten gitmek için bir çözüm değildir RegExp için IP Aralıkları ama eşleşen bir regexp bir IP aralığını dönüştürmek için Google tarafından barındırılan güzel bir komut dosyası bulundu. Bazılarınız için de yararlı olabilir ...

Bir dizi IP adresinden gelen trafiği nasıl hariç tutarım?

[Güncelleme]

Google, IP Adresi Aracını kaldırmış gibi görünüyor (veya en azından sitelerinde bulunan bağlantı koptu), ancak burada benzer bir araç var: http://www.analyticsmarket.com/freetools/ipregex

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.