Apache-IP가 아닌 특정 도메인에서만 청취


9

vhost 이름 http://example.com 대신 IP 주소 ( http://xxx.xxx.xxx.xxx )로 직접 연결되는 것을 거부하도록 아파치를 구성하려면 어떻게해야 합니까?

내 VirtualHost 구성 :

ServerName example.com

<VirtualHost *:80>

        ServerName example.com

        DocumentRoot /var/www/           
        <Directory /var/www/>                    
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

</VirtualHost>

답변:


25

클라이언트가 실제로 HTTP 요청을 보낼 때까지 사용자가 HTTP 호스트로 사용하려는 호스트 이름 (또는 IP)을 서버에 알 수 없으므로 연결을 거부 할 수 없습니다. TCP 리스너는 항상 IP 주소에 바인딩됩니다.

대신 HTTP 오류 응답이 허용됩니까?

<VirtualHost *:80>
    ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/
    <Directory /var/www/>
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

글쎄, 씬은 도메인에서 오지 않는 요청에 대해 403 Forbidden을 표시하므로 내 상황에는 나쁘지 않습니다. 그러나 해당 요청에 대해 서버가 "존재하지 않기"를 원합니다. 어쩌면 아파치가 아니라 시스템 수준 에서이 작업을 수행 할 수 있다고 확신합니까?
Alex

3
@Alex 아니요, 완전히 불가능합니다. 서버가 HTTP 요청에서 도메인 이름 또는 IP 주소를 누르려고하는지 여부를 판별 할 수있는 방법이 있기 전에 TCP 연결을 설정하고 클라이언트가 HTTP 요청 (또는 SNI 헤더)을 보내야합니다. .
Shane Madden

@ShaneMadden 완전히 불가능 해? 서버는 사용자가 수행 할 작업을 선택하기 전에 사용자의 IP를 알아야한다는 것을 알고 있지만, ID를 알고 나면이 적중에 응답하지 않는 것이 완전히 불가능합니까? 시간이 초과 될 때까지 서버가 연결을 끊을 수 없습니까?
HelpingHand

3
@HelpingHand 사용자의 IP가 아닙니다. 서버는 사용자가 HTTP 요청으로 전송할 호스트 헤더를 알아야합니다. TCP 연결이 완전히 설정 될 때까지 필요하지 않습니다.
Shane Madden

1
@HelpingHand 아니요, 연결에서 발생하는 HTTP 통신에 대한 가시성이 없습니다.
Shane Madden

0

당신은 하위 계층으로 이동해야합니다. 요청 호스트에 대한 유효성 검사가있는 방화벽 체인에서만 내 마음에 듭니다. 아파치에서 가지고있는 것은 패키지를 무시하거나 버릴 수있게합니다


아파치 수준 에서이 작업을 수행하는 것이 완벽하게 가능하므로 너무 과도합니다. 간단한 방법은 첫 번째 호스트가 HTTP 친화적 인 방식으로 액세스를 거부 한 포괄임을 확인하는 것입니다.
Paul Dixon

0

이를 처리하는 확실한 방법은 다음과 같이 RewriteRule을 사용하는 것입니다.

<If "%{HTTP_HOST} == 'x.x.x.x'">
  RewriteRule ^.*$ http://www.example.com/$1 [L]
</If>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.