$ssl_preread_protocol 변수로 클라이언트 SSL/TLS 버전 확인하기

NGINX의 주요 기능 중 하나는 $ssl_preread_protocol 변수입니다. 이 변수를 사용하면 TCP(스트림) 프록시를 사용하여 트래픽을 전달할 때 SSL/TLS 및 다른 프로토콜을 구별할 수 있습니다. 예를 들어 SSL/TLS 및 SSH 서비스를 같은 포트에서 실행하여 방화벽 제한을 피하고 싶을 때 이 기능이 유용합니다.

이러한 기능은 NGINX Plus에서도 제공됩니다.

목차

1. $ssl_preread_protocol 변수란?
2. $ssl_preread_protocol 사용 시기와 방법
3. NGINX의 최신 버전
4. 더보기

1. $ssl_preread_protocol 변수란?

$ssl_preread_protocol은 NGINX의 내장 변수로서, NGINX가 클라이언트와의 SSL/TLS 연결에서 사용하는 프로토콜 버전을 담고 있습니다. ssl_preread on; 지시어를 사용하면 이 변수를 사용하여 클라이언트가 요청한 SSL/TLS 버전을 사전에 확인할 수 있습니다. 이 정보는 NGINX가 SSL/TLS 트래픽을 적절한 서버로 라우팅하는데 도움이 될 수 있습니다.

2. $ssl_preread_protocol 사용 시기와 방법

HTTP 또는 stream 모듈을 사용하여 SSL/TLS 트래픽을 종료하고 복호화할 때, $ssl_protocol (http, stream) 변수는 클라이언트가 사용한 SSL 또는 TLS 버전을 캡처합니다. 그러나 때로는 암호화 트래픽을 복호화하지 않고 간단한 TCP 프록시나 로드 밸런서를 구현하기 위해 stream 모듈을 사용하여 SSL/TLS 트래픽을 단순히 전달하고 싶을 수도 있습니다.

stream_ssl_preread 모듈은 SSL이나 TLS 연결의 초기 ClientHello 메시지를 검사하고 연결을 관리하는 데 사용할 수 있는 여러 값을 추출합니다. 1.15.2 릴리스에서 추가된 $ssl_preread_protocol 변수는 ClientHello 메시지의 client_version 필드에서 최신 SSL/TLS 버전 번호를 캡처합니다. 만약 ClientHello 메시지에 supported_versions 확장이 포함되어 있다면, 해당 변수는 TLSv1.3으로 설정됩니다.

만약 연결이 TLS 또는 SSL의 버전을 사용하지 않는다면, $ssl_preread_protocol 변수는 비어 있게 됩니다. 이는 해당 연결이 SSL/TLS 가 아닌 SSH와 같은 다른 프로토콜을 사용하고 있음을 나타냅니다.

다음 구성 스니펫은 $ssl_preread_protocol 변수를 map 블록에서 사용하여 연결에 사용되는 프로토콜에 적합한 upstream 그룹의 이름을 $upstream 변수로 설정합니다. 그런 다음 proxy_pass 지시문은 선택된 upstream 그룹으로 요청을 전달합니다. $ssl_preread_protocol 변수가 작동하려면 ssl_preread on 지시문이 server 블록에 포함되어야 함에 유의하세요.

stream {
    upstream ssh {
        server 192.0.2.1:22;
    }

    upstream web {
        server 192.0.2.2:443;
    }

    map $ssl_preread_protocol $upstream {
        default ssh;
        "TLSv1.2" web;
    }

    # SSH and SSL on the same port
    server {
        listen 443;

        proxy_pass $upstream;
        ssl_preread on;
    }
}

구성이 효과적으로 작동하려면 클라이언트는 기본 포트 22 대신 포트 443에서 SSH 서버에 접속해야 합니다. 예를 들어, MacOS와 Linux에 내장된 SSH 클라이언트를 사용하면 -p 플래그를 사용하여 포트를 변경할 수 있습니다.

$ ssh ssh-server-ip-address -p 443

3. NGINX의 최신 버전

NGINX의 최신버전은 항상 공식 저장소의 mainline 브랜치에서 이용이 가능합니다.

4. 더보기

NGINX 오픈 소스의 새로운 기능, 추가 개선 사항 및 버그 수정 등과 같은 전체 목록은 NGINX change log를 참조하세요.

NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 문의하십시오.

사용 사례에 대해 최신 소식을 빠르게 전달받고 싶으시면 아래 뉴스레터를 구독하세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required