Apache 2.4는 URL을 특정 IP로 제한 “/secret”> #

특정 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이며 드라이브에 실제로 존재하지 않습니다.



답변

사용 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 파일에서 사용될 수 있습니다. (아파치 문서에서)


답변

주문, 거부 및 허용 옵션이 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>

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


답변

Apache 2.4의 경우 <RequireAny>를 사용할 수 있습니다. 당신은 vhost 또는 .htaccess 파일에서 할 수 있습니다 ….

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

아파치 문서 https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany


답변