로드 밸런서/방화벽 (4계층)

Jaca·2022년 7월 27일
0

4계층 장비의 특징은 포트 번호, 시퀀스 번호, ACK 번호에 대해 이해해야 한다.
통신의 방향성이나 순서같은 통신 전반에 대한 정보를 세션 테이블에 담아 관리한다.

4계층 장비의 특징

4계층 장비는 TCP와 같은 4계층 헤더에 있는 정보를 이해하고 이 정보들을 기반으로 동작한다.
4계층 장비가 최우선으로 고려할 요소는 다음과 같다.

  • 세션 테이블
    세션 장비는 세션 테이블 기반으로 운영된다.
    세션 정보를 저장, 확인하는 작업 전반에 대한 이해가 필요하다.
    세션 정보는 세션 테이블에 남아 있는 라이프타임이 존재한다.

  • Symmetric 경로 요구
    Inbound, Outbound 경로가 일치해야 한다.

  • 정보 변경
    IP 주소가 변경되며 확장된 L7 로드 밸런서는 애플리케이션 프로토콜 정보도 변경된다.

세션 장비의 이런 요소가 서비스에 영향을 미치므로 네트워크 통신 중간 위치에 세션을 기반으로 동작하는 방화벽, NAT, 로드 밸런서와 같은 장비가 있을 경우, 네트워크 인프라뿐만 아니라 시스템 설계, 애플리케이션 개발에도 세션 장비에 대한 고려가 필요하다.

로드 밸런서

서버나 장비의 부하를 분산하기 위해 사용하는 장비를 로드 밸런서라고 한다.
로드 밸런서가 서비스에 사용되는 대표 IP 주소를 서비스 IP로 갖고 로드 밸런서가 각 시스템의 실제 IP로 변경해 요청을 보낸다.
로드 밸런서는 웹, 애플리케이션 뿐만 아니라 방화벽, VPN와 같은 다양한 서비스를 위해 사용될 수 있다.

L4 로드 밸런싱

일반적인 로드 밸런서가 동작하는 방식이다.
TCP, UDP 정보를 기반으로 로드 밸런싱을 수행한다.
최근 로드 밸런서는 L4, L7의 기능을 모두 지원하므로 L4 로드 밸런싱만 제공하는 장비는 찾기 힘들지만, 4계층 정보로만 분산 처리를 하는 경우를 L4 로드 밸런싱이라고 한다.

L7 로드 밸런싱

HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행한다.
HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산할 수 있다.

L4 스위치

L4 스위치는 4계층에서 동작하면서 로드 밸런서 기능이 있는 스위치이다.
L4 스위치는 부하 분산, 성능 최적화, 리다이렉션 기능을 제공한다.
L4 스위치가 동작하려면 가상 서버와 가상 IP, 리얼 서버, 리얼 IP를 설정해야 한다.

가상 서버는 사용자가 바라보는 실제 서버이고, 가상 IP는 사용자가 접근해야 하는 IP이다.
리얼 서버는 실제 서비스를 수행하는 서버이고. 리얼 IP는 실제 서버의 IP이다.
여기서 L4 스위치는 가상 IP를 리얼 IP로 변경해주는 역할을 한다.

ADC(Application Delivery Controller)

ADC는 애플리케이션 계층에서 동작하는 로드 밸런서이다.
4계층에서 동작하는 L4 스위치와 달리 애플리케이션 프로토콜의 헤더와 내용을 이해하고 동작하므로 다양한 부하 분산, 정보 수정, 정보 필터링이 가능하다.

대부분의 ADC는 4계층에서 애플리케이션 계층까지 로드 밸런싱 기능을 제공하고, 페일 오버, 리다이렉션 기능도 함께 수행한다.
이 외에도 애플리케이션 프로토콜을 이해하고 최적하하는 다양한 기능을 제공한다.
캐싱, 압축, 콘텐츠 변환 및 재작성, 인코딩 변환 등이 가능하고 애플리케이션 프로토콜 최적화 기능도 제공한다.

L4 스위치 VS ADC

L4 스위치는 TCP, UDP 정보를 기반으로 부하를 분산한다.
부하 분산뿐만 아니라 TCP 계층에서 최적화와 보안 기능도 함께 제공할 수 있다.
TCP 레벨의 간단한 DoS 공격을 방어하거나 서버 부하를 줄이기 위해서 TCP 세션 재사용과 같이 보안과 성능을 높여주는 기능도 함께 제공할 수 있다.

ADC는 애플리케이션 프로토콜을 이해하고 애플리케이션 내용에 대한 분산, 리다이렉션, 최적화를 제공해 L4 스위치보다 더 다양한 기능을 사용할 수 있다.

ADC는 성능 최적화를 위해 서버에서 수행하는 작업 중 부하가 많이 걸리는 작업을 별도로 수행한다.
그 중 대표적인 것은 이미지 등의 정적 콘텐츠 캐싱이다.

방화벽

네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 허용하거나 차단하는 장비이다.

방화벽은 NAT의 동작 방식과 유사하게 세션 정보를 장비 내부에 저장한다.
패킷이 들어오거나 나갈 때 저장했던 세션 정보를 참조해 외부에서 들어 오는 것인지 내부에서 나가는 것 인지 가려낸다.

만약 세션 테이블과 같이 상태 정보를 담아둘 공간이 없다면 세션의 방향성을 파악하지 못해 정책을 복잡하게 관리해야 한다.

세션 관리

세션 장비는 세션을 이해하고 세션 테이블을 유지해야 한다.
애플리케이션의 세션 시간과 서비스 방향성을 고려하고 비대칭 경로를 피하는 것이 매우 중요하다.
세션 장비를 사용할 때 생기는 대부분의 문제는 이런 부분을 고려하지 않아서 이다.

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

종단 장비에서 통신을 시작하면 중간에 있는 세션 장비는 해당 세션 상태를 테이블에 기록한다.
종단 장비간 통신이 종료되어도 일정 시간 메모리에 세션 정보를 저장한다.

하지만 일부 애플리케이션은 세션을 한 번 연결 해놓고 다음 통신이 시도될 때까지 세션이 끊기지 않도록 세션 타임아웃값을 길게 설정하기도 한다.

이런 종류의 애플리케이션이 통신할 때, 세션 장비의 세션 타임아웃값이 애플리케이션의 세션 타임아웃값 보다 짧으면 통신에 문제가 생긴다.
중간 세션 장비의 세션 유지 시간이 지나 세션 테이블에 있는 세션 정보가 사라졌는데도 양쪽 단말에서는 세션이 유지되고 있다면 다시 통신이 시작되어 데이터를 보낼 때 중간 세션 장비에서 막히는 문제가 발생한다.

세션 장비의 세션 테이블에 세션이 없는 상황에서 SYN가 아닌 ACK로 표시된 패킷이 들어오면 세션 장비에서는 비정상 통신으로 판단해 패킷을 차단하고 그런 종류의 패킷을 통과시키는 옵션을 설정해 패킷을 강제로 통과시키더라도 반대 방향으로 데이터가 들어오면 정책에 막힐 수 있다.

이런 문제를 해결하기 위해 세션 장비와 애플리케이션에서 각각 적용할 수 있는 설정이 있다.

세션 장비 운영자 입장

  1. 세션 만료 시간 증가
    운영자가 애플리케이션에 맞게 세션 만료 시간을 늘리는 방법이 있다.
    애플리케이션의 세션 유지 시간보다 방화벽의 유지 시간이 길어야 한다.

  2. 세션 시간을 둔 채 중간 패킷을 수용할 수 있도록 방화벽 설정
    세션 테이블에 정보가 없는 ACK 패킷이 들어오더라도 세션 정보를 새로 만들어 통과 시킬 수 있다.
    하지만 보안이 취약해지는 기능이다.

  3. 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
    이 기능은 양 종단 장비의 세션 정보와 중간 세션 장비의 세션 정보가 일치하지 않아 발생하는 문제를 해결하기 위해 사용하는 기능이다.

개발자 입장

애플리케이션과 세션 장비의 세션 타임아웃 시간을 일치시키는 가장 좋은 방법은 애플리케이션에서 패킷을 주기적으로 발생시키는 것이다.

비대칭 경로 문제

네트워크가 이중화 되어있을 때,
패킷이 지나가는 경로가 2개 이상이므로 인바운드 패킷과 아웃바운드 패킷의 경로가 다를 수도 있다.
인바운드 패킷과 아웃바운드 패킷이 같은 장비를 통과하는 것을 대칭 경로, 다른 장비를 통하는 것을 비대칭 경로라고 한다.

세션 장비는 세션 테이블을 만들어 관리해야 하므로 패킷이 들어오고 나갈 때 동일한 장비를 통과하지 않으면 문제가 발생한다.

이 경우 가장 좋은 해결법은 비대칭 경로가 생기지 않도록 경로를 디자인 하는 것이다.

비대칭 경로를 방화벽에서 처리할 수 있는 방법은 아래와 같다.
1. 세션 테이블을 동기화
세션 테이블을 동기화하면 두 개 경로상의 두 장비가 하나의 장비처럼 동작하므로 비대칭 경로에서도 정상적으로 동작할 수 있다.
하지만 동기화 시간보다 패킷 응답 시간이 더 빠를 수 있으므로 비추천한다.

  1. 세션 장비에서 다양한 방법으로 보정
    인바운드 패킷이 통과하지 않았는데 아웃바운드 패킷이 장비로 들어오면, 인바운드 패킷이 들어온 경로로 패킷을 보내도록 경로를 보정한다.
profile
I am me

0개의 댓글