Frinee의 코드저장소

로드 밸런서/방화벽: 4계층 장비(세션 장비)

by Frinee
이 글은 고재성, 이상훈 저 - "IT 엔지니어를 위한 네트워크 입문"를 공부하고 정리하여 작성하였습니다.

 

0. 4계층 장비의 등장

  • 기존 네트워크 장비는 2계층이나 3계층에서 동작하는 장비를 지칭
  • IP 부족으로 NAT 기술이 등장하고 보안용 방화벽, 프록시와 같은 장비들이 등장하여 4계층에서도 네트워크 장비가 많아짐
  • 4계층 장비는 통신의 방향성이나 순서와 같은 통신 전반의 관리가 필요

 

1. 4계층 장비의 특징

  • TCP와 같은 4계층 헤더에 있는 정보를 이해하고 동작함
  • 4계층 이상의 장비는 세션 테이블과 세션 정보를 이해하는 것이 중요
  1. 세션 테이블
    • 세션 정보를 저장, 확인하는 작업 전반에 대한 이해 필요
    • 세션 정보는 세션 테이블에 남아있는 라이프타임이 존재
  2. Symmetric(대칭) 경로 요구
    • Inbound와 Outbound 경로가 일치해야 함
  3. 정보 변경(로드 밸런서)
    • IP 주소가 변경되며 확장된 L7 로드밸런서(ADC)는 애플리케이션 프로토콜 정보도 변경됨

 

2. 로드 밸런서

  • 서버나 장비의 부하를 분산하기 위해 사용하며 웹 서버 부하 분산에 가장 많이 쓰임
  • IP 주소나 4계층 정보, 애플리케이션 정보를 확인 및 수정하는 기능
  • 스케일 아웃: 작은 장비 여러 대를 묶어 사용하는 방식이 가격을 낮출 수 있고 로드 밸런서가 이에 해당
  • 서비스에 사용되는 대표 IP 주소를 서비스 IP 주소로 가짐
  • 그리고 그 밑에 시스템이 늘어나면 로드 밸런서가 실제 IP로 변경해 요청을 보냄
  • L4 로드 밸런싱
    • 일반적인 로드 밸런서 동작 방식
    • TCP, UDP 정보(특히 포트 넘버)를 기반으로 로드 밸런싱 수행
    • 4계층 정보로만 분산처리 하는 경우를 말함
  • L7 로드 밸런싱
    • HTTP, SMTP, FTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱 수행
    • HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산
    • 일반적으로 ADC(Application Delivery Controller) 장비라 부르고 프록시 역할을 수행
    • 스퀴드(Squid)나 Nginx에서 수행하는 리버스 프록시와 유사한 기능을 지님
데이터 센터에서는 L4, L7 모두 지원하고 클라우드에서는 L4와 L7을 지원하는 컴포넌트를 계층별로 구분
ex) AWS NLB - L4, ALB - L7

2.1. L4 스위치

  • 4계층에서 동작하면서 로드 밸런서 기능이 있는 스위치
  • 외형은 스위치처럼 여러개의 포트를 지님
  • 스위치형 로드 밸런서가 가장 대중적이며 서버형, 스프트웨어형도 존재
  • 부하 분산, 성능 최적화, 리다이렉션 기능 제공
  • L4 스위치가 동작하기 위해선 가상 서버, 가상 IP, 리얼 서버, 리얼 IP를 설정해야 함
    • 가상 서버: 사용자가 바라보는 실제 서비스
    • 가상 IP: 사용자가 접근해야 하는 서비스 IP 주소
    • 리얼 서버: 실제 서비스를 수행하는 서버
    • 리얼 IP: 실제 서버의 IP
  • 사용자는 L4 스위치의 가상 IP를 목적지로 서비스를 요청
  • L4 스위치가 목적지로 설정된 가상 IP를 리얼 IP로 다시 변경해서 보내줌
  • 이 과정에서 부하를 어떤 방식으로 분산할지 결정할 수 있음

2.2. ADC

  • 애플리케이션 계층에서 동작하는 로드 밸런서
  • 애플리케이션 프로토콜의 헤더와 내용을 이해하고 동작하므로 다양한 부하 분산, 정보 수정, 정보 필터링이 가능
  • ADC는 이런 상세한 동작을 프록시로 동작
  • 대부분의 ADC는 L4 스위치의 기능을 포함함.
    • 4계층에서 애플리케이션 계층까지의 로드 밸런싱 기능 제공
    • 페일오버(Failover, 장애극복), 리다이렉션(Redirection) 기능도 함께 수행
    • 애플리케이션 프로토콜을 이해하고 최적화하는 기능 수행
    • 캐싱, 압축, 콘텐츠 변환 및 재작성, 인코딩 변환 등이 가능
    • 애플리케이션 프로토콜 최적화 기능
    • 플러그인 형태로 보안 강화 제공해 WAF(Web Application Firewall) 기능이나 HTML, XML 검증 및 변환 수행

2.3. L4 스위치 vs ADC

  • L4 스위치
    • TCP 계층에서의 최적화와 보안 기능도 제공함
    • TCP 레벨의 간단한 DoS 공격을 방어하거나 서버 부하를 줄이기 위한 TCP 세션 재사용 기능 제공
  • ADC
    • 성능 최적화를 위해서 부하가 많이 걸리는 이미지나 정적 콘텐츠 캐싱 기능을 별도로 수행
    • ADC에서 콘텐츠 압축 기능을 수행하여 웹 서버의 부하를 줄여줌
    • 하드웨어 가속이나 소프트웨어 최적화를 통해 부하가 걸리는 작업을 최적화
    • ADC에서는 SSL의 엔드 포인트로 동작해 클라이언트 - ADC 구간을 SSL로 처리해주고 ADC-웹 서버 사이를 일반 HTTP를 이용해 통신
    • 웹 서버 여러 대의 SSL 통신을 하나의 ADC에서 수용하기 위해 전용 SSL 가속 카드를 내장

 

 

2.4. 시스템 확장 방법: 스케일 업과 스케일 아웃

  1. 시스템 확장 방법
    • 스케일 업
      • 기존 시스템에 CPU, 메모리, 디스크와 같은 내부 컴포넌트 용량을 키우거나 더 큰 용량의 시스템을 구매해 서비스를 옮기는 방법
      • 스케일 업은 확장을 미리 고려해 시스템을 구축하면 초기 비용이 커지는 문제가 있음
      • 반대로 서비스에 맞춰서 시스템을 구매하면 확장이 필요할 때 새롭게 시스템을 구매하면서 낭비되는 문제가 있음
      • 그리고 필요한 용량을 늘리면 비용이 기하급수적으로 증가하는 문제가 있음
      • ex) 2GB CPU: 5만원, 4GB CPU: 20만원(!)
    • 스케일 아웃
      • 같은 용량의 시스템을 여러 대 배치하는 방식, 되도록 스케일 아웃 방식을 사용함
      • 대신에 새로 시스템을 설계하거나 분산을 위한 프로세스를 운영하고 부하를 분산하는 별도의 외부 시스템이 필요
  2. 시스템 축소 방법
    • 스케일 다운: 기존의 시스템보다 작은 용량의 시스템으로 서비스를 옮기는 방법
    • 스케일 인: 여러 개의 서비스를 합쳐 하나의 시스템으로 운영하는 방법

 

3. 방화벽

  • 네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 정책 조건에 맞춰 관리하는 장비
  • 일반적으로 네트워크 3,4계층에서 동작하고 세션 인지, 관리하는 SPI 엔진을 기반으로 동작하는 장비를 일컬음
  • 방화벽은 NAT(Network Address Translation) 동작 방식과 유사하게 세션 정보를 장비 내부에 저장
    • 패킷이 외부로 나갈 때 세션 정보를 저장
    • 패킷이 들어오거나 나갈 때 저장했던 세션 정보를 먼저 참조
      • 패킷이 외부에서 시작되었는지, 내부 사용자가 외부로 요청한 응답인지 가려냄
  • 세션 테이블을 이용해 패킷의 인과 관계를 파악할 수 있어 정책을 간단히 유지할 수 있음
  • 인터넷 방화벽의 경우 기본정책은 외부로 나가는 모든 패킷을 허용하고 내부로 들어오는 모든 패킷을 차단함

 

4. 4계층 장비를 통과할 때의 유의점(세션 관리)

  • 세션 장비는 세션을 이해하고 세션 테이블을 유지함
  • 세션 테이블 정보를 이용해 패킷을 변경하거나 애플리케이션 성능을 최적화
  • 보안을 강화하기 위해 패킷을 포워드(forward)하거나 드롭(drop)할 수 있음
  • 해당 기능을 사용하기 위해선 애플리케이션 - 세션 장비 간 세션 정보를 동기화하거나 추가 기능이 필요함.
  • 애플리케이션의 세션 기간과 서비스 방향성을 고려하고 비대칭 경로를 피해야 함

4.1. 세션 테이블 유지, 세션 정보 동기화

  • 종단 장비에서 통신을 시작하면 중간에 있는 세션 장비가 세션 상태를 기록
  • 종단 장비 간 통신이 정상적으로 종료되지 않았다면 일정 시간 동안 세션 테이블 유지
  • 메모리 사용률을 유지하고 악의적인 공격에 대비하기 위해서 타임아웃값을 줄이기도 함.
  • 세션 테이블에 세션이 없는 상황에서 애플리케이션이 통신을 시도하려 하면
    → 비정상 통신으로 판단해 패킷을 차단해버리기 때문에 세션 타임아웃값을 잘 조절해야 함

  • 동작 순서 (문제 상황)
    1. 3방향 핸드셰이크를 통해 정상적으로 세션 설정
    2. (2), (3) 세션 테이블을 참조해 방화벽에서 패킷 통과
    3. 일정 시간 동안 통신 없음
    4. (4) 세션 타임으로 세션 테이블 만료
    5. 세션 만료 후 애플리케이션 통신 시작
    6. (5) 세션이 만료되어 방화벽에서 패킷 드롭
  • 이런 문제를 해결하기 위한 세션 장비와 애플리케이션에서 각각 적용할 수 있는 설정이 존재

4.1.1. 세션 장비 운영자 입장

  1. 세션 만료 시간 증가
    • 이 경우, 애플리케이션의 세션 유지 시간 < 방화벽 세션 유지 시간
    • 대부분의 세션 장비는 포트 번호나 IP 주소마다 별도의 세션 만료 시간을 정할 수 있음
  2. 세션 시간은 유지, 중간 패킷을 수용할 수 있도록 방화벽 설정
    • 방화벽 옵션을 조정해 세션 테이블에 정보가 없는 ACK 패킷이 와도 세션을 새로 만들어 통과시키는 옵션을 사용
    • 전체적인 보안에 좋지 않기 때문에 비추
  3. 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
    • 양 종단 장비의 세션 정보 ≠ 세션 장비의 세션 정보일 때 발생하는 문제를 해결하기 위한 기능
    • 세션 타임 아웃 시 세션 정보를 삭제하지 않고 세션 정보 만료를 통보
    • TCP의 RST 플래그를 1로 세팅해 양 종단 장비에 전송
    • 양 종단 장비에서 세션이 비정상 종료 된걸 판단하고 해당 세션을 끊음
    • 동작 과정
      1. 세션 설정
      2. 일정 시간동안 통신 없음
      3. (1) 세션 타임아웃값이 넘어 세션 만료
      4. (2) 방화벽에서 양 종단 장비에 RST 패킷 전송
        1. A 장비에는 출발지 B, 도착지 A인 RST 패킷 전송
        2. B 장비에는 출발지 A, 도착지 B인 RST 패킷 전송
      5. (3) RST 패킷을 받은 양 종단 장비는 해당 프로세스 종료

4.1.2. 개발자 입장

  1. 애플리케이션에서 주기적인 패킷 발생 기능 추가
    • 애플리케이션에서 패킷을 주기적으로 발생시키면 세션을 계속 유지할 수 있음
    • 애플리케이션은 이를 위해 세션 상태 정보를 체크하는 더미 패킷(Dummy Packet)을 보냄

4.2. 비대칭 경로 문제

  • 네트워크의 안정성을 높이기 위해 네트워크 회선과 장비를 이중화함.
  • 이 때 패킷을 지나가는 경로가 2개 이상이므로 인바운드 패킷과 아웃바운드 패킷의 경로가 같을 수 있음
  • 이 때 통과하는 장비가 인바운드 패킷 = 아웃바운드 패킷인 경우 대칭 경로, 아닌 경우 비대칭 경로이다.
  • 세션 장비는 세션 테이블을 만들어 관리해야 하므로 패킷이 들어오고 나갈 때 동일한 장비를 통과해야 함
  • 비대칭 경로를 방화벽에서 처리하는 방법
    1. 세션 테이블 동기화
      1. 두 개의 경로 상의 두 장비가 하나의 장비처럼 동작하게 함
      2. 패킷의 경로를 변경하지 않고 동작한다는 장점이 있음
      3. 세션 동기화 시간 > 패킷 응답인 경우 정상 동작하지 않을 수 있음
      4. 이 기능은 응답시간이 비교적 긴 인터넷 게이트웨이 방화벽에 사용
    2. 세션 장비에서 다양한 방법으로 보정 
      1. 아웃바운드 패킷만 들어온 경우, 인바운드 패킷이 통과한 다른 세션 장비 쪽으로 패킷을 보내 경로를 보정
      2. 강제로 대칭 경로를 만들기 때문에 비대칭 경로로 인한 문제를 해결
      3. 강제로 다른 방화벽으로 패킷을 보내기 위해 방화벽 간 통신용 링크가 필요
      4. MAC 주소를 변경하는 MAC 리라이팅(Rewriting)이나 기존 패킷에 MAC 주소를 한 번 더인캡슐레이션하는 터널링(Tunneling) 기법으로 경로를 보정

4.3. 하나의 통신에서 두 개 이상의 세션이 사용될 때의 고려사항

  • 특별한 목적으로 2개 이상의 세션을 만드는 경우가 있음
  • 세션 장비도 세션 2개가 하나의 통신을 사용한다는 것을 알게 해야 함
  • 프로토콜은 데이터 프로토콜컨트롤 프로토콜로 나뉨
    • 데이터 프로토콜: 데이터를 실어나름
    • 컨트롤 프로토콜: 데이터가 잘 전송되도록 세션 제어
  • 현대에는 하나의 프로토콜에서 헤더나 메시지로만 구분해서 해결하지만 일부는 두 개의 프로토콜을 분리해서 사용하기도 함 ex) FTP

4.3.1. FTP의 구동 방식

  • 기본적인 구동 방식은 Active 모드이고 컨트롤 프로토콜과 데이터 프로토콜이 반대 방향으로 동작
  • Active 모드
    • 컨트롤 프로토콜: 명령어 전달, 클라이언트 → 서버로 통신 시작
    • 데이터 프로토콜: 데이터 전달 , 서버 → 클라이언트로 데이터 푸시

    1. 클라이언트가 FTP 서버에 접속, 클라이언트는 1023번 이상의 TCP 포트를 사용, 서버는 21번 포트 사용
    2. ① 클라이언트가 서버에 데이터를 1025번 포트를 사용해 수신하겠다고 알림
    3. ②서버는 클라이언트에게 1025번 포트를 사용해 송신하겠다고 응답
    4. ③서버에서 데이터를 보냄, 클라이언트에서 응답하고 데이터 수신
    • 중간에 방화벽이나 세션 장비가 있으면 동작 방식에 맞춰 방화벽의 반대 방향도 열어야 함
    • NAT 환경인 경우, FTP가 동작하는 프로토콜을 모두 이해할 수 있는 별도의 기능을 동작시키는 ALG(Application Layer Gateway)를 실행함
    • ALG가 동작하면 반대 방향으로 시작하는 데이터 세션을 인지해 방화벽과 NAT 모두 동작시킴
  • Passive 모드
    • Active 모드를 보완한 모드
    • 컨트롤 프로토콜, 데이터 프로토콜 모두 클라이언트 → 서버로 데이터를 요청해 동작

    1. 클라이언트가 서버에 접속. 클라언트는 1023번 이상의 TCP 포트를 사용, 서버는 TCP 21번 포트를 사용
    2. ① 클라이언트가 Passive 모드를 사용하겠다고 알림
    3. ② 서버는 클라이언트에 데이터 수신에 사용할 포트를 알림. 2024번 포트를 사용해 수신하겠다고 응답
    4. ③ 클라이언트에서 서버에 데이터를 요청. ② 과정에서 서버에서 알려준 2024번 포트에 요청.
    5. 데이터 전송
    • 클라이언트 쪽에 방화벽이나 세션 장비가 있을 경우, 특별한 작업 없이 동작한다는 장점
    • 서버 쪽에 방화벽이 있는 경우, 데이터 다운로드를 위한 추가 포트를 FTP 서버에서 열어야 함

 

 

 

 

자료

  • IT 엔지니어를 위한 네트워크 입문 (고재성, 이상훈 저, 2020.10)

'[컴퓨터 과학자 스터디] > 네트워크' 카테고리의 다른 글

DNS  (4) 2024.10.28
통신을 도와주는 네트워크 주요 기술  (0) 2024.10.28
라우터/L3 스위치: 3계층 장비  (0) 2024.10.23
스위치: 2계층 장비  (2) 2024.10.20
네트워크 통신하기  (2) 2024.10.16

블로그의 정보

프리니의 코드저장소

Frinee

활동하기