http>https 혹은 도메인 주소(URL)에 {IP} > {도메인주소}로 리다이렉트 시키기 *IP 직접접근 차단(IP to Domain)

2024. 9. 6. 09:48Dev.Program/Etc.

728x90

1. http:// > https://

http://{domain주소} > https://{domain주소}로 리다이렉트 시키는 방법

SSL 인증서 작업을 하면 http:// 로 접속하는 걸 https://로 리다이렉트 시켜주는 작업을 추가해야한다.

SSL 인증서 작업을 했다면 보통 httpd.conf 파일에 설정해놨을텐데 SSL 인증서 관련 설정코드 전에 아래 코드를 추가해준다. (따로 ssl.conf 파일을 작성했다면 아래 코드도 ssl.conf 파일에 작성)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://www.test.com%{REQUEST_URI} [R,L]

이와 관련된 내용은 다른 블로그에도 많이 나와있으니 간략하게 작성하고 패스!

 


이번에 보안이슈로 문제가 제기된 건 IP를 통한 직접 접속이었다.

그렇다면 IP를 통해 접속한 건 어떻게 리다이렉트 시킬까?

2. http://{IP} or https://{IP} > https://{domain}

URL에 {IP} 입력을 통해 직접 접속하는 걸 https://{domain주소}로 리다이렉트 시키기

간혹 위와 같이 도메인에 직접적으로 IP주소(해당 IP 123.123.123.123은 그냥 예시)를 치고 들어오는 경우가 있다.

따로 설정을 하지 않았다면 도메인에 해당하는 IP주소로 직접 접속하는 경우 SSL 적용이 안된 상태로 열릴 것이다.

내가 서비스 중인 도메인도 SSL 적용시킨 도메인이었고 SSL 설정 외엔 따로 설정을 하지 않았는데

IP주소를 통해 직접 접속할 경우에 SSL 적용이 안되고 IP주소가 URL에 입력된 채로 사이트가 열려서 보안이슈가 있었다.


tip. 내 도메인에 해당하는 IP 찾는 방법

cmd 창을 열어서 아래 명령어를 입력하면 서비스중인 IP 주소가 나옴.

nslookup {domain주소}

위와 같이 T스토리를 예로 들자면 IP가 두 개가 나오고 하나는 404가 뜨고 하나는 캡쳐와 같이 열린다.

이런 식으로 IP를 통해 도메인으로 접속하는 방법이 있음.


해당 이슈 조치를 위해 httpd.conf 파일에 몇 가지 설정을 추가해줘야 한다.

우선 httpd.conf파일 제일 끝으로 가보면

### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier 
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot var/www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

이렇게 주석처리 된 VirtualHost가 보일 것이다. 해당 주석을 풀어주면서 본인 사이트에 맞게 고치면 됨.

안보인다면 어차피 마지막에 추가할 거라 없어도 상관 없음ㅎ

먼저 아래와 같이 80번 포트로 들어오는 거에 대한 코드를 추가시킨다(apache는 기본 80번 포트)

<VirtualHost _default_:80>
    DocumentRoot "/var/www/html"
    ServerName www.test.com
    ErrorLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/LOG/error_log.%Y%m%d 86400 +540"
    CustomLog "|${HTTPD_HOME}/bin/rotatelogs ${HTTPD_HOME}/LOG/access_log.%Y%m%d 86400 +540" combined
    

    RewriteEngine On
    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} ^123\.123\.123\.123$
    RewriteRule .* https://www.test.com%{REQUEST_URI} [R,L]
</VirtualHost>

<VirtualHost _default_:80> : 80번 포트로 들어오는 경우 디폴트(apache는 기본 80번 포트)

DocumentRoot :웹 어플리케이션 디렉토르 *주의 마지막에 슬래시(/)는 빼고 지정

ServerName :서비스 중인 등록된 DNS이름

ErrorLog, CustomLog : 로그 남길 경로

RewriteEngine On
RewriteCond %{HTTPS} off [OR] <<HTTPS로 들어온 게 아니거나 *[OR] 꼭 붙여줌. 없으면 기본 AND 조건
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123$  <<123.123.123.123으로 들어온 거라면
RewriteRule .* https://www.test.com%{REQUEST_URI} [R,L] <<강제로 https://www.test.com 으로 리다이렉트 시킬 거다

IP가 여러개라면 [OR] 조건으로 RewriteCond를 추가시켜주면 될 듯 하다.

*RewriteCond 에서 IP 작성 규칙엔 ^시작 {IP주소} $끝 이라고 알려주는 코드임
({IP주소} 내 .은 인식 못하기때문에 \.으로 작성)

그리고 SSL 적용시킨 443번 포트에 대한 리다이렉트도 추가시켜줘야 한다.

위에서 http > https로 리다이렉트 한 것과 똑같이 & 80포트에서 한 것과 똑같이

<VirtualHost _default_:443>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^123\.123\.123\.123$
    RewriteRule .* https://www.test.com%{REQUEST_URI} [R,L]
</VirtualHost>

443포트에 대한 코드도 추가해주면 끝!

해당 코드 httpd.conf 파일 마지막에 추가시켜준 뒤 apache 서버 재시작을 해준다.


잘 적용됐는지 확인하려면 URL에 다시 IP주소를 쳐보면 됨.

기존과 같이 IP주소를 치고 엔터 누르면

URL에 IP가 아닌 우리가 설정한 https://www.test.com으로 리다이렉트 된다. (캡쳐는 예시) 

 

위의 설정을 다 마쳤다면

http://www.test.com 입력도 http://123.123.123.123 입력도 https://123.123.123.123 입력도

전부 https://www.test.com으로 리다이렉트 되게 할 수 있다.

 

 

* 해당 내용은 apache 웹 서버 기준으로 작성함. (내가 적용시킨 서버는 Linux 환경에 apache 2.4 웹 서버)

* 서버 관련해서 전문가가 아니기 때문에 다른 더 좋은 방법이 있을 수도 있음.

728x90