Apache 2 : SetEnvIf“IP 범위”


10

내 아파치 설정에서 방문자가 특정 IP 범위에서 온 것을 본다면 환경 변수를 설정하고 싶습니다. 현재 나는 이렇게한다 :

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

내가 선호하는 것은 다음과 같습니다.

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

... IP 주소를 문자열로 변환 한 다음 정규 표현식을 수행하는 것은 총 자원 낭비라고 생각하기 때문입니다.

나는 할 수 있었다

Deny From 194.8.74.0/23

...하지만 액세스가 거부 된 이유를 찾기 위해 403 오류 페이지에서 확인할 수있는 변수가 없습니다.

내가 놓칠 수있는 제안이 있습니까? "IP 주소 범위"를 기반으로 환경 변수를 설정할 수있는 Apache2 MOD가 있습니까?

답변:


4

당신이 가진 것 (SetEnvIfNoCase Remote_Addr "^ abc"env_key = env_value)은 쉽게 할 수있는 최선입니다. 이 구성 스타일은 눈에 띄는 성능 저하없이로드가 많은 시스템 클러스터에서 구현되는 것을 보았습니다. CIDR 범위가 더 적절할 때 정규 표현식을 사용하는 데 동의합니다. CIDR 범위 목록에서 구성을 자동으로 생성하는 작은 프로그램을 작성할 수 있습니다.

Perl에 익숙하다면 modperl 핸들러를 작성하여 원하는 방식으로 요청을 허용 / 거부 할 수 있습니다. modperl을 사용하면 HTTP 요청 전체에서 다른 지점에서 코드를 실행할 수 있습니다. mod_perl 2.0 HTTP 요청주기 단계 . PerlAuthzHandler가 사용하기에 적합한 핸들러입니다.

로키


8

SetEnv를 통해 설정된 변수는 일부 작업에서 보이지 않습니다 (행렬 참조).

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

당신의 해결책은

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

참조 https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html#SetEnvIfExpr를


이것이 정답입니다! 최고입니다. 그것은 또한 .htaccess에서 작동합니다
Jeroen Vermeulen-MageHost


0

이것은 실제로 RegExp 에서 IP Ranges 로 이동하는 솔루션은 아니지만 Google에서 호스팅하는 멋진 스크립트를 사용하여 IP 범위를 일치하는 regexp로 변환합니다. 여러분 중 일부에게도 유용 할 수 있습니다.

IP 주소 범위에서 트래픽을 제외하려면 어떻게합니까?

[최신 정보]

Google이 IP 주소 도구를 제거한 것처럼 보이거나 최소한 사이트에있는 링크가 끊어진 것처럼 보이지만 http://www.analyticsmarket.com/freetools/ipregex 와 비슷한 도구가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.