로드 밸런서/방화벽: 4계층 장비(세션 장비)
by Frinee이 글은 고재성, 이상훈 저 - "IT 엔지니어를 위한 네트워크 입문"를 공부하고 정리하여 작성하였습니다.
0. 4계층 장비의 등장
- 기존 네트워크 장비는 2계층이나 3계층에서 동작하는 장비를 지칭
- IP 부족으로 NAT 기술이 등장하고 보안용 방화벽, 프록시와 같은 장비들이 등장하여 4계층에서도 네트워크 장비가 많아짐
- 4계층 장비는 통신의 방향성이나 순서와 같은 통신 전반의 관리가 필요
1. 4계층 장비의 특징
- TCP와 같은 4계층 헤더에 있는 정보를 이해하고 동작함
- 4계층 이상의 장비는 세션 테이블과 세션 정보를 이해하는 것이 중요
- 세션 테이블
- 세션 정보를 저장, 확인하는 작업 전반에 대한 이해 필요
- 세션 정보는 세션 테이블에 남아있는 라이프타임이 존재
- Symmetric(대칭) 경로 요구
- Inbound와 Outbound 경로가 일치해야 함
- 정보 변경(로드 밸런서)
- 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. 시스템 확장 방법: 스케일 업과 스케일 아웃
- 시스템 확장 방법
- 스케일 업
- 기존 시스템에 CPU, 메모리, 디스크와 같은 내부 컴포넌트 용량을 키우거나 더 큰 용량의 시스템을 구매해 서비스를 옮기는 방법
- 스케일 업은 확장을 미리 고려해 시스템을 구축하면 초기 비용이 커지는 문제가 있음
- 반대로 서비스에 맞춰서 시스템을 구매하면 확장이 필요할 때 새롭게 시스템을 구매하면서 낭비되는 문제가 있음
- 그리고 필요한 용량을 늘리면 비용이 기하급수적으로 증가하는 문제가 있음
- ex) 2GB CPU: 5만원, 4GB CPU: 20만원(!)
- 스케일 아웃
- 같은 용량의 시스템을 여러 대 배치하는 방식, 되도록 스케일 아웃 방식을 사용함
- 대신에 새로 시스템을 설계하거나 분산을 위한 프로세스를 운영하고 부하를 분산하는 별도의 외부 시스템이 필요
- 스케일 업
- 시스템 축소 방법
- 스케일 다운: 기존의 시스템보다 작은 용량의 시스템으로 서비스를 옮기는 방법
- 스케일 인: 여러 개의 서비스를 합쳐 하나의 시스템으로 운영하는 방법
3. 방화벽
- 네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 정책 조건에 맞춰 관리하는 장비
- 일반적으로 네트워크 3,4계층에서 동작하고 세션 인지, 관리하는 SPI 엔진을 기반으로 동작하는 장비를 일컬음
- 방화벽은 NAT(Network Address Translation) 동작 방식과 유사하게 세션 정보를 장비 내부에 저장
- 패킷이 외부로 나갈 때 세션 정보를 저장
- 패킷이 들어오거나 나갈 때 저장했던 세션 정보를 먼저 참조
- 패킷이 외부에서 시작되었는지, 내부 사용자가 외부로 요청한 응답인지 가려냄
- 세션 테이블을 이용해 패킷의 인과 관계를 파악할 수 있어 정책을 간단히 유지할 수 있음
- 인터넷 방화벽의 경우 기본정책은 외부로 나가는 모든 패킷을 허용하고 내부로 들어오는 모든 패킷을 차단함
4. 4계층 장비를 통과할 때의 유의점(세션 관리)
- 세션 장비는 세션을 이해하고 세션 테이블을 유지함
- 세션 테이블 정보를 이용해 패킷을 변경하거나 애플리케이션 성능을 최적화
- 보안을 강화하기 위해 패킷을 포워드(forward)하거나 드롭(drop)할 수 있음
- 해당 기능을 사용하기 위해선 애플리케이션 - 세션 장비 간 세션 정보를 동기화하거나 추가 기능이 필요함.
- 애플리케이션의 세션 기간과 서비스 방향성을 고려하고 비대칭 경로를 피해야 함
4.1. 세션 테이블 유지, 세션 정보 동기화
- 종단 장비에서 통신을 시작하면 중간에 있는 세션 장비가 세션 상태를 기록
- 종단 장비 간 통신이 정상적으로 종료되지 않았다면 일정 시간 동안 세션 테이블 유지
- 메모리 사용률을 유지하고 악의적인 공격에 대비하기 위해서 타임아웃값을 줄이기도 함.
- 세션 테이블에 세션이 없는 상황에서 애플리케이션이 통신을 시도하려 하면
→ 비정상 통신으로 판단해 패킷을 차단해버리기 때문에 세션 타임아웃값을 잘 조절해야 함
- 동작 순서 (문제 상황)
- 3방향 핸드셰이크를 통해 정상적으로 세션 설정
- (2), (3) 세션 테이블을 참조해 방화벽에서 패킷 통과
- 일정 시간 동안 통신 없음
- (4) 세션 타임으로 세션 테이블 만료
- 세션 만료 후 애플리케이션 통신 시작
- (5) 세션이 만료되어 방화벽에서 패킷 드롭
- 이런 문제를 해결하기 위한 세션 장비와 애플리케이션에서 각각 적용할 수 있는 설정이 존재
4.1.1. 세션 장비 운영자 입장
- 세션 만료 시간 증가
- 이 경우, 애플리케이션의 세션 유지 시간 < 방화벽 세션 유지 시간
- 대부분의 세션 장비는 포트 번호나 IP 주소마다 별도의 세션 만료 시간을 정할 수 있음
- 세션 시간은 유지, 중간 패킷을 수용할 수 있도록 방화벽 설정
- 방화벽 옵션을 조정해 세션 테이블에 정보가 없는 ACK 패킷이 와도 세션을 새로 만들어 통과시키는 옵션을 사용
- 전체적인 보안에 좋지 않기 때문에 비추
- 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
- 양 종단 장비의 세션 정보 ≠ 세션 장비의 세션 정보일 때 발생하는 문제를 해결하기 위한 기능
- 세션 타임 아웃 시 세션 정보를 삭제하지 않고 세션 정보 만료를 통보
- TCP의 RST 플래그를 1로 세팅해 양 종단 장비에 전송
- 양 종단 장비에서 세션이 비정상 종료 된걸 판단하고 해당 세션을 끊음
- 동작 과정
- 세션 설정
- 일정 시간동안 통신 없음
- (1) 세션 타임아웃값이 넘어 세션 만료
- (2) 방화벽에서 양 종단 장비에 RST 패킷 전송
- A 장비에는 출발지 B, 도착지 A인 RST 패킷 전송
- B 장비에는 출발지 A, 도착지 B인 RST 패킷 전송
- (3) RST 패킷을 받은 양 종단 장비는 해당 프로세스 종료
4.1.2. 개발자 입장
- 애플리케이션에서 주기적인 패킷 발생 기능 추가
- 애플리케이션에서 패킷을 주기적으로 발생시키면 세션을 계속 유지할 수 있음
- 애플리케이션은 이를 위해 세션 상태 정보를 체크하는 더미 패킷(Dummy Packet)을 보냄
4.2. 비대칭 경로 문제
- 네트워크의 안정성을 높이기 위해 네트워크 회선과 장비를 이중화함.
- 이 때 패킷을 지나가는 경로가 2개 이상이므로 인바운드 패킷과 아웃바운드 패킷의 경로가 같을 수 있음
- 이 때 통과하는 장비가 인바운드 패킷 = 아웃바운드 패킷인 경우 대칭 경로, 아닌 경우 비대칭 경로이다.
- 세션 장비는 세션 테이블을 만들어 관리해야 하므로 패킷이 들어오고 나갈 때 동일한 장비를 통과해야 함
- 비대칭 경로를 방화벽에서 처리하는 방법
- 세션 테이블 동기화
- 두 개의 경로 상의 두 장비가 하나의 장비처럼 동작하게 함
- 패킷의 경로를 변경하지 않고 동작한다는 장점이 있음
- 세션 동기화 시간 > 패킷 응답인 경우 정상 동작하지 않을 수 있음
- 이 기능은 응답시간이 비교적 긴 인터넷 게이트웨이 방화벽에 사용
- 세션 장비에서 다양한 방법으로 보정
- 아웃바운드 패킷만 들어온 경우, 인바운드 패킷이 통과한 다른 세션 장비 쪽으로 패킷을 보내 경로를 보정
- 강제로 대칭 경로를 만들기 때문에 비대칭 경로로 인한 문제를 해결
- 강제로 다른 방화벽으로 패킷을 보내기 위해 방화벽 간 통신용 링크가 필요
- MAC 주소를 변경하는 MAC 리라이팅(Rewriting)이나 기존 패킷에 MAC 주소를 한 번 더인캡슐레이션하는 터널링(Tunneling) 기법으로 경로를 보정
- 세션 테이블 동기화
4.3. 하나의 통신에서 두 개 이상의 세션이 사용될 때의 고려사항
- 특별한 목적으로 2개 이상의 세션을 만드는 경우가 있음
- 세션 장비도 세션 2개가 하나의 통신을 사용한다는 것을 알게 해야 함
- 프로토콜은 데이터 프로토콜과 컨트롤 프로토콜로 나뉨
- 데이터 프로토콜: 데이터를 실어나름
- 컨트롤 프로토콜: 데이터가 잘 전송되도록 세션 제어
- 현대에는 하나의 프로토콜에서 헤더나 메시지로만 구분해서 해결하지만 일부는 두 개의 프로토콜을 분리해서 사용하기도 함 ex) FTP
4.3.1. FTP의 구동 방식
- 기본적인 구동 방식은 Active 모드이고 컨트롤 프로토콜과 데이터 프로토콜이 반대 방향으로 동작
- Active 모드
- 컨트롤 프로토콜: 명령어 전달, 클라이언트 → 서버로 통신 시작
- 데이터 프로토콜: 데이터 전달 , 서버 → 클라이언트로 데이터 푸시
- 클라이언트가 FTP 서버에 접속, 클라이언트는 1023번 이상의 TCP 포트를 사용, 서버는 21번 포트 사용
- ① 클라이언트가 서버에 데이터를 1025번 포트를 사용해 수신하겠다고 알림
- ②서버는 클라이언트에게 1025번 포트를 사용해 송신하겠다고 응답
- ③서버에서 데이터를 보냄, 클라이언트에서 응답하고 데이터 수신
- 중간에 방화벽이나 세션 장비가 있으면 동작 방식에 맞춰 방화벽의 반대 방향도 열어야 함
- NAT 환경인 경우, FTP가 동작하는 프로토콜을 모두 이해할 수 있는 별도의 기능을 동작시키는 ALG(Application Layer Gateway)를 실행함
- ALG가 동작하면 반대 방향으로 시작하는 데이터 세션을 인지해 방화벽과 NAT 모두 동작시킴
- Passive 모드
- Active 모드를 보완한 모드
- 컨트롤 프로토콜, 데이터 프로토콜 모두 클라이언트 → 서버로 데이터를 요청해 동작
- 클라이언트가 서버에 접속. 클라언트는 1023번 이상의 TCP 포트를 사용, 서버는 TCP 21번 포트를 사용
- ① 클라이언트가 Passive 모드를 사용하겠다고 알림
- ② 서버는 클라이언트에 데이터 수신에 사용할 포트를 알림. 2024번 포트를 사용해 수신하겠다고 응답
- ③ 클라이언트에서 서버에 데이터를 요청. ② 과정에서 서버에서 알려준 2024번 포트에 요청.
- 데이터 전송
- 클라이언트 쪽에 방화벽이나 세션 장비가 있을 경우, 특별한 작업 없이 동작한다는 장점
- 서버 쪽에 방화벽이 있는 경우, 데이터 다운로드를 위한 추가 포트를 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