웹 사이트에 대한 직접 IP 액세스 제한


13

내 웹 사이트에 대한 직접 IP 액세스를 제한하고 싶습니다. .htaccess와 관련된 몇 가지 솔루션을 찾았지만 작동하지 않습니다. 또한 CPanel을 통해 SSL 인증서를 설치할 때까지 아파치 가상 호스트 구성을 통해 하나의 솔루션을 찾았습니다. httpd.conf 파일에서 무엇이 변경되었는지 전혀 몰랐지만 SSL 인증서를 제거해도 리디렉션 설정이 작동하지 않습니다.

현재 가상 호스트 설정은 다음과 같습니다.

NameVirtualHost 192.168.1.1:80 NameVirtualHost *

<VirtualHost 192.168.1.1:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off

    ## User rotate # Needed for Cpanel::ApacheConf
    UserDir disabled
    UserDir enabled rotate
    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
</VirtualHost>

<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UserDir disabled
</VirtualHost>

NameVirtualHost 192.168.1.1:443
<VirtualHost 192.168.1.1:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off

    UserDir disabled
    UserDir enabled rotate

    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
    SSLEngine on
    #SSL stuff here
</VirtualHost>

IP와 이름은 일반적인 것으로 대체되었습니다. SSL 인증서를 설치 한 이후 "Redirect 403 /"부분이 작동하지 않습니다. 누군가 내가 여기서 뭘 잘못하고 있는지에 대해 밝힐 수 있다면 감사 할 것입니다. 감사.


나는 당신이 = ServerName 192.168.1.1을 사용할 필요가 없다고 생각합니다
ADM

그것도 시도했지만 아무런 영향을 미치지 않습니다.
Ivan

VirtualHosts가 재주문 되었습니까? 403 오류가 발생한 호스트가 이전의 첫 번째 (기본) 가상 호스트였습니까?
Håkan Lindqvist

주문이 변경되지 않았습니다. SSL 인증서를 추가 한 후 문제가 시작되었습니다. 이는 마지막 인증서가 단순히 추가되었음을 의미합니다. 이제 완전히 제거해도 더 이상 작동하지 않으므로 다른 것도 변경되었지만 무엇을 알아낼 수는 없습니다.
Ivan

답변:


12

그리고 짜잔, 수정 :

<VirtualHost mysite.com:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

NameVirtualHost mysite.com:80
<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UserDir disabled
</VirtualHost>

NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

해결책은 IP를 직접 IP 액세스를 리디렉션 / 제한해야하는 경우를 제외하고 모든 가상 호스트 설정에 대한 도메인 이름으로 IP를 간단히 바꾸는 것입니다.


IE6 및 IE8을 실행하는 클라이언트에 문제가 발생합니다. 괜찮으 시다면 괜찮습니다. 어쨌든 그들은 고대 브라우저를 업그레이드해야합니다.
Vasili Syrakis 2016 년

6

대답은 훨씬 간단 할 수 있습니다.

httpd.conf (보통 / etc / httpd / conf에 있음)의 맨 아래에 복사하십시오.

<VirtualHost *:80>
ServerName localhost
Redirect 403 /
UseCanonicalName Off
UserDir disabled
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

그런 다음 방문자가 www.example.com을 통해 액세스 할 때만 서버에 액세스 할 수 있습니다.


2

가상 호스트의 호스트 이름이 SSL 인증서 내에서 암호화되므로 HTTPS를 통해 서버에 대한 직접 IP 액세스를 비활성화 할 수 없습니다.

클라이언트는 IP 주소에 연결하고 인증서를 다운로드하고 내용을 읽은 다음 호스트 이름이 올바른지 확인할 수 있어야합니다.

다른 방법은 SNI 를 적용하는 것이지만 이전 버전의 Internet Explorer를 사용하는 사용자에게는 문제가 발생할 수 있습니다.


1
  1. 인증서가 192.168.1.1이 아닌 example.com에 발행되거나 둘 다 발행되지 않았을 수 있습니다. 따라서 사용하는 방문자 https://192.168.1.1는 URL이 인증서의 URL과 다르기 때문에 SSL 오류가 있어야합니다.
  2. '기본 SSL'웹 사이트가 없습니다 <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. 호스트 당 SSL을 사용하려면 SNI 지원 (일부 libSSL 및 Apache 버전 요구 사항이 있음)과 함께 Apache를 사용해야합니다 ( 하나의 IP 주소로 Apache에서 여러 SSL 인증서 사용 참조)

0

나는 이것이 당신이 찾고있는 것이라고 믿습니다.

http://www.htaccess-guide.com/deny-visitors-by-ip-address/


1
아니요, 그건 내 문제와 관련이 없습니다. DNS 대신 내 웹 사이트의 IP에 액세스하는 사람들의 웹 사이트 액세스를 차단하고 싶습니다.
Ivan

그것은 정확히 그 일을 ....
user155813

1
아니요, 클라이언트의 IP 주소로 사이트 액세스를 차단합니다. 문제는 IP 주소를 사용하여 사이트에 대한 액세스를 차단하는 방법을 찾고 있습니다.
DaveTheMinion

0

또 다른 대답을 추가하기 위해 mod_security는 설정하는 것이 가치가 있다면 ip 주소로 서버에 액세스하는 것을 금지하는 규칙을 가지고 있습니다.


0

파일을 기본 / var / www / html 디렉토리에 넣지 않으면 쉽게 할 수 있습니다. 다른 디렉토리를 만들면 / web이라고 말하면됩니다.

mkdir /web 
mkdir /web/example

파일을 복사하고 chown을 변경하십시오.

sudo chown -R www-data:www-data /web

그런 다음 다음 구성으로 가상 호스트를 만듭니다.

<Directory /web/example>
  Require all granted
</Directory>

<VirtualHost *:80>

    DocumentRoot /web/example
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com

    # Force SSL, you can remove this line
    Redirect permanent / https://example.com/

    ServerAdmin webmaster@example.com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# If you use SSL
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        DocumentRoot /web/example
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # adapt this to your paths
        SSLEngine on
        SSLCertificateFile /etc/ssl/example/example_com.crt
        SSLCertificateKeyFile /etc/ssl/example/example.key
        SSLCertificateChainFile /etc/ssl/example/example_com.ca-bundle

    </VirtualHost>
</IfModule>

가상 호스트를 활성화하는 것을 잊지 마십시오 (예 :

sudo a2ensite example.com.conf

0

여러 .conf파일 이있는 Apcahe 설정 에서 우선 순위는 첫 번째 파일이로드 된 다음 두 번째 파일로 이동합니다. 따라서 Ubuntu를 사용하는 경우 파일이 사전 순서대로로드되므로 .conf로드 될 "첫 번째" 파일 은 디렉토리 아래 있는 000-default.conf( 따라서 이름이 000 임 ) 파일이됩니다 /etc/apache2/sites-available/.

따라서 다른 규칙이 적용되지 않도록하려면 첫 번째 파일의 맨 위에 규칙을 가져와야합니다.

다음 규칙을 해당 파일 앞에 추가하면됩니다.

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/html
    #This part here, is crucial.
    <Location />
        Require all denied
    </Location>
</VirtualHost>

Ubuntu 16.4 x64 Apache 버전에서 테스트 및 테스트 > 2.4

더 낮은 버전의 Apache를 실행중인 경우 Require all denied위 코드를 ...로 바꾸십시오 .

<Location />
    Order deny,allow
    Deny from all
</Location>

-3

직접 IP 액세스를 제한하기 위해 PHP에서이 간단한 코드를 작성했습니다!

$servername =  $_SERVER['SERVER_NAME'];
if($servername == 'your-domain.com'){

}elseif($servername == 'your-domain-with-www.com'){

}else{
    die("Direct ip access not allowed!");
}

그냥 PHP 파일에 붙여 넣고 즐기십시오!


1
다른 답변보다 이것의 장점을 설명해 주시겠습니까?
030

이것은 아파치 설정을 편집하지 않고 웹 사이트에 대한 직접 IP 액세스를 제한하는 데 사용할 수있는 가장 간단한 방법입니다!
Max Marley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.