본문 바로가기
CS/네트워크

[CS/네트워크] 6장 로드 밸런서/방화벽: 4계층 장비(세션 장비)

by ahj 2022. 4. 18.

보안용 방화벽, 프록시와 같은 장비들이 등장하면서 4계층 이상에서 동작하는 네트워크 장비가 많아지면서 네트워크 장비에 포함되었음.

4계층 특징인 포트 번호, 시퀀스 번호, ACK 번호에 대해 이해하는 장비. 기존 2, 3계층 장비에서 고려하지 않았던 통신의 방향성 이나 순서 같은 통신 전반에 대한 관리. 세션 테이블(Session Table)에 담아 관리. 이 정보를 기반으로 동작

4계층 장비의 특징, 종류, 구성시 유의점, ADC(4계층 이상 애플리케이션 프로토콜을 다루는 확장 장비)

6.1 4계층 장비의 특징

TCP와 같은 4계층 헤더 정보를 이해하고 기반으로 동작. 세션 테이블, 세션 정보가 가장 중요. ⇒ 로드 밸런서, 방화벽과 같은 장비를 ‘세션 장비’라고 부르기도 한다.

  • 세션 테이블세션 정보 저장, 확인 작업 전반에 대한 이해가 필요.
  • 라이프 타임 존재, 이 부분 고려 필요
  • 세션 장비의 기반.
  • Symmetric 경로 요구
  • Inbound, Outbound 경로가 일치해야 함
  • 정보 변경(로드밸런서의 경우)
  • IP 주소가 변경, L7 로드밸런서(ADC)는 앱 프로토콜 정보도 변경

세션 장비의 요소는 서비스에 영향을 미치므로 통신 중간 세션 기반 동작하는 방화벽, NAT, 로드 밸런서 등 ⇒ 네트워크 인프라 + 시스템 설계 + 앱 개발에도 고려 필요

6.2 로드 밸런서

서버or장비 부하 분산을 위해 사용하는 장비. 트래픽 분배 기능 덕분. 4계층 이상에서 동작. IP, 4계층 정보, 앱 정보를 확인, 수정 기능. 웹 서버 부하 분산에 가장 많이 사용.

부하 분산을 위해 작은 시스템 여러 대로 묶어 운영하더라도 사용자는 서버 배치와 상관없이 하나의 서비스로 보여야 한다. 로드 밸런서가 대표 IP를 서비스 IP로 갖고 시스템이 늘어나면 로드 밸런서가 각 시스템 실제 IP로 변경해 요청을 보냄. 웹, 앱 뿐아니라 FWLB(FireWall Load Balancing: 방화벽 로드 밸런싱), VPNLB(VPN Load Balancing: VPN 로드 밸런싱) 등 다양한 서비스에도 사용

동작 계층 따라 나뉨. 보통 4계층, 7계층

  • L4 로드 밸런싱
  • 일반적. TCP, UDP(특히 포트 넘버) 기반으로 로드 밸런싱 수행. 요즘은 L4, 7 다 지원, L4 만 제공하는 장비 찾기 힘듦.
  • L7 로드 밸런싱
  • HTTP, FTP, SMTP와 같은 앱 프로토콜 기반으로 로드 밸런싱 수행. HTTP 헤더 or URI 기반으로 프로토콜 이해 → 부하 분산. 일반적으로 ADC(Application Delivery Controller)라 부르고 프록시(Proxy) 역할 수행. 스퀴드(Squid)나 Nginx에서 수행하는 리버스 프록시(Reverse Proxy)와 유사

데이터 센터에서는 어떻게 설정했는가로 L4, L7 나뉘는 반면, 클라우드는 계층별로 구분, 전용으로 사용. AWS의 NLB(Network Load Balancer)는 L4, ALB(Application Load Balancer)는 L7 전용 컴포넌트


6.2.1 L4 스위치

4계층 동작, 로드 밸런서 기능 있는 스위치. 외형은 스위치처럼 여러개 포트를 갖고 있음. 부하 분산, 성능 최적화, 리다이렉션 기능 제공

가상 서버(Virtual Server), 가상 IP(Virtual IP), 리얼 서버(Real Server), 리얼 IP(Real IP)를 설정. 가상은 사용자가 바라보는 것. 리얼은 실제 값. L4 스위치가 가상 IP를 리얼 IP로 변경해주는 역할

사용자는 L4 스위치 가상 IP 서비스 요청, L4는 리얼IP로 다시 변경. 이 과정에서 부하 분산 방식 결정.

6.2.2 ADC(Application Delivery Controller)

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

플러그인 형태 보안 강화 기능 추가 제공 : WAF(Web Application Firewall) 기능, HTML, XML 검증, 변환 수행

6.2.3 L4 스위치 vs ADC

L4 스위치

4계층 동작, TCP,UDP 기반 부하 분산, TCP 계층 최적화, 보안 제공. TCP 레벨 간단한 DoS(Denial of Service) 공격 방어 or TCP 세션 재사용(서버 부하 ⬇️)

ADC

보다 다양한 기능. 부하가 많이 걸리는 작업을 별도로 수행. 이미지 or 정적 콘텐츠 캐싱(Caching) 기능. 웹 서버 콘텐츠 압축 기능이 있지만 ADC에서 역할 수행해 서버 부하 줄일 수 있음. 하드웨어 가속, 소프트웨어 최적화

최근 SSL 프로토콜 비중 ⬆️ → 웹 서버 SSL 암복호화 부하 ⬆️ 보안 강화를 위해 웹사이트 전체를 SSL로 처리하는 추세. 클라이언트 - ADC 구간 : SSL 처리, ADC - 웹 서버 구간 : HTTP. 이런 기능 시 여러 SSL 통신을 하나의 ADC 수용 위해 전용 SSL 가속 카드 내장.


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

교재 참고


6.3 방화벽

네트워크 중간에서 트래픽을 정책 조건에 맞춰 허용 or 차단하는 장비. 보안 제공 장비를 넒은 의미에서 모두 방화벽 일종으로 불러왔지만 일반적으로 3,4계층에서 동작, 세션 인지, 관리하는 SPI(Stateful Packet Inspection) 엔진 기반 동작 장비를 방화벽이라고 부름

NAT(Network Address Translation)과 유사하게 세션 정보를 장비 내부에 저장. 패킷이 외부로 나갈 때 세션 정보 저장, 패킷이 오갈 때 세션 정보 참조해 외부 시작인지 내부→외부 요청인지 가려냄

패킷 인과 관계 파악 ⇒ 정책 간단히 유지 가능.


상태 테이블? 세션 테이블?

스테이트풀(Stateful, 패킷 상태 정보 인지)로 동작하는 장비의 경우, 상태 테이블(State Table)이라고도 하고 상태에 대한 세션 값을 유지하므로 세션 테이블(Session Table)이라고도 부름


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

2,3계층 장비와 달리 세션을 이해, 세션 테이블 유지. 이를 이용해 패킷 변경, 앱 성능 최적화, 보안 강화 위해 패킷을 포워드(Forward)하거나 드롭(Drop)할 수 있다. 이를 위해 앱-장비간 세션 정보 동일 유지 or 앱 제작시 장비를 고려해 여러 기능 추가. 특히 세션 시간과 서비스 방향성 고려, 비대칭 경로 피하는 것이 매우 중요.

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

종단 장비 통신 시작 → 중간 세션 장비는 상태를 테이블 기록. 통신 없어도 정상종료 안되었으면 일정 시간 세션 테이블 유지. 하지만 메모리에 저장되므로 메모리 사용률을 적절 유지를 위해 일정시간만. 공격자 과도한 세션 발생에 방어해 타임아웃값을 더 줄이기도. 여러 이유로 세션 정보를 무제한 저장 X. 여러 앱 통신 관리 ⇒ 앱에 맞추어 적당한 세션 타임아웃값 유지.

타임 아웃값을 길게 설정하기도. 장비 세션 타임아웃 값이 앱 세션 타임아웃보다 짧으면 통신에 문제 발생. 세션 장비 테이블에 세션이 없는 상황에서 SYN이 아닌 ACK가 들어오면 비정상으로 판단해 차단. 정책에 걸린다.

동작 순서

  1. 3방향 핸드셰이크 → 세션 정상 설정
    1. 방화벽에서 세션 설정 확인, 세션 테이블 기록
  2. 외부도, 내부도 세션 테이블 참조 방화벽에서 패킷 통과
  3. 일정 시간 통신 없음
  4. 세션 타임 테이블 만료
  5. 만료 후 통신
  6. 세션 만료로 방화벽에서 패킷 드롭

이하 이 문제 해결을 위한 해결 설정

6.4.1.1 세션 장비 운영자 입장

  1. 세션 만료 시간 증가
  2. 장비 운영자가 앱에 맞게 만료 시간 증가 시키는 경우.
  3. 세션 시간을 둔 채로 중간 패킷을 수용할 수 있도록 방화벽 설정(세션 장비 중 방화벽에 해당)
  4. 방화벽 옵션 조정으로 정보가 없는 ACK와도 통과. 하지만 보안에 취약
  5. 세션 장비에서 세션 타임아웃 시 양 만달에 세션 종료 통보과정
    1. 세션 설정
    2. 일정시간 통신 없음
    3. 세션 테이블 세션 만료
    4. 방화벽에서 양 종단 장비에 RST 패킷 전송
      1. A, B 통신일 경우
      2. A에는 출발지 B, 도착지 A
      3. B에는 출발지 A, 도착지 B
    5. RST 받은 양 종단 장비는 해당 프로세스 종료
  6. 시간 만료시 세션 정보 삭제하는 것이 아니라 양 종단 장비에 RST 통보. 양 종단에서 세션 끊음

6.4.1.2 개발자 입장

  1. 애플리케이션에서 주기적인 패킷 발생 기능 추가
  2. 세션 상태 정보 체크하는 더미 패킷(Dummy Packet) 보내는 기능 추가. 유지 가능. 최근 대부분 플랫폼 사용. 가장 바람직한 방법.

6.4.2 비대칭 경로 문제

안정성 위해 회선과 장비를 이중화한다. 패킷이 지나는 경로가 2개 이상이므로 Inbound 패킷과 Outbound 패킷 경로가 같거나 다를 수 있다. 인바운드 아웃바운드가 같은 장비 통과시 대칭 경로(Symmetric Path), 다른 장비 통과시 비대칭 경로(Asymmetric Path) 대칭 경로가 아니면 정상 서비스가 아니다.

2, 3계층 장비는 세션 고려 필요 없어 대부분 효율에만 초점을 밪춰 비대칭 경로 발생하는 디자인 하는 경우가 많다. 비대칭 발생시 처리할 수 있지만 노력이 필요하고 세션 장비 선능이 저하, 보안 약화 될 수 있다.

처리하는 방법

  1. 세션 테이블 동기화패킷 응답이 세션 동기화보다 빠르면 동작하지 않는 단점이 있음. 응답시간이 비교적 긴 인터넷 게이트웨이로 방화벽이 사용될 때나 유용
  2. 동기화시 두 장비가 하나의 장비처럼 동작
  3. 세션 장비에서 다양한 방법으로 보정강제로 방화벽간 통신용 링크가 필요하고 MAC 리라이팅(Rewriting)이나 기존 패킷에 MAC 주소를 한 번 더 인캡슐 하는 터널링(Tunnuling) 기법으로 경로를 보정.
  4. 인바운드 들어오지 않은 세션 장비에 아웃바운드가 들어올 경우 인바운드가 들어온 장비에서 패킷을 보내 경로를 보정

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

하나의 세션만 사용이 대부분, 특별 목적으로 2개 이상 만드는 경우 서로 다른 두 세션이 하나의 통신을 위해 쓰인다는 것을 중간 세션 장비도 알아야 하고 더 주의해야 한다.(한쪽만 끊기거나 테이블에서 삭제시 단방향만 or 못할 수도)

데이터 프로토콜, 컨트롤 프로토콜로 구분. 현대 프로토콜은 대부분 하나의 프로토콜에서 헤더나 별도 메시지로 해결. 특수 목적 or 오래된 프로토콜은 분리된 경우가 있다. 대표적으로 FTP(File Transfer Protocol) FTP는 컨트롤, 데이터가 완전히 분리. 통신 방법이 다른 두가지 모드

FTP

기본 구동 방식은 Active 모드. 컨트롤(명령어 전달), 데이터(데이터 전달) 프로토콜이 분리, 방향도 반대로 동작. 일반적과 달리 컨트롤은 클라이언트에서 통신 시작, 데이터는 서버에서 시작

  1. 클라이언트 FTP 서버 접속. 1023 이상 TCP 포트 사용, 서버는 TCP 21 tkdyd
  2. 클라이언트 ex.1025포트 사용해 수신하겠다 알림
  3. 서버는 1025포트로 송신하겠다 알림
  4. 서버에서 데이터 보냄, 클라이언트에서 응답, 데이터 수신

Active 모드시 중간 방화벽, 세션 장비가 있으면 동작 방식에 맞춰 방화벽의 반대방향도 열어줘야 한다. 특히 NAT 환경에서 FTP 프로토콜을 모두 이해할 수 있는 별도 기능, ALG(Application Layer Gateway)가 동작해야 함.

Passive 모드는 컨트롤, 데이터가 반대 방향인 Active 모드 단점을 보완. Passive 모드에서는 분리 O but 클라이언트에서 서버로 데이터를 요청해 다운 받도록 동작

  1. 클라이언트 서버 접속. 1023 이상 TCP 포트 사용. 서버는 TCP 21번 사용(Active와 동일)
  2. 클라이언트 Passive 쓰겠다 알림
  3. 서버는 클라이언트에게 데이터 수신에 사용할 포트 알림
  4. 클라이언트 서버에 데이터 요청. 알려준 포트에 요청
  5. 데이터 전송

Passive에서 클라이언트 쪽에 방화벽 or 세션 장비가 있을 경우 특별 작업 없이 동작할 수 있다는 장점 but 서버에 있으면 데이터 다운을 위한 추가 포트를 열어줘야 함. FTP 서버에서 데이터 포트 범위를 설정할 수 있다.

댓글