Network Infra 쉽게 이해하기/L4 & L7 Network 쉽게 이해하기

L4 스위치 쉽게 이해하기 #7(SSL Offload)

네트워크 엔지니어 환영 2020. 12. 7. 10:16
반응형
이번 문서 'L4 스위치 쉽기 이해하기'와 '서버 부하 분산 쉽게 이해하기', 다음에 이어질 문서인 'L4/L7 로드밸런싱 쉽게 이해하기'는 L4/L7 Network Swtich인 'F5 Networks' 장비를 기준으로 설명합니다. Alteon(Radware), Brocade, Cisco, Piolink, Pumkin, Citrix의 관점에서는 다소 다를 수 있습니다.

이번엔 Port에 관한 이야기를 해보고자 합니다. Port 또한 IP처럼 L4 스위치를 거쳐갈 때 NAT가 실시되는 경우가 있습니다. L4 스위치의 Virtual Server에 설정된 Port를 서비스 포트(Service Port)라고 부르는데, Virtual Server의 서비스 포트와 서버의 서비스 포트를 다르게 설정하는 것입니다. 그렇게 되면 사용자의 Request가 L4 스위치를 지나 서버로 향할 때 목적지 포트가 서버의 포트로 변경되며 이를 Port Translation이라고 합니다. 

 

Port Translation

보통의 경우, 서버의 포트와 L4 스위치의 Virtual Server의 서비스 포트를 일치시켜 사용합니다. 그게 좀 더 직관적이기도 하고 관리하기에도 편리한 편입니다. 아래 그림처럼 말이죠.

<Virtual Server의 포트와 서버의 포트가 일치하는 경우>

하지만 그렇지 않은 경우도 있습니다. Virtual Server의 서비스 포트와 서버의 포트가 일치하지 않는 경우를 뜻합니다. 웹 서버에서 사용하는 포트인 80을 이미 사용하고 있는데. 또 다른 웹서비스를 외부 사용자들을 대상으로 제공해야 하는 경우, 서버는 이미 사용 중인 80 포트를 제외한 다른 포트(예를 들어 8080)를 사용할 수밖에 없겠죠.

또 다른 예로 서비스 제공자가 외부에서 8080이 사용되는 걸 알게 되길 원하지 않을 때는 어떻게 해야 할까요? 그렇다면 L4 스위치의 Virtual Server의 서비스 포트를 80으로 한 후 서버의 포트인 8080으로 Port Translation을 실시한다면 깔끔하게 처리되겠지요. 아래 그림처럼 말입니다.

<Virtual Server의 포트와 서버의 포트가 일치하지 않는 경우>

사용자의 요청이 L4 스위치로 향할 때 목적지의 포트는 L4 스위치의 Virtual Server의 서비스 포트인 80으로 설정됩니다.

① 출발지 : 사용자(IP 15.15.15.15) - > 목적지 : L4 스위치(IP 123.111.43.1:80)

그리고 이것이 L4 스위치의 Virtual Server를 지나 서버에 도달할 때는 다음과 같이 변경됩니다.

② 출발지 : 사용자(IP 15.15.15.15) - > 목적지 : 서버(IP 192.168.1.11:8080)

목적지의 포트를 변경해주어 서버가 실제로 사용하는 8080 포트로 전달될 수 있도록 하는 것입니다. 이렇게 하면 외부에서는 서버의 실제 사용 포트가 8080인 것을 알 수 없고 서비스 제공자는 80 포트가 아닌 8080 포트를 쓰면서 외부 사용자들을 대상으로 80 포트로 서비스를 할 수 있게 되지요. 사실 이렇게 사용하는 경우는 많지 않은 것 같습니다. 하지만 Port Translation이 꼭 필요한 경우가 있으니.. 바로 SSL Offload입니다.

 

SSL Offload

HTTPS는 HTTP의 보안이 강화된 버전입니다. HTTP를 기반으로 하여 웹서버와 통신을 하되 암호화 통신(보안)을 위한 협의 과정을 거친다는 뜻입니다. 그 협의 과정에는 SSL(Secure Socket Layer)과 TLS(Transport Layer Security, SSL 강화 버전)이라는 프로토콜을 사용하여 데이터를 암호화합니다.

출처: HTTPS 통신과정 쉽게 이해하기(우리는 구글에 어떻게 들어가는가)
 [네트워크 엔지니어 환영의 AWS 기술블로그]

HTTPS 통신과정 쉽게 이해하기 #1(우리는 구글에 어떻게 들어가는가)를 필두로 한 HTTPS 시리즈에서 SSL 암호화 / 복호화에 대한 이야기를 하였습니다. 클라이언트와 서버가 데이터를 어떻게 암호화하는지 복호화하는지에 대한 이야기였는데요. 요즘 대부분의 웹페이지가 HTTPS를 통해 제공되고 있기에 웹 서비스를 제공하는 서버라면 SSL 암호화 / 복호화는 필수적입니다. 그러므로 서버를 대표하는 L4 스위치 또한 여기에서 자유로울 수 없습니다. 위치상 L4 스위치가 중간에 위치한 만큼 이 어려운 작업을 대신 수행하는 것이 가능하기 때문이죠. 그렇다면 왜 L4 스위치가 이 작업을 대신하는 것일까요?

그 이유는 바로 클라이언트와의 통신을 위해 SSL 암복호화를 실시하는 작업이 웹 서비스를 제공하는 서버에게 있어 리소스 소모가 매우 큰 작업이기 때문입니다. 그래서 이를 L4 스위치가 대신 함으로써 L4 스위치와 서버 간 통신을 평문 데이터로 하여 서버의 부하를 줄여주는 역할을 할 수 있습니다. 이를 SSL Offload라고 부릅니다. 일단 그림으로 살펴보겠습니다.

(SSL 암호화/복호화의 자세한 과정에 대해서는 HTTPS 통신과정 쉽게 이해하기 #1(우리는 구글에 어떻게 들어가는가)를 참조해주세요!)

<SSL 인증서를 게시한 상태로 클라이언트와 통신하는 서버>

L4 스위치가 없는 상태에서는 각 서버들과 클라이언트가 직접 통신하며 SSL 인증서를 검증하고 데이터를 암호화하는 과정(이하 SSL Handshake)을 거칩니다. 하지만 아래 그림처럼 L4 스위치가 중간에 있는 경우라면 서버들과 일일이 해당 과정을 거칠 필요가 없습니다. L4 스위치의 Virtual Server가 서버들을 대표하여 SSL 인증서를 검증하고 데이터를 암호화하는 SSL Handshake를 대신하는 것이죠. 그리고 L4 스위치와 서버는 암호화된 데이터가 아닌 평문 데이터를 주고받음으로써 서버의 암호화/복호화 부담을 줄여 줄 수 있습니다. 아래 그림과 같습니다.

<서버를 대신하여 SSL 인증서를 게시하는 L4 스위치>

그림에서 보는 것처럼 서버에 있던 SSL 인증서가 L4 스위치의 Virtual Server에게 옮겨 갔고, 클라이언트와 L4 스위치가 SSL Handshake를 실시합니다. SSL Handshake 이후, 클라이언트로부터 암호화(443)된 요청을 전달받은 L4 스위치 Virtual Server는 이 요청을 복호화한 후 Port Translation을 실시한 다음에 서버에게 평문 데이터(80)로 전송합니다.

버는 SSL Handshake 과정을 실시하지 않아도 되므로 443(HTTPS) 포트를 사용할 필요가 없습니다. 또한  80(HTTP) 포트를 사용하여 L4 스위치와 평문 데이터를 주고받으면 됩니다. 그러므로 위에 그림에 있는 것처럼 해당 Virtual Server에 속한 Pool의 Pool Member들은 443 포트가 아닌 80 포트를 사용합니다. 지금까지의 과정을 통틀어 SSL Offload라고 합니다.  

<F5 L4 스위치의 SSL Profile>

위 그림은 F5 Networks L4 스위치에서 SSL Offload를 위해 인증서를 탑재하고 Virtual Server에 SSL Offload의 기능을 적용하기 위한 'Profile'을 설정하는 부분입니다. Profile은 Virtual Server의 성격을 정의하는 것으로 L4 스위치의 Virtual Server에 SSL 인증서를 건네줌으로써 기능을 수행할 수 있도록 하는 것이죠. 위 Profile에 SSL 인증서(키, 인증서, 인증서 체인)를 적용하고 Profile을 생성합니다. 그리고 Virtual Server에 이 Profile을 적용합니다. Virtual Server는 이제 SSL Offload를 실시할 수 있게 됩니다.

여기까지가 Port Translation에 대한 이야기입니다. 말이 Port Translation이지 SSL Offload를 위한 이야기나 다름없군요~ 다음 문서에서는 L4 스위치의 핵심 특성(Health check, Connection Timeout 등)에 대해 알아보겠습니다.