IT 엔지니어를 위한 네트워크 입문 - 6장 로드밸런서 / 방화벽: 4계층 장비(세션장비)

코코딩딩·2022년 7월 1일
1

네트워크

목록 보기
6/6
post-thumbnail

시작하기 앞서..

4계층 장비에 대해서 알아보기 위해서는 포트번호, 시퀀스번호, ACK번호에 대한 이해가 필요합니다.
4계층 장비는 기존 2~3계층 장비에서 고려하지 않았던 통신 방향성이나 순서와 같은 통신 전반에 대한 관리가 필요합니다.
또한 이러한 정보를 세션 테이블 이라는 공간에 담아서 관리합니다.

4계층 장비의 특징

4계층 장비는 테이블을 기반으로 운영됩니다.
그래서 4계층에 속하는 장비들을 세션장비라 칭합니다.
이에 로드밸런서, 방화벽 같은 장비가 속합니다.
세션장비를 사용할 때는 다음과 같은 고려할 부분이 있습니다.

세션테이블

4계층 장비는 세션테이블에 세션 정보를 저장하고 확인하는 작업을 하는데 이에 대한 정확한 이해가 필요합니다. 또한 세션 테이블 내의 세션정보의 라이프타임에 대한 이해도 필요합니다.

Symmetric(대칭) 경로 요구

Inbound와 Outbound 경로가 일치해야합니다.

정보 변경(로드밸런서의 경우)

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

  • 세션 장비의 이러한 특징으로 인해 서비스에 영향을 미치게 되며, 네트워크 통신 중간에 4계층 장비가 있을 경우 시스템 설계 뿐아니라 어플리케이션 개발에서도 세션 장비에 대한 고려가 필요합니다.

로드 밸런서

로드 밸런서는 서버나 장비의 부하를 분산하기 위해 사용하는 장비입니다.
로드 밸런서는 트래픽을 분배해주는 기능과 IP주소나 4계층 정보, 어플리케이션 정보를 확인,수정하는 기능을 가지고 있습니다.
로드 밸런서는 주로 웹 서버 부하 분산에 사용됩니다.

5천 명의 요청을 처리하는 서버의 가격은 천 명의 요청을 처리하는 서버의 5배 이상의 가격을 가집니다.
즉 5천명의 요청을 처리하는 서버보다 천 명의 요청을 처리하는 서버 5대를 운영하는 것이 경제적입니다.
이러한 시스템 확장 방식을 스케일 아웃 이라 합니다.

로드 밸런서를 사용하면 작은 시스템을 여러 대 운영하더라도 사용자에게는 하나의 서비스로 보입니다. 아래 그림과 같이 로드밸런서는 대표 IP(서비스 IP)를 통해 사용자의 요청을 받으며, 받은 요청을 각 시스템의 실제 IP로 변경해 해당 시스템으로 다시 요청을 전달합니다.

로드 밸런서는 동작하는 계층에 따라서 4계층과 7계층으로 나뉩니다.

  • L4 로드 밸런싱
    일반적인 로드 밸런서가 동작하는 방식입니다. TCP와 UDP 정보를 기반으로 로드 밸런싱을 수행합니다.

  • L7 로드 밸런싱
    HTTP, FTP, SMTP와 같이 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행합니다. HTTP 해더 저보나 URI 등의 정보를 기반으로 프로토콜을 이해한 후 부하를 분산합니다. 이러한 장비를 ADC(Application Delivery Controller)라고 부르며, 프록시 역할을 수행합니다.

L4 스위치

L4 스위치는 용어 그대로 4계층에서 동작하면서 로드 밸런서 기능이 있는 스위치입니다. 내부 동작 방식은 4계층 로드 밸런서이지만 외형은 스위치처럼 여러개의 포트를 가지고 있습니다. L4 스위치는 부하 분산, 성능 최적화, 리다이랙션 기능을 제공합니다.

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

ADC

ADC는 어플리케이션 계층에서 동작하는 로드 밸런서입니다. 4계층에서 동작하는 L4스위치와는 달리 어플리케이션 프로토콜의 헤더와 내용을 이해하고 동작하므로 다양한 부하분산, 정보수정, 정보 필터링 기능을 가지고 있습니다.
ADC는 일부를 제외하고 L4스위치의 기능을 포함하고 있습니다. 대부분 ADC는 4계층에서 어플리케이션 계층까지 로드밸런싱 기능을 제공하고, 페일오버, 리다이랙션 기능도 함께 수행합니다.
또한 캐싱, 압축, 콘텐츠 변환 및 재작성, 인코딩 변환 등의 어플리케이션 프로토콜 최적화 기능도 제공합니다.

L4 스위치 VS ADC

L4스위치는 4계층에서 동작하며 TCP, UDP 정보를 기반으로 부하를 분산합니다. 또한 TCP 계층에서의 최적화와 보안기능도 제공합니다. TCP 레벨의 간단한 DoS 공격을 방어하거나 TCP 세션을 재사용하여 서버 수하를 줄이기도 합니다.

ADC는 어플리케이션을 이해하고 어플리케이션 내용에 대한 분산, 리다이랙션, 최적화를 제공해 L4 스위치보다 더 양한 기능을 사용할 수 있습니다.
ADC는 성능 최적화를 위해 서버에서 수행하는 작업 중 부하가 많이 걸리는 작업을 별도로 수행합니다. 그 중 하나가 이미지나 정적 컨텐츠 캐싱 기능입니다.

최근 SSL 프로토콜을 사용하는 비중이 늘면서 웹 서버의 SSL 암복호화 부하가 늘고 있습니다. ADC에서는 SSL의 엔드포인트로 동작해 클라이언트에서 ADC까지의 구간을 SSL로 처리해주고 ADC와 웹서버 사이를 일반 HTTP를 이용해 통신하기도합니다.

참고 : 스케일 업과 스케일 아웃

서비스를 운영하다보면 데이터 양이 늘어 기존의 서버 하나로는 서비스가 불가능해지는 시점이 다가옵니다. 이때 서비스를 확장하는 방법은 스케일 업과 스케일 아웃 방식이 있습니다.
스케일 업은 해당 장비의 스팩을 높히는 것입니다. 메모리를 추가로 장착하거나, 기존의 자원을 새로운 고스팩 자원으로 교체하는 것을 의미합니다. 이에 반대는 스케일 다운이라 합니다.
스케일 아웃은 시스템을 여러대 배치하여 하나의 서비스처럼 사용하는 것을 의미합니다. 스케일 아웃 하기 위해서는 새로운 시스템 설계를 하거나, 분산을 위한 별도의 프로세스를 운영하기도하며, 로드밸런서와 같은 부하를 분산해주는 별도의 외부 시스템이 필요합니다.

방화벽

방화벽은 네트워크 중간에서 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞춰 혀용하거나 차단하는 장비입니다.

방화벽은 NAT동작 방식과 유사하게 세션정보를 장비 내부에 저장합니다. 패킷이 외부로 나갈때 세션 정보를 저장하고 패킷이 들어오거나 나갈 때 저장했떤 세선정보를 먼저 참조해 들어오는 패킷이 외부에서 처음 시작된 것인지, 내부 사용자가 외부로 요청한 응답인지 가려냅니다.

방화벽의 세션테이블을 이용해 패킷의 인과 관계를 파악할 수 있어 정책을 간단히 유지할 수 있습니다.
만약 세션 테이블이 없다면 상태정보를 담아두는 공간이 없어 세션의 방향성을 파악하지 못하게 되고, 이에 따라서 많은 정책을 복잡하게 관리해야 합니다. 인터넷 같은 불특정 다수와 통신해야 할 때는 정책의 복잡도가 많이 증가하게 됩니다. 방화벽은 메모리에 남은 이런 상태와 세션정보를 이용해 패킷을 상세히 로깅하고 관찰할 수 있습니다.

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

세션 장비는 2~3계층 네트워크 장비와 달리 세션을 이해하고 세션 테이블을 유지합니다. 세션 테이블 정보를 이용해 패킷을 변경하거나 어플리케이션 성능을 최적화 하고 보안을 강화하하기 위해 패킷을 포워드하거나 드롭을 할 수 있습니다.
세션장비를 잘 사용하기 위해서는 해당 장비가 네트워크 중간에 있을 때 생기는 문제점들에 대해서 잘 파악하고 있어야 합니다.

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

세션 테이블은 메모리에 저장되므로 메모리 사용률을 적절히 유지 시키기 위해서 타임 아웃 값을 가지고 있습니다. 세션 정보는 무제한으로 저장하고 있을 수 없고 여러 어플리케이션 통신을 관리하므로 일반적인 어플리케이션에 맞춰 적당한 세션 타임아웃 값을 유지해야 합니다.

세션 장비의 세션 타임아웃값 보다 어플리케이션의 세션타임아웃 값이 짧으면 문제가 생길 수 있습니다. 중간 세션장비의 세션 유지 시간이 지나 세션 테이블에 있는 정보가 사라졌는데도 양쪽 단말에서는 세션이 유지되고 있다면, 다시 통신이 시작되어 데이터를 보낼 때 중간 세션 장비에서 막히는 문제가 발생합니다. 세션장비의 세션 테이블에 세션정보가 없는 상황에서 SYN이 아닌 ACK로 표시된 패킷이 들어오면 세션 장비에서는 비정상적인 통신으로 판단해 패킷을 차단하게 됩니다.

이러한 문제는 세션장비와 어플리케이션에서 각각 세션타임아웃 값에 대한 설정을 적용하는 것으로 해결할 수 있습니다.

세션장비 운영자 입장

  • 세션만료 시간 증가
    세션 장비 운영자가 어플리케이션에 맞게 세션만료시간을 늘리는 방법이 있씁니다. 이경우 어플리케이션 세션 유지 시간보다 방화벽 세션 유지 시간이 더 길어야합니다.
  • 세션 시간은 둔 채로 중간 패킷을 수용할 수 있도록 방화벽 설정
    세션 테이블에 정보가 없는 ACK 패킷이 들어오면 방화벽은 패킷을 차단하지만 옵션을 조정해 세션테이블에 없는 ACK 패킷이 들어오더라도 세션을 새로 만들어 통과시킬 수 있는 옵션이 있습니다. 하지만 이러한 방법은 보안을 취약하게 만들기 때문에 여러가지 고려가 필요하고 가능하면 적용하지 않는게 좋습니다.
  • 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
    세션 테이블 유지에 대한 문제는 양 종단의 세션 정보와 중간 세션장비의 세션정보가 일치하지 않아서 발생하는 것입니다. 그러므로 세션 상태정보를 강제로 공유하기 위해 세션 장비에서는 세션 타임아웃 시 세션 정보를 삭제하는 것이 아닌 세션 정보에 있는 양 종단 장비에 세션 정보 만료를 통보합니다.
  1. 세션 설정
  2. 일정 시간 동안 통신 없음
  3. 세션 타임아웃 값이 넘어 세션 만료
  4. 방화벽에서 양 종단 장비에 RST패킷을 전송
  • A, B 장비 통신일 경우
  • A 장비에는 출발지 B, 도착지 A인 RST 패킷을 전송
  • B 장비에는 출발지 A, 도착지 B인 RST 패킷을 전송
  1. RST 패킷을 받은 양 종단 장비는 해당 프로세스 종료

개발자 입장

  • 어플리케이션에서 주기적인 패킷 발생 기능추가
    어플리케이션과 세션장비의 타임아웃 시간을 일치시키는 가장 좋은 방법은 어플리케이션에서 패킷을 주기적으로 발생시키는 것입니다. 어플리케이션이 주기적으로 더미 패킷을 보내게 되므로 방화벽에서는 세션 타임아웃이 바생하지 않습니다.

비대칭 경로 문제

네트워크의 안정성을 높이기 위해 네트워크 회선과 장비를 이중화합니다. 이때 패킷이 지나가는 경로는 2개 이므로 인바운드 패킷과 아웃바운드 패킷의 경로가 같거나 다를 수 있습니다. 인바운드 패킷과 아웃바운드 패킷이 같은 장비를 통과하는 것을 대칭경로라고 하고 다른 장비를 통과하는 것을 비대칭 경로라 부릅니다.

세션장비는 세션 테이블을 만들어 관리해야 하므로 패킷이 들어오고 나갈 때 동일한 장비를 통과해야합니다. 네트워크 경로 이중화를 위해 세션장비를 두 대 이상 설치한 경우 패킷이 들어올 때와 나갈 때 경로가 일정하게 유지되지 않으면 정상적인 서비스가 되지 않습니다.

그러므로 비대칭 경로가 생기지 않도록 네트워크 경로를 디자인하는 것이 중요합니다.

  • 첫 번째 방법 : 세션테이블 동기화
    세션 테이블을 동기화 하면 두 개 경로상의 두 장비가 하나의 장비처럼 동작하기 때문에 비대칭 경로에서도 정상적으로 동작할 수 있습니다. 이 방식을 이용하면 패킷의 경로를 변경하지 않아도 된다는 이점이 있습니다. 하지만 패킷 응답 시간이 세션 동기화 시간보다 빠르게 되면 정상적으로 동작하지 않을 수도 있다는 단점이 있습니다. 해당 기능은 비교적 응답시간이 긴 인터넷 게이트웨이로 방화벽이 사용될 때 유용하게 사용될 수 있습니다.

  • 두 번째 방법 : 비대칭 경로가 생길 경우 세션 장비에서 다양한 방법으로 이를 보정.
    인바운드 패킷이 통과하지 않았는데 아웃바운드 패킷이 장비로 들어온 경우, 인바운드 패킷을 통과한 다른 세션 장비 쪽으로 패킷을 보내 경로를 보정합니다. 그러면 강제로 대칭 경로를 만들어주게 되므로 비대칭 경로문제를 해결 하게 됩니다.

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

현대 프로콜은 하나의 통신을 위해 한 개의 세션만을 사용하는 경우가 대부분이지만 특별한 목적으로 두 개 이상의 세션을 만드는 경우도 있습니다. 이 때 서로 다른 두 세션이 하나의 통신을 위해 사용하고 있다는 것을 네트워크 통신 중간에 놓은 세션 장비도 파악해야 합니다.
두 통신 중 한 쪽 세션이 끊겨 있거나 세션 장비의 세션 테이블에서 삭제되면 단방향 통신만 가능하거나 통신을 하지 못할 수도 있습니다.

프로토콜은 데이터 프로토콜과 컨트롤 프로토콜로 구분할 수 있습니다.

  • 데이터 프로토콜 : 데이터를 실어 나르는 프로토콜
  • 컨트롤 프로토콜 : 데이터가 잘 전송되도록 세션을 제어하는 프로토콜

현대 프로토콜들은 대부분 컨트롤 프로토콜 기능과 데이터 프로토콜 기능을 하나의 프로토콜 해더나 별도의 메시지로 해결하지만 특별한 목적이 있거나 오래된 프로토콜은 두 개의 프로토콜이 분리된 경우가 있습니다.

대표적인 프로토콜이 FTP입니다.
FTP는 컨트롤 프로토콜과 데이터 프로토콜이 완전히 분리되어있고, 통신방법이 다른 두 가지 모드를 가지고 있습니다.

FTP의 기본적인 구동방식은 Active 모드입니다. Active 모드는 명령어를 전달하는 컨트롤 프로토콜과 데이터를 전달하는 데이터 프로토콜이 분리되어 있고 방향도 반대로 동작합니다. 일반적인 클라이언트-서버 동작방식과 달리 컨트롤 프로토콜은 클라이언트에서 서버로 통신을 시작하지만 데이터 프로토콜은 서버에서 클라이언트 쪽으로 데이터를 푸쉬합니다.

Active 모드를 사용할 경우 중간에 방화벽이나 세션 장비가 있으면 Active 모드의 동작 방식에 맞추어 방화벽의 반대 방향도 열어줘야 합니다. 특히 NAT 환경인 경우 FTP가 동작하는 프로토콜을 모두 이해할 수 있는 별도의 기능을 동작시켜야 합니다. 이러한 기능을 ALG라고 합니다.

Passive 모드는 Active 모드의 단점을 보완하기 위해 만들어졌습니다. Active 모드의 가장 큰 문제는 컨트롤 프로토콜과 데이터 프로토콜의 방향이 반대라는 것이었습니다. Passive 모드는 컨트롤, 데이터 프로토콜이 분리되어있는 것은 같지만 클라이언트에서 서버쪽으로 데이터를 요청해 다운 받도록 동작합니다.

Passive 모드에서 클라이언트 쪽에 방화벽이나 세션 장비가 있을 경우 특별한 작업없이 동작할 수 있는 장점이 있지만 서버 쪽에 방화벽이 있으면 데이터 다운로드를 위한 추가 포트를 열어줘야 합니다. FTP 서버에서 Passive 모드에서 사용하는 데이터포트의 범위를 선정할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2024년 2월 5일

잘 읽고 갑니다. 감사합니다

답글 달기