Soru Apache 2: SetEnvIf “IP Aralığı”


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 bunu böyle yapıyorum:

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

Tercih ettiğim şey şunun gibi:

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

... çünkü bir IP adresini bir dizgeye dönüştürmenin ve sonra düzenli bir ifadeyi yapmanın, toplam kaynak israfı olduğunu düşünüyorum.

Yapabilirdim

Deny From 194.8.74.0/23

... ama sonra 403 hata sayfamda kontrol edebileceğim bir değişken alamıyorum - erişimin neden reddedildiğini bulmak için.

Neleri gözden kaçırabilirim? Ortam değişkenlerini "IP Adresi Aralıkları" na göre ayarlayabilen bir Apache2 MOD var mı?


9
2017-12-13 13:25


Menşei




Cevaplar:


Sahip olduğunuz şey (SetEnvIfNoCase Remote_Addr "^ a.b.c." Env_key = env_value) kolayca yapabileceğiniz en iyisidir. Belirgin bir performans düşüşü olmadan, ağır yüklü bir makine kümesinde uygulanan bu yapılandırma stilini gördüm. CIDR aralıkları daha uygun olduğunda, normal ifadeleri kullanmaya katılıyorum rahatsız edici. CIDR aralıkları listesinden yapılandırmayı otomatik olarak oluşturmak için küçük bir program yazabilirsiniz.

Perl'le aşina olursanız, hangisini tercih ederseniz, isteklere izin verecek / reddedecek bir modifiye edici işleyici yaratabilirsiniz. modperl, kodunuzun bir HTTP isteği boyunca farklı noktalarda çalışmasına izin verir - mod_perl 2.0 HTTP İstek Döngü Aşamaları. PerlAuthzHandler, kullanılacak uygun işleyici olacaktır.

Lockie


3
2017-12-13 17:54





Apache 2.4 ile CIDR formatlamayı kullanabilirsiniz. <If>:

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

8
2018-05-02 20:08



Cevabınız için teşekkürler! Apache sürümümde bir hata olduğunu, böylece IP aralığını tek tırnak içine almam gerektiğini unutmayın: mail-archives.apache.org/mod_mbox/httpd-docs/201406.mbox/... - Lucas Cimon


SetEnv ile ayarlanan değişkenlerin bazı işlemlerde görünmediğinin farkında olun (bkz. matris):

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

görmek https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html#SetEnvIfExpr


5
2017-12-04 12:13



Bu kabul edilen cevap olmalı! Bu en iyisi. Ayrıca .htaccess'te çalışır. - Jeroen Vermeulen - MageHost


Bu gerçekten gitmek için bir çözüm değil RegExp için IP Aralıklarıancak bir IP aralığını eşleşen bir regexp'e dönüştürmek için Google tarafından barındırılan güzel bir komut dosyası buldum. Bazılarınız için de kullanılabilir.

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

[Güncelleştirme]

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


0
2018-05-24 11:56