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

이리·2024년 12월 22일
0

세션 장비 → 세션을 이해하고 세션 테이블을 유지

성능 최적화와 보완을 위해 세션 테이블 정보를 이용해 패킷을 드롭하거나 포워드한다.

애플리케이션과 세션 장비 간 세션 정보를 동일하게 유지해주거나 애플리케이션을 제작할때 네트워크 중간에 있는 세션 장비를 고려해 여러가지 기능을 추가해주어야한다.

특히, 애플리케이션 세션 시간과 서비스 방향성을 고려하고 비대칭 경로를 피하는 것이 중요하다.

세션: 네트워크에서 클라이언트와 서버 간에 주고받는 데이터를 하나의 연결 상태로 묶어서 관리하는 단위
세션 장비: 네트워크 장비 중 하나로 데이터 패킷이 오갈 때 세션 정보를이해하고 관리해 주는 역할 → ‘세션 테이블’ 이라는 데이터를 저장
세션 테이블: 세션 장비는 서버와 사용자간의 정보를 기록하는 표를 유지한다 → 세션 테이블
세션 테이블을 보고 패킷을 어디로 보낼지 판단하거나 문제가 있으면 패킷을 막아버릴 수 있음

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

통신 시작 → 중간 세션 장비는 해당 세션 상태를 테이블에 기록 & 일정 시간 세션 테이블 유지

세션 테이블은 메모리에 저장되기 때문에 메모리의 효율적인 사용을 위해 일정 시간만 테이블에 유지

과도한 세션 생성으로 발생할 수 있는 문제를 해결하기위해 타임아웃값을 설정하기도 함

일부 app은 세션 장비를 길게 설정해 다음 통신이 시도될때까지 세션이 끊기지 않도록 타임 아웃값을 길게 설정하기도 한다. → 세션 장비의 타임아웃 값 < app 세션 타임아웃 이면 문제가 생긴다.

동작 순서

  1. 3방향 핸드셰이크를 통해 세션 설정
    1. 방화벽에서 세션 설정 확인하고 세션 테이블 기록
  2. 패킷이 들어오면 세션 테이블을 참조해 방화벽에서 패킷 통과
  3. 일정 시간 통신 X
  4. 세션 타임으로 세션 테이블 만료
  5. 세션 만료후 app 통신 시작
  6. 세션이 만료되어 방화벽에서 패킷 드롭

해결 방법 - 세션 장비 운영자 입장

  1. 세션 만료 시간 증가
    • 애플리케이션 세션 타임아웃에 맞게 세션 장비의 타임아웃 재설정 ( App 타임아웃 ≤ 세션 장비 타임아웃)
    • 대부분의 세션 장비는 포트번호나 IP 주소마다 별도의 세션 만료 시간을 설정할 수 있어 메모리 고갈 문제를 예방할 수 있다.
  2. 세션 시간을 둔 채로 중간 패킷을 수용할 수 있도록 방화벽 설정(세션 장비 중 방화벽에 해당)
    • 세션 테이블에 정보가 없는 ACK 패킷이 방화벽에 들어오면 드롭된다 → 세션 테이블에 없는 ACK 정보가 들어오더라도 세션을 새로 만들어 통과시키는 옵션 설정 ⇒ 보안에 취약
  3. 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
    • 세션 장비의 타임 아웃 시 종단 장비에 세션 정보 만료(RST) 통보
    • TCP RST 플래그를 1로 설정해 양 종단 장비에 전송 → 양 종단 장비는 비정상 적으로 세션이 만료된 것으로 판단해 세션을 삭제

해결 방법 - 개발자 입장

  1. 애플리케이션에 주기적인 패킷 발생 기능 추가
    • 일정 시간마다 양 단말 애플리케이션의 세션 상태 정보를 체크하는 더미 패킷을 보내는 기능 추가 → 주기적으로 패킷이 발생해 세션 유지 가능
    • 패킷을 주기적으로 보내주는 기능만 구현해도 방화벽 세션 만료로 인한 문제를 해결할 수 있음

비대칭 경로 문제

네트워크 안정성을 위해 이중화를 시행 → 패킷이 지나가는 경로가 2개라 인바운드 패킷과 아웃바운드 패킷의 경로가 같거나 다를 수 있음

  • 대칭 경로: 인바운드 패킷과 아웃 바운드 패킷이 같은 장비를 통과하는 것
  • 비대칭 경로: 인바운드 패킷과 아웃 바운드 패킷이 다른 장비를 통과하는 것

인바운드 패킷과 아웃 바운드 패킷 (헤더 정보로 판단)

  • 인바운드 패킷: 외부에서 내부로 들어오는 데이터
  • 아웃바운드 패킷: 내부에서 외부로 나가는 데이터

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

해결 방안 1. 세션 테이블 동기화 ⇒ 추천 X

패킷 경로를 변경하지 않고 동작가능 But, 세션을 동기화 하는 시간보다 패킷 응답이 빠르면 작동 X

응답 시간이 비교적 긴 인터넷 게이트웨이로 방화벽이 사용될 때 유용

해결방안2. 세션장비에서 다양한 방법으로 보정

인바운드 패킷이 들어오지 않았는데 아웃바운드 패킷이 장비로 들어온 경우 인바운드 패킷이 통과한 다른 세션 장비 쪽으로 패킷을 보내 경로를 보정 → 강제로 대칭 경로를 만들기

⇒ 방화벽 간 통신용 링크 필요 & MAC 주소를 변경하는 MAC 리라이팅 or 기존 패킷에 MAC 주소를 한번 더 인캡슐레이션하는 터널링 기법 필요


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

하나의 통신을 위해 하나의 세션을 사용하는게 보통

하나의 통신에 2개 이상의 세션을 사용할 경우 세션 장비도 이를 파악해야함 → 하나만 작동할 경우 단방향 통신만 가능하거나 통신이 불가능할 수 있음

프로토콜

  • 데이터 프로토콜: 데이터가 전송
  • 컨트롤 프로토콜: 데이터가 잘 전송되게 세션 제어

FTP의 경우 2개 이상의 프로토콜을 사용


FTP Active: 컨트롤 프로토콜과 데이터 프로토콜이 분리되어 있고 방향도 반대로 동작

단점: 컨트롤 프로토콜과 데이터 프로토콜 방향이 반대임

  • 컨트롤 프로토콜은 클라이언트에서 서버로 통신을 시작

  • 데이터 프로토콜은 서버에서 클라이언트 쪽으로 데이터 푸쉬

  • 동작 방식

    1. 클라이언트가 FTP 서버에 접속, 클라이언트는 1023번 이상의 TCP 포트를 사용, 서버는 TCP 21번 포트 사용
    2. 클라이언트가 A 포트를 이용해 서버에 데이터를 수신하겠다 알림
    3. 서버는 클라이언트에 A 포트를 사용해 송신하겠다 응답
    4. 서버에서 데이터를 보냄, 클라이언트에서 응답하고 데이터를 수신
  • 중간에 방화벽, 세션 장비가 있다면 방화벽의 반대 방향도 열어주어야함

  • NAT 환경의 경우, FTP가 동작하는 프로토콜을 이해하도록 별도 기능을 동작시켜야함 → ALG

    • Active 모드에서는 서버가 클라이언트로 직접 데이터 연결을 시도하기 때문에 클라이언트의 방화벽이 외부에서 들어오는 연결을 차단할 수 있다.
    • NAT의 경우 클라이언트의 공인 IP와 실제 내부 IP가 다르기때문에 서버가 올바른 클라이언트 주소로 데이터 연결을 설정하지 못할 가능성이 있다.

FTP Passive: Active 모드 단점 보완

⇒ 클라이언트에서 서버쪽으로 데이터를 요청해 다운받도록 동작

  • 동작방식
    1. 클라이언트가 서버에 접속, 클라이언트는 1023번 이상의 TCP 포트 사용, 서버는 TCP 21번 포트 사용
    2. 클라이언트가 Passive 모드를 사용하겠다 알림
    3. 서버는 클라이언트에 데이터 수신에 사용할 포트를 알림 → 서버에서 사용할 포트를 알려줌
    4. 클라이언트에서 서버에 데이터를 요청 → 사용 포트로 요청
    5. 데이터 전송
  • 클라이언트 쪽에 방화벽이나 세션장비가 있으면 특별 작업 없이 동작할수 있음
  • 서버쪽에 방화벽이 있으면 데이터 다운로드를 위한 추가 포트를 열어주어야함

0개의 댓글