모두 거부, htaccess를 통해 하나의 IP 만 허용


156

모든 것을 거부하고 단일 IP 만 허용하려고합니다. 그러나 단일 IP에 대해 다음 htaccess를 사용하고 싶습니다. 두 가지 모두 작동하는 방법을 찾지 못했습니다. 모두 거부하고 하나만 허용하고 다음 옵션을 허용하십시오.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 /index.php
</IfModule>

이 작업을 수행하는 방법이 있습니까?

답변:


356
order deny,allow
deny from all
allow from <your ip> 

95
노트! Apache는 htaccess의 공백에 민감합니다. 거부, 허용 사이에 공백을 두지 마십시오. 즉, 주문 거부 거부, 허용하지 마십시오.
H.Rabiee 2016 년

2
정보 :-IPv6에서도 작동합니다! 단지와 다른 줄을 추가allow from yourIPv6
jave.web

nginx에서 가능합니까?
shgnInc

10
2.4 문서에 대한 참고 사항 : mod_access_compat에서 제공하는 Allow, Deny 및 Order 지시문은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 그것들을 사용하지 말고 사용을 권장하는 오래된 튜토리얼을 피하십시오.
Martin Schneider

4
@ MA-Maddin이 지적했듯이 mod_access_compat는 더 이상 사용되지 않습니다. 이 게시물 은 최신 버전에서 수행하는 방법을 보여줍니다. 또한 서버가 프록시를 사용하는 경우 방문자의 프록시 IP를 표시하므로 고려해야합니다. 이 게시물 은 그에 대한 해결책을 제안합니다.
Zeth

115

이 질문에 이미 대답이 있지만 Apache 설명서 에는 다음과 같이 나와 있습니다.

mod_access_compat에서 제공하는 Allow, Deny 및 Order 지시문은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. 그것들을 사용하지 말고 사용을 권장하는 오래된 튜토리얼을 피하십시오.

따라서 더 미래 지향적 인 답변은 다음과 같습니다.

<RequireAll>
    Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>

이 페이지가 "오래된 자습서"중 하나가되지 않도록 도와 주었기를 바랍니다. :)


IP는 어디에 두나요?
게리 칼라일 쿡

1
잘 했어! 작동뿐만 아니라 시간이 지남에 따라 허용되는 솔루션이어야합니다.
6opko

다른 대답은 내 상황에서 도움이되지 않았습니다. 그러나 이것은했다. 오래된 스레드를 업데이트 해 주셔서 감사합니다.
Johann Dyck

1
이 답변의 예는 두 IP의 액세스를 허용합니까? 여러 IP를 추가하기 위해 IP 사이에 공간을 두는 것입니까? Require ip더 많은 사용자가 읽을 수 있도록 여러 줄을 쓸 수 있습니까, 아니면 모든 IP가 한 줄에 있어야합니까?
Hastig Zusammenstellen

이것을 사용했다면, 일부 답변이했던 것처럼 어떻게 새로운 임시 페이지로 리디렉션합니까?
rudtek

39

해당 작업을 위해 설계된 지시문을 사용하여이를 개선 할 수 있습니다.

ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444

여기서 111.222.333.444는 고정 IP 주소입니다.

"Order Allow, Deny"지시문을 사용할 때 요청은 Allow 또는 Deny와 일치해야합니다. 둘 다 충족되지 않으면 요청이 거부됩니다.

http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order


1
사용자 정의 uRL을 추가하는 방법?
초경

32

액세스가 거부 된 사용자에게 표시 될 사용자 정의 페이지를 포함하여 위의 약간 수정 된 버전 :

ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444

... 그런 식으로 111.222.333.444에서 오지 않는 요청은 specific_page.html을 보게됩니다.

(새 줄이 없어져 주석으로 게시하면 끔찍한 것으로 보입니다)


안녕하세요. 내 .htaccess와 동일한 코드가 있지만 500 오류가 계속 발생합니다. 내가 지정한 페이지가 호출 test.html되었으며와 같은 폴더에 .htaccess있습니다. 그러나 로그를 볼 수 없습니다 (서버에서 허용되지 않음). 내가 왜 그 문제를 겪을 수 있는지 아십니까? ftp 클라이언트를 통해 파일 경로를 얻으면 /test.html경로가 문제가되지 않아야한다고 알립니다 .
Musterknabe

또한 오류 문서가 주석 처리 된 줄이 있어도 500 오류가 발생합니다. 따라서 문제가되지 않습니다. 다른 3 줄이 작동하지 않는 이유가 있습니까? 내 .htaccess에는 www가 아닌 ​​www를 www로 리디렉션하는 세 줄이 더 있지만 그게 전부입니다. 그러나 거부, 허용 등이있는 세 줄만있는 경우에도 오류가 발생합니다.
Musterknabe

맞춤 URL을 추가하는 방법은 무엇입니까?
초경

8

이전 답변을 조금 더 개선하여 사이트를 변경하는 동안 유지 관리 페이지가 사용자에게 표시 될 수 있습니다.

ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#

어디:


ErrorDocument 403을 사용하면 해당 maintenance.html 파일에 대한 추가 403 오류가 발생합니다. 해당 파일에 액세스 할 수 없기 때문입니다. 그에 대한 해결책이 있습니까?
Zdravko Donev

3

@David Brown의 답변 외에도 IP를 차단하려면 먼저 IP를 모두 허용 한 다음 IP를 차단해야합니다.

    <RequireAll>
      Require all granted
      Require not ip 10.0.0.0/255.0.0.0
      Require not ip 172.16.0.0/12
      Require not ip 192.168
    </RequireAll>

First line allows all
Second line blocks from 10.0.0.0 to 10.255.255.255
Third line blocks from 172.16.0.0 to 172.31.255.255
Fourth line blocks from 192.168.0.0 to 192.168.255.255

CIDR 요구에 맞게 위에서 언급 한 표기법을 사용할 수 있습니다.


감사합니다. 이것은 Apache 2.4를 처리하는 올바른 방법입니다!
Aleksandar Pavić

2

htaccess에서 다음을 사용하여 사이트에 대한 액세스를 허용 및 거부 할 수 있습니다.

SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip

우리는 먼저 ENV 변수 설정 allowedip을 패턴 ENV 변수 다음에 일치하는 경우, 클라이언트 IP 주소, 패턴과 일치하는 경우 allowedip이 값 할당 1 .

다음 단계에서는 Allow, deny 지시문을 사용하여 사이트에 대한 액세스를 허용 및 거부합니다. 및 Order deny,allow의 순서를 나타냅니다 . 이 줄은 서버에게 모든 사람을 거부하도록 지시합니다. 마지막 줄 은 env 변수를 설정 한 단일 IP 주소에 대한 액세스를 허용합니다.denyallowdeny from allallow from env=allowedip

1\.2\.3\.4\.5허용 된 IP 주소로 교체하십시오 .

굴절 :


1
Allow From 324.234.22.1 대신 이것을 사용하는 장점은 무엇입니까?
Berry M.

2

서버의 하위 폴더에 유지 관리 페이지와 페이지 이미지를 원했기 때문에 403 방법을 사용할 수 없었으므로 다음 방법을 사용하여 단일 IP를 제외한 모든 사람을 위해 '유지 관리 페이지'로 리디렉션했습니다 *

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]

출처 : WordPress 블로그를 숨길 보류 페이지 작성


이 솔루션은 simpliest입니다 - 내가 선호
대해서 혼돈

1

하나 이상의 IP 또는 사용자, 호스트 이름 등과 같은 다른 종류의 허용을 가질 수 있습니다 ... 자세한 내용은 여기 https://www.askapache.com/htaccess/setenvif/

SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1

Order deny,allow
deny from all
allow from env=allowedip


0

.htaccess 파일에 다음 명령을 추가하십시오. 그 파일을 htdocs 폴더에 넣으십시오.

Order Deny,Allow
Deny from all
Allow from <your ip> 
Allow from <another ip> 

0
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#

저에게는 이것이 작동하는 것 같습니다 (IPv4 대신 IPv6 사용) 일부 웹 사이트에서 이것이 다른지 알지 못하지만 이것이 작동합니다.

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