Apache 2.4는 URL을 특정 IP로 제한


14

특정 URL을 네트워크 외부에서 특정 IP 주소로만 사용할 수 있도록 제한하려고합니다. 외부 사용자가 IP 목록이 아닌 해당 URL에 액세스하려고하면 홈페이지로 리디렉션되어야합니다.

이것이 운없이 지금까지 시도한 것입니다. 마지막 부분은 IP에 관계없이 모든 사람을 홈페이지로 리디렉션합니다.

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

추신 : / secret URL은 사실상 가상 URL이며 드라이브에 실제로 존재하지 않습니다.


If 문은 주석 처리되어 있습니까? 다시 쓰기 사용- RewriteEngine On?
user9517

<If> 문은 내가 시도한 버전입니다. RewriteEngine On 지시문은 앞서 선언되었습니다. 즉, 모든 사람 리디렉션 이유
데니스 Rendler

1
아파치 2.4의 요청에 따라 유효하지 않습니다 때문에, 당신이 선택한 답변을 해제 표시한다고 생각합니다 (그것은 지나가는 사람들에게 잘못된 정보 제공)
Erenor 파스

답변:


4

사용 Order, Deny그리고 allow당신의 가상 호스트 또는 위치에 대한 액세스 권한이있는 사용자를 지정할 수 있습니다.

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

리디렉션과 관련하여 맞춤 오류 페이지를 생각해보세요 . 모든 무단 액세스는 403 오류를 유발하므로 쉽게 평가할 수 있기 때문에 이것은 훨씬 더 일반적입니다.

나는 아파치로 이것을 한 적이 없지만 nginx와 함께이 전략을 사용합니다. 아파치의 경우 다음과 같이해야합니다.

ErrorDocument 403 http://homepage.example.com

사용자 정의 오류 문서는 전역, 가상 호스트 또는 디렉토리 컨텍스트에서 사용될 수있는 ErrorDocument 지시문을 사용하여 구성됩니다. AllowOverride가 FileInfo로 설정되어 있으면 .htaccess 파일에서 사용될 수 있습니다. (아파치 문서에서)


2
이것은 Apache httpd 2.2 구성 세트처럼 보입니다. 여전히 2.4에서 작동합니까?
user9517

적어도 ErrorDocument부분은 2.4 문서에서 나온 것입니다. 나는 nginx를 주위이기 때문에, 아파치를 사용하지만 가정하지 않는 Order, Deny그리고 Allow아파치 2.4에서 주변에 아직도
ansi_lumen

고마워,하지만 난 도움이되지 않습니다. 언급을 잊어 버렸지 만 / secret URL은 실제로 가상 URL이며 실제로 드라이브에 존재하지 않습니다. 자체 URL은 index.php에서 다시 작성되었으므로 <Location> 지시문을 사용했습니다.
Denis Rendler

4
이 문법은 Apache 2.4에서 더 이상 사용되지 않습니다
Luca Reghellin

1
이것이 왜 대답입니까? 질문에서 알 수 있듯이 이것은 Apache 2.2가 아닌 2.4 용입니다 ... 작동하지 않습니다.
Jeremy

23

주문, 거부 및 허용 옵션이 Apache 2.4에서 다음으로 대체되었습니다.

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

다음을 사용하여 주소를 명시 적으로 제한 할 수 있습니다.

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

모두를 제한하고 하위 집합 만 다음을 사용하도록하려면 정반대도 마찬가지입니다.

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

자세한 정보는 Apache 2.4 액세스 제어 문서에 있습니다.

귀하의 질문과 관련하여 (주석을 추가 할 요점이 없기 때문에 내 자신의 편집) URL을 URL 경로로 설정하여 ErrorDocument를 간단하게 설정할 수 있어야합니다.

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

도움이 되었기를 바랍니다!


감사합니다, @Linztm! 그러나 이것은 부분적으로 만 내 문제를 해결합니다. 사용자를 차단하고 싶지 않고 홈페이지로 리디렉션하고 싶습니다.
Denis Rendler

도메인 및 프로토콜을 포함한 전체 URL을 제공하는 경우에만 ErrorDocument 지시문으로 작업하는 것 같습니다. 더 연구하겠습니다. 감사.
Denis Rendler

allow더 이상 사용되지 않지만 사용해야 할 경우 Require 127.0.0.1 로컬 컴퓨터에서 외부 주소로 액세스를 허용 하는 경우가 하나 이상 있습니다. 여기서 허용 구문은 127 주소에서만 허용됩니다.
Alexei Martianov

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