IP가 부족해지면서 NAT기술이 등장하고 보안용 방화벽, 프록시와 같은 장비들이 등장하며
4계층 이상에서 동작하는 장비가 많아지면서 4계층에서 동작하는 장비도 네트워크 장비에 포함되었다.
- 4계층에서 이해해야 하는 키워드
- 포트 번호
- 시퀀스 번호
- ACK 번호
- 통신의 방향성, 순서
- 세션 테이블
4 계층 장비?
- 4계층 전송 계층
- 4계층 이상 장비는 2,3계층 장비와는 다르게 세션 테이블과 그 안에서 관리하는 세션 정보가 가장 중요하다. 따라서 이들을 세션 장비라고 부르기도 함
- 세션 장비가 고려해야 할 것
- 세션 테이블
- 세션 장비는 세션 테이블 기반으로 운영
- 세션 정보를 저장, 확인하는 작업 전반에 대한 이해 필요
- 세션 테이블에 남은 라이프타임 존재
- Symmetric(대칭) 경로 요구
- Inbound와 Outbound 경로가 일치해야 함
- 정보 변경(로드 밸런서)
- L7에서 동작하는 로드밸런서(ADC)가 관리하는 프로토콜의 정보가 변경됨
- 세션 테이블
이밖에도 세션 장비의 여러 요소가 서비스에 영향을 미치기 때문에 네트워크 중간 위치에 세션을 기반으로 동작하는 방화벽, NAT, 로드밸런서와 같은 장비가 있다면 네트워크 인프라 뿐 아니라 시스템 설계와 애플리케이션 개발에도 세션 장비 고려가 필요하다.
로드 밸런서
- 부하 분산 : 흔히 서버나 장비의 부하를 분산하기 위해 사용하는 장비를 지칭함 → 트래픽 분배
- IP 주소나 4계층 정보, 애플리케이션 정보를 확인, 수정
사용자 천 명의 요청을 받는 서버와 사용자 5천명의 요청을 받는 서버가 있을 때,
서버의 가격은 5배가 아니라 그보다 훨씬 비싸다.
이처럼 하나의 장비 내부 부품을 이중화하거나, 용량을 큰 부품을 사용하는 것은 비용이 기하급수적으로 높아지기때문에 작은 장비를 여러대를 묶어 사용하는 방법을 선호하는데 이를 스케일아웃(Scale-Out)이라 한다.
하지만, 작은 시스템 여러 대를 운영하더라도 사용자에게는 하나의 서비스로 보여야 한다.
로드 밸런서는 서비스에 사용될 대표 IP주소를 서비스 IP로 갖고
그 밑에 시스템이 늘어나면 로드밸런서가 각 시스템의 실제 IP로 변경해 요청을 보낸다.
이러한 로드밸런서는 웹이나 애플리케이션 뿐아니라 FWLB(FireWall Load Bancing: 방화벽 로드 밸런싱), VPNLB(VPN Load Balancing: VPN 로드 밸런싱)와 같이 다양한 서비스를 위해 사용될 수 있다.
이런 로드밸런서는 동작하는 계층에 따라 다음과 같이 4계층과 7계층으로 나뉜다.
L4 로드 밸런싱
- 일반적인 로드밸런서가 동작하는 방식
- TCP, UDP 정보(특히 포트 정보)를 기반으로 로드 밸런싱을 수행
최근 로드 밸런서는 L4, L7의 기능을 모두 지원하기에 L4 로드 밸런싱만 제공하는 전용장비는 찾기 힘들지만,
장비에서 L7 지원 여부와 상관없이 4계층에 대한 정보로만 분산 처리하는 경우를 L4로드 밸런싱이라 한다.
👉🏻 즉, L4만 지원하던 L4, L7를 모두 지원하는 로드밸런서든 4계층에 대한 정보로 분산처리가 가능하면 L4 로드 밸런싱이라 할 수 있다.
L7 로드 밸런싱
- HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행
- HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 뒤에 부하를 분산
- 일반적으로 이런 장비를 ADC(Application Delivery Controller)라고 함. → 프록시(Proxy)역할 수행
- 스퀴드(Squid)나 Nginx에서 수행하는 리버스 프록시(Reverse Proxy)와 유사한 기능
L4 스위치
- 용어 그대로 4계층에서 동작하면서 로드 밸런서 기능이 있는 스위치.
- 내부 동작 방식은 4계층 로드밸런서지만 외형은 스위치처럼 여러 포트를 가지고 있다.
- 다양한 네트워크 구성이 가능한 스위치형 로드 밸런서가 가장 대중화
- 부하 분산, 성능 최적화, 리다이렉션 기능
L4 스위치 동작을 위해 설정해야 하는 것
- 가상 서버(Virtual Server) : 사용자가 바라보는 실제 서비스
- 가상 IP(Virtual IP) : 사용자가 접근해야 하는 서비스 IP 주소
- 리얼 서버(Real Server) : 실제 서비스를 수행하는 서버
- 리얼 IP(Real IP) : 실제 서버 IP
👉🏻 사용자가 L4스위치의 가상 IP를 목적지로 서비스를 요청
👉🏻 L4스위치가 목적지로 설정된 가상 IP를 리얼 IP로 다시 변경해 보내준다.
👉🏻 이 과정에서 부하를 어떤 방식으로 분산할지 결정할 수 있다.
ADC
- Application Delivery Controller
- 애플리케이션 계층에서 동작하는 로드 밸런서
- L4 스위치와 달리 애플리케이션 프로토콜의 헤더와 내용을 이해하고 동작
- 다양한 부하 분산, 정보 수정, 정보 필터링 가능
- 이런 상세한 동작을 위해 프록시(Proxy)로 동작
- 대부분의 ADC는 L4스위치의 기능을 포함 (일부 소프트웨어 ADC 제외)
- 대부분의 ADC는 4계층에서 애플리케이션 계층까지 다음과 같은 기능을 제공 및 수행한다.
- 로드 밸런싱 기능 제공
- 페일 오버(Failover, 장애극복 기능) 수행
- 리다이렉션(Redirection) 수행
- 애플리케이션 프로토콜을 이해하고 최적화하는 기능 제공
- 캐싱(Caching), 압축(Compression), 콘텐츠 변환 및 재작성, 인코딩 변환
- 플러그인 형태로 보안 강화기능을 추가로 제공
- WAF(Web Application Firewall, 웹 애플리케이션 방화벽) 기능
- HTML, XML 검증및 변환 수행
L4 스위치 vs ADC
L4 스위치
- 4계층에서 동작하며 TCP, UDP 정보를 기반으로 부하 분산
- TCP 계층에서의 최적화, 보안기능도 함께 제공
- 보안과 성능을 높여주는 기능 제공
- TCP레벨의 간단한 DoS(Denial of Service)공격 방어
- 서버 부하를 줄이기 위해 TCP 세션 재사용
ADC
- 애플리케이션 내용에 대한 분산, 리다이렉션, 최적화 제공 → L4 스위치보다 더 다양한 기능 사용 가능
- 성능 최적화
- 하드웨어 가속이나 소프트웨어 최적화
- 서버에서 수행하는 작업 중 부하가 높은 작업을 별도로 수행
- 이미지나 정적 콘텐츠 캐싱(Cashing)
- 콘텐츠 압축
- SSL 오프로딩
ADC의 SSL 오프로딩?
- 최근 SSL 프로토콜 사용 비중이 늘어남에 따라 웹 서버에 SSL 암복호화 부하가 증가*
- SSL의 엔드 포인트로 동작
- 클라이언트에서 ADC까지의 구간을 SSL로 처리
- ADC와 웹 서버 사이를 일반 HTTP를 이용해 통신
- 웹 서버 여러 대의 SSL 통신을 하나의 ADC에서 수용 → ADC에 전송 SSL 가속 카드 내장
*
개인정보 보호를 위해 개인정보가 전달되는 일부 페이지에서만 SSL을 사용해왔지만,
보안 강화를 위해 웹사이트 전체를 SSL로 처리하는 추세
시스템 확장 : 스케일 업 & 스케일 아웃
시스템이 성장하다보면 데이터 양이 늘거나 CPU 메모리 사용량이 느는 등, 시스템 하나로 모든 서비스를 감당할 수 없는 경우가 생긴다.
이런 경우 시스템을 확장해야 하는데, 이 방법엔 스케일 업과 스케일 아웃이 있다.
스케일 업
- 서비스를 확장해 용량을 키우는 가장 쉬운 방법
- 하드웨어 성능 자체를 업그레이드하거나 더 높은 성능의 시스템으로 마이그레이션
- 기존 시스템에 CPU, 메모리, 디스크와 같은 내부 컴포넌트 용량을 키운다.
- 위 방법이 불가능할 경우 더 큰 용량의 시스템을 새로 구매해 서비스를 옮긴다.
장점
- 부품 추가가 쉬운 경우 시스템 설계 변경 필요 X
- 주로 기존 대형 유닉스 시스템에서 사용
단점
- 부품 추가가 어려운 경우가 있다.(최근 x86) -1
- 시스템이 커질 수록 비용이 기하급수적으로 증가 - 2
1.
디스크와 달리 CPU나 메모리는 확장하기가 쉽지 않은데, 이런 경우는 처음부터 스케일 업을 고려해야 한다. 그러나 CPU 여러개를 꽂을 수 있고 메모리 뱅크가 많은 보드를 구매하게 되면 초기 투자 비용이 커진다.
이처럼 확장을 미리 고려해 시스템을 구축하면 초기 비용이 커지고,
서비스에 적합한 시스템을 구매하면 새로 구매해야 하므로 기존 시스템 비용이 낭비된다.
2.
저가형 CPU보다 성능이 2배 뛰어난 CPU 는 가격이 (2배가 아닌)4배 또는 많으면 10배 이상의 비용이 필요하다
👉🏻 이런 문제 때문에 가능하면 스케일 아웃을 사용한다.
스케일 아웃
- 스케일 업과 달리 같은 용량의 시스템을 여러 대 배치한다.(병렬)
- 여러 대의 서버로 로드를 분산
- 서비스 자체를 구분해 나누는 방법
- 같은 서비스를 분산해 처리하는 방법
장점
- 스케일 업에 비해 적은 비용으로 확장 가능
- 여러 대로 분산하므로 하나의 시스템에 장애가 발생하더라도 서비스에 미치는 영향이 없도록 구현 가능
→ 결함허용(Fault Tolerance)
단점
- 별도의 복잡한 아키텍처를 이해하고 운영해야 한다.
- 스케일 아웃을 위해 새로 시스템 설계를 하거나
- 분산을 위한 별도의 프로세스를 운영해야 한다.
- 프로세스나 네트워크 장비가 추가로 필요할 수 있다.
- 로드 밸런서와 같이 부하를 분산해주는 별도의 외부 시스템이 필요하다.
방화벽
- 네트워크 중간에 위치
- 해당 장비를 통과하는 트래픽을 허용(Permit)하거나 차단(Deny)하는 장비
- 사전에 주어진 정책 조건에 따라 작동
네트워크에서 보안을 제공하는 장비를 넓은 의미에서 모두 방화벽의 일종으로 불러왔다.
하지만 일반적으로 네트워크 3,4계층에서 동작하고 세션을 인지, 관리하는 SPI(Stateful Packet Inspection) 엔진을 기반으로 동작하는 장비를 방화벽이라고 부른다.
- 세션 정보를 장비 내부에 저장(NAT(Network Address Translation) 동작 방식과 유사)
- 세션 테이블을 이용해 패킷의 인과 관계 파악
- 패킷이 외부로 나갈 때 세션 정보 저장
- 패킷이 들어오거나 나갈 때 저장했던 세션 정보 참조
- 들어오는 패킷이 외부에서 처음 시작된 것인지, 내부 사용자가 외부로 요청한 응답인지 판단
만약 세션 테이블과 같이 상태 정보를 저장하는 공간이 없다면 세션의 방향성을 파악할 수 없다. 그렇게 되면 많은 정책을 복잡하게 관리해야 하는데, 방화벽에서는 하나의 정책을 설정하기 위해 최소한 두 개의 양방향 정책이 함께 설정되어야 한다.
불특정 다수와 통신(ex 인터넷)할 때는 정책의 복잡도가 더 증가하게 된다. 인터넷 방화벽*에서의 기본 정책은 나가는 모든 패킷 허용, 들어오는 모든 패킷 차단이다. 상태와 세션 정보가 없으면 패킷의 시작이 내부인지, 외부인지 파악할 수 없어 복잡한 정책관리가 필요하다.
* 인터넷에 연결되는 정책을 관리하는 방화벽
방화벽은 메모리에 남는 상태와 세션 정보를 이용해 패킷을 상세히 로깅하고 관찰할 수 있다.
참고
⌜IT 엔지니어를 위한 네트워크 입문⌟ 길벗, 2023
[6장] 로드 밸런서/방화벽: 4계층 장비(세션 장비) | 6.1 4계층 장비의 특징, 6.2 로드 밸런서, 6.3 방화벽 (p.192~201)
* 책을 참고해 필요한 내용을 정리한 것이므로, 책의 내용과 다를 수 있습니다.
GitHub 댓글