[네트워크] 6. 로드밸런서/방화벽: 4계층 장비
by 콰이엇고재성, 이상훈 저자님의 “IT 엔지니어를 위한 네트워크 입문” 책을 학습하고 정리한 글입니다.
1. 4계층 장비의 특징
4계층 장비는 TCP와 같은 4계층 헤더 정보인 포트 번호, 시퀀스 번호, ACK 번호에 대해 이해해야 한다. 이를 위해 세션 테이블을 통해 통신의 방향성이나 순서와 같은 통신 전반에 대한 이해가 필요하다. 이 장비는 세션 테이블과 내부 정보인 세션 정보가 가장 중요하여 '세션 장비'라고도 부른다.
✍🏻 세션 장비의 최우선 고려 요소
- 세션 테이블 : 세션 정보를 저장, 확인하는 작업과 라이프타임을 고려해야 한다.
- Symmetric(대칭) 경로 요구 : Inbound / Outbound 경로가 일치해야 한다.
- 정보 변경(로드 밸런서의 경우) : IP 주소가 변경되며 확장된 L7 로드 밸런서(ADC)는 애플리케이션 프로토콜 정보도 변경된다.
2. 로드 밸런서
서버나 장비의 부하를 분산하기 위해 사용하는 장비
- 트래픽을 분해하는 기능
- IP 주소나 4계층 정보, 애플리케이션 정보를 확인, 수정하는 기능
- 웹 서버의 부하 분산 기능 (4. 시스템 확장 방법: 스케일 업과 스케일 아웃 참고)
로드 밸런서가 서비스에 사용하는 대표 IP 주소를 서비스 IP로 갖고, 그 밑에 시스템이 늘어나면 로드 밸런서가 각 시스템의 실제 IP로 변경해 요청을 보낸다. 로드 밸런서는 웹 애플리케이션뿐만 아니라 FWLB(방화벽 로드 밸런싱, Firewall Load Balancing), VPNLB(VPN Load Balancing)와 같이 다양한 서비스를 위해 사용할 수 있다.
✍🏻 동작 계층에 따른 분류
📌 L4 로드 밸런싱
- 일반적인 로드 밸런서가 동작하는 방식으로, TCP/UDP 정보를 기반으로 로드 밸런싱을 수행 (특히 포트 번호)
- 최근에는 L4, L7 기능을 모두 지원하지만 L7 지원 여부와 관계없이 4계층에 대한 정보로만 분산 처리하는 경우 표현
📌 L7 로드 밸런싱
- HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱 수행
- HTTP 헤더 정보나 URI 정보를 기반으로 포로토콜을 이해한 후 부하를 분산
- 일반적으로 이런 장비를 ADC(Application Delivery Controller)라고 부르며 프록시(Proxy) 역할을 수행
- 스퀴드(squid)나 Nginx에서 수행하는 리버스 프록시(Reverse proxy)와 유사한 기능
🧐 클라우드에서의 구분
L4 로드 밸런싱과 L7 밸런싱을 지원하는 컴포넌트를 계층별로 구분하여 전용으로 사용한다.
그 예로 AWS의 NLB(Network Load Balancer)가 L4, ALB(Application Load Balancer)가 L7 로드 밸런싱용 전용 컴포넌트이다.
2-1. L4 스위치
4계층에서 동작하면서 로드 밸런싱 기능이 있는 스위치
- 내부 동작은 4계층 로드 밸런서지만 외형은 스위치처럼 여러 개의 포트를 가지고 있다.
- 부하 분산, 성능 최적화, 리다이렉션 기능을 제공한다.
- 서버 성능 최적화(TCP Reuse, Connection Pooling)
- TCP 레벨의 간단한 DoS(Denial of Service) 공격을 방어하여 보안 기능 제공
L4 스위치가 동작하려면 가상 서버(Virtual Server), 가상 IP(Virtual IP), 리얼 서버(Real Server), 리얼 IP(Real IP)를 설정해야 한다. 여기서 L4 스위치는 가상 IP를 리얼 IP로 변경해주는 역할을 한다. 사용자는 L4 스위치의 가상 IP를 목적지로 서비스를 요청하고, L4 스위치가 목적지로 설정된 가상 IP를 리얼 IP로 다시 변경해 보내준다. 이 과정에서 부하를 어떤 방식으로 분산할지 결정할 수 있다. (12장 로드밸런서 참고)
2-2. ADC (Application Delivery Controller)
애플리케이션 계층에서 동작하는 로드 밸런서
- 애플리케이션 프로토콜 헤더와 내용을 이해하고 동작하며 다양한 부하 분산, 정보 수정, 정보 필터링 기능
- 상세한 동작을 위해 프록시로 동작하고, 페일오버(Failover, 장애극복), 리다이렉션(Redirection) 기능
- 부하가 많이 걸리는 이미지/정적 콘텐츠 캐싱(Caching)하여 성능 최적화
- 압축(Compression), 콘텐츠 변환 및 재작성, 인코딩 변환, 애플리케이션 프로토콜 최적화 기능
- 플러그인 형태로 보안 강화 기능 WAF(Web Application Firewall)이나 HTML, XML 검증과 변환 기능
- 클라이언트에서 ADC 구간만 SSL 처리 후 웹 서버 SSL 암복호화 부하를 줄이기 위한 SSL 오프로딩
✍🏻 시스템 확장 방법 : 스케일 업과 스케일 아웃
3. 방화벽
네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건을 맞추어 허용하거나 차단하는 장비
- 일반적으로 네트워크 3, 4계층에서 동작하고 세션을 인지, 관리하는 SPI(Stateful Packet Inspection) 엔진을 기반으로 동작하는 장비를 의미한다.
- NAT(Network Address Translation) 동작 방식과 유사하게 세션 정보를 장비 내부에 저장한다.
- 이를 통해 패킷이 외부에서 처음 시작된 것인지, 내부 사용자가 외부로 요청한 응답인지 가려낸다.
(내부 요청에 의한 외부 패킷이어야 정상적인 패킷으로 판단) - 만약 상태, 세션 정보가 없다면 패킷이 내외부 어디에서 시작한 것인지 인지할 수 없어 엄청나게 복잡한 정책관리가 필요하다.
4. 4계층 장비를 통과할 때 유의점
세션 장비는 세션을 이해하고 세션 테이블을 유지한다. 이 정보를 이용해 패킷을 변경하거나 애플리케이션 성능을 최적화하고 보안을 강화하기 위해 패킷을 포워드 하거나 드롭할 수 있다. 이를 충분히 활용하려면 애플리케이션과 세션 장비 간 세션 정보를 동일하게 유지해주거나 애플리케이션을 제작할 때 네트워크 중간에 있는 세션 장비를 고려해 여러 가지 기능을 추가해주어야 한다. 특히 애플리케이션의 세션 시간과 서비스 방향성을 고려하고 비대칭 경로를 피하는 것이 매우 중요하다.
4-1. 세션 테이블 유지, 세션 정보 동기화
세션 장비는 해당 세션 상태를 테이블에 기록한다. 여러 가지 이유로 세션 장비는 세션 정보를 무제한으로 저장할 수 없고, 여러 가지 애플리케이션 통신을 관리하므로 일반적인 애플리케이션에 맞추어 적당한 세션 타임아웃 값을 유지한다.
이런 종류의 애플리케이션이 통신할 때, 세션 장비의 세션 타임아웃 값이 애플리케이션의 세션 타임아웃 값보다 짧으면 통신에 문제가 발생한다.
✍🏻 세션 장비의 세션 만료 시간이 애플리케이션 세션 만료 시간보다 짧을 경우

- 3방향 핸드셰이크를 통해 정상적으로 세션 설정
- ① 방화벽에서 세션 설정 과정을 확인하고 세션 테이블 기록
- ②, ③ 세션 테이블을 참조해 방화벽에서 패킷 통과
- 일정 시간동안 통신 없음
- ④ 세션 타임으로 세션 테이블 만료
- 세션 만료 후 애플리케이션 통신 시작
- ⑤ 세션이 만료되어 방화벽에서 패킷 드롭
⇒ 이런 문제를 해결하기 위해 세션 장비와 애플리케이션에서 각각 설정할 수 있는 설정을 알아보자!
1. 세션 장비 운영자 입장
- 세션 만료 시간 증가
- 세션 장비 운영자가 애플리케이션에 맞게 세션 만료 시간으로 늘리는 방법
- 하지만 세션 장비 운영자가 정확한 정보를 얻어 설정할 수 있도록 애플리케이션 측 개발자 또는 관리자가 고유의 세션 유지 시간을 미리 알려주어야 한다.
- 세션 시간을 둔 채로 중간 패킷을 수용할 수 있도록 방화벽 설정
- 방화벽 옵션을 조정해 세션 테이블에 정보가 없는 ACK 패킷이 들어오더라도 세션을 새로 만들어 통과시키는 방법
- 하지만 전체적인 보안이 취약해지는 기능이므로 가능하면 적용하지 않는 것이 좋다.
- 세션 장비에서 세션 타임아웃 시 양 단말에 세션 종료 통보
- 세션 상태 정보를 강제로 공유하기 위해 세션 정보에 있는 양 종단 장비에 세션 정보 만료(RST)를 통보
- TCP의 RST 플래그를 1로 설정해 양 종단 장비에 전송하면 세션이 비정상적으로 종료된 것으로 판단해 세션을 끊는다.
- 애플리케이션에서 통신이 필요하면 새로운 세션을 맺어 통신한다.
2. 개발자 입장
- 애플리케이션에서 추가적인 발생 기능 추가
- 애플리케이션에서 패킷을 주기적으로 발생시켜 세션 타임아웃이 발생하기 전에 세션을 유지
- 중간 세션 장비의 세션 만료 시간으로 인한 문제를 해결하는 가장 바람직한 방법
4-2. 비대칭 경로 문제
네트워크 안정성을 높이기 위해 네트워크 회선과 장비를 이중화하면 패킷이 지나가는 경로가 2개 이상이므로 인바운드 패킷과 아웃바운드 패킷의 경로가 같거나 다를 수 있다.
📌 대칭 경로 (Symmetric Path)
인바운드 패킷과 아웃바운드 패킷이 같은 장비를 통과하는 것
📌 비대칭 경로 (Asymmetric Path)
인바운드 패킷과 아웃바운드 패킷이 다른 장비를 통과하는 것
- 세션 장비는 세션 테이블을 만들어 관리하는데, 나갈 때와 들어올 때의 경로가 다르면 정상적으로 관리할 수 없다.
- 가장 좋은 해결 방법은 비대칭 경로가 생기지 않도록 네트워크와 경로를 디자인하는 것이다.
✍🏻 비대칭 경로를 방화벽에서 처리할 수 있는 방법
- 세션 테이블 동기화
- 세션 테이블을 동기화하면 두 경로 상의 두 장비가 하나의 장비처럼 동작
- 패킷 경로를 변경하지 않고 동작하지만, 세션 동기화 시간보다 패킷 응답이 더 빠르면 비정상적으로 동작할 수 있다.
- 비대칭 경로가 생길 경우 세션 장비에서 다양한 방법으로 이를 보정하는 것
- 인바운드 패킷이 통과하지 않았는데 아웃바운드 패킷이 들어온 경우 인바운드 패킷이 통과한 다른 장비 쪽으로 패킷을 보내 경로를 보정
- 강제로 다른 방화벽으로 패킷을 보내기 위해 방화벽 간 통신용 링크가 필요하다.
- MAC 주소를 변경하는 MAC 리라이팅(Rewriting)이나 기존 패킷에 MAC 주소를 한 번 더 인캡슐레이션하는 터널링(Tunneling) 기법으로 경로를 보정한다. (구현 방법과 용어는 회사마다 다르다)
4-3. 하나의 통신에 두 개 이상의 세션이 사용될 때의 고려사항
특별한 목적으로 두 개 이상의 세션을 만드는 경우가 있다. 이때 서로 다른 두 세션이 하나의 통신을 위해 사용하고 있음을 세션 장비도 파악해야 한다. 프로토콜은 데이터 프로토콜과 컨트롤 프로토콜로 구분한다.
- 데이터 프로토콜 : 데이터를 전송
- 컨트롤 프로토콜 : 데이터가 잘 전송되도록 세션 제어
현대의 프로토콜은 대부분 하나의 프로토콜에서 헤더나 별도 메시지로 해결하지만, 특별한 목적이 있거나 오래된 프로토콜은 두 개의 프로토콜이 분리된 경우가 있다.
📌 FTP (File Transfer Protocol)
데이터 프로토콜과 컨트롤 프로토콜이 완전히 분리되어 있고, 통신 방법이 다른 두 가지 모드를 가진 프로토콜
- Active 모드를 사용할 때 중간에 방화벽이나 세션 장비가 있으면 Active 모드의 동작 방식에 맞추어 방화벽의 반대 방향도 열어주어야 한다.
- NAT 환경인 경우, FTP가 동작하는 프로토콜을 모두 이해할 수 있는 ALG(Application Layer Gateway)를 동작시켜 FTP 명령어를 이해하고 반대 방향으로 시작하는 데이터 세션을 인지해 방화벽과 NAT를 자동으로 동작시켜야 한다.
- Passive 모드는 두 프로토콜의 방향이 반대인 것을 보완하여 클라이언트에서 서버 쪽으로 데이터를 요청해 다운받도록 동작한다.
- Passive 모드는 클라이언트 쪽에 방화벽이나 세션 장비가 있을 경우, 특별한 작업 없이 동작할 수 있다는 장점이 있지만, 서버 쪽에 방화벽이 있으면 데이터 다운로드를 위한 추가 포트를 열어주어야 한다.
참고자료
- 책 - IT 엔지니어를 위한 네트워크 입문 (고재성/이상훈, 2020년 10월)
'컴퓨터과학 > 네트워크' 카테고리의 다른 글
[네트워크] 7-2. DNS (0) | 2024.10.29 |
---|---|
[네트워크] 7-1. NAT/PAT (0) | 2024.10.29 |
[네트워크] 5. 라우터/L3 스위치: 3계층 장비 (0) | 2024.10.24 |
[네트워크] 4. 스위치: 2계층 장비 (0) | 2024.10.21 |
[네트워크] 3. 네트워크 통신하기 (0) | 2024.10.17 |
블로그의 정보
콰이엇의 개발기록
콰이엇