
네트워크 보안은 호스트에서 수행하는 보안과 달리 많은 호스트들을 한꺼번에 관리하고 보호할 수 있다는 장점이 있지만 많은 트래픽을 감당해야 하기 때문에 속도를 유지하면서 보안을 제공할 수 있어야 한다는 어려움이 있다.
따라서 성능 저하 없이 보안을 향상시키는 기술이 필요한데 그 기술이 방화벽이다.
방화벽(Firewall) : 네트워크 중간에 위치해서 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 비인가된 접근을 차단하고, 허용된 트래픽만 통과시키는 보안 시스템
네트워크에서 보안을 제공하는 장비를 넓게는 모두 방화벽으로 볼 수 있지만 실제로 방화벽은 네트워크 3, 4계층에서 동작하며 세션을 인지하는 상태기반 엔진(SPI)으로 동작한다.
주로 IP(3계층), 포트(4계층), 프로토콜을 기준으로 통신을 제어
3계층 장비는 컴퓨터를 기준으로 구분한다
4계층 장비는 컴퓨터에서 오는 데이터를 해석해서 데이터 단위로 서비스를 구분한다.
초창기 방화벽으로, 초기 방화벽에서는 패킷의 인과 관계를 확인하지 못했다
패킷의 세션 정보나 방향성과 상관없이 순수하게 방화벽에 설정된 정책에 따라 동작하기 때문에 이런 초기 방화벽을 Stateless 또는 Packet Filter 방화벽이라고 한다
단점
패킷 필터링 방화벽은 지정된 구간에서 간단한 정책을 정의할 때는 큰 문제가 없지만 인터넷 통신과 같이 불특정 다수 기반의 정첵을 정의할 때는 Ruleset이 복잡해지고 보안이 약화되는 문제가 발생한다
패킷 단위의 필터링이므로 5-tuple 이외의 3, 4계층 헤더를 변조해서 공격하면 방어가 불가능하다
장점
패킷 필터링 자체는 다른 세대의 방화벽 엔진보다 부하가 적고 간단히 동작하므로 완전히 없어지지 않고 현대적인 일부 방화벽에서도 특수한 기능을 위해 남겨두었다.
지정된 IP 들을 방어하는데는 간단한 패킷 필터링이 부하가 적어 블랙리스트 처리를 위해 방화벽 내부에 패킷 필터링 엔진을 배치한다
패킷이 장비에 인입되면 해당 패킷이 방화벽에 설정된 정책에 일치되는 것이 있는지 확인한다
이 때 참고하는 조건을 5-Tuple
Source IP, Detination IP, Protocol No, Source Port, Destination Port방화벽에 일치된 정책이 있으면 해당 정책에 따라 그 패킷을 허용하거나 차단한다.
HTTP가 stateless(무상태)하다는 말은,
각 요청(Request) 간에 서버가 이전 요청의 상태 정보를 기억하지 않는다는 의미이다.
상태를 저장하기 위한 방법 :
서버에 저장 -> 세션(Session)
문제점 : 느림
클라이언트에 저장 -> 쿠키(Cookie)
문제점 : 보안 문제
세션 기반으로 동작하는 상태기반엔진(SPI)을 탑재한 방화벽
[내부 PC] → [방화벽] → [외부 A] ✅ 요청 허용
[내부 PC] ← [방화벽] ← [외부 A] ✅ 응답 허용
[내부 PC] ← [방화벽] ← [외부 C] ✅ 차단 불가 (출발지 상태 추적 없음)
[내부 PC] → [방화벽] → [외부 A] ✅ 요청 허용
[내부 PC] ← [방화벽] ← [외부 A] ✅ 응답 허용
[내부 PC] ← [방화벽] ← [외부 C] ❌ 차단 (세션 미일치)
[1] 내부 컴퓨터에서 요청 발생
│
▼
[2] 세션 테이블에 매칭되는 세션 있음?
│
┌────┴───────────────────────┐
│ │
Y N
│ │
▼ ▼
[3] 포워딩 테이블에 경로 있음? [4] 정책에 매칭되는 규칙 있음?
│ │
┌──┴──┐ ┌───┴────────┐
│ │ │ │
Y N Y N
│ │ │ │
▼ ▼ ▼ ▼
포워딩 폐기 세션 기록 + 포워딩 확인 폐기
│
▼
포워딩 테이블에 경로 있음?
│
┌───┴───┐
│ │
Y N
│ │
▼ ▼
포워딩 폐기
세션 테이블: 기존 연결 정보(IP/포트 등)를 저장한 테이블
포워딩 테이블: 패킷을 어느 인터페이스로 보낼지 결정하는 경로 정보
정책: 방화벽에 등록된 허용/차단 규칙(IP, 포트, 프로토콜 기반)
세션 테이블, 포워딩 테이블
정책 저장
ALG (Application Layer Gateway)는 방화벽 또는 NAT 장비에서 애플리케이션 계층(7계층) 트래픽을 인식하고,
특정 프로토콜이 방화벽 환경에서도 정상적으로 작동하도록 중계 역할을 수행하는 기능입니다.
초기의 프로토콜들(예: FTP, SIP, H.323 등)은 방화벽이나 NAT 장비가 존재하는 네트워크 환경을 고려하지 않고 설계됨.
이로 인해 중간에 방화벽이 있을 경우, 통신이 차단되거나 동작이 비정상적일 수 있음.
ALG는 이러한 문제를 해결하기 위해 방화벽 장비가 애플리케이션 계층의 통신 흐름을 이해하도록 돕는 역할을 함.
일반적인 방화벽은 IP/포트(3~4계층)만 인식하므로
복잡한 세션 구조를 가진 프로토콜은 통신 실패 발생 가능
세션 인지는 가능하지만, 애플리케이션 헤더를 완전히 분석하지 못함
즉, 단순 패킷 필터보다는 똑똑하지만 애플리케이션 수준 완전한 보안 장비는 아님
| 구분 | 설명 |
|---|---|
| 제어 채널 | 클라이언트 → 서버의 21번 포트 (명령 송수신) |
| 데이터 채널 | 서버 → 클라이언트의 랜덤 포트 (파일 데이터 전송) |
🔁 FTP는 제어와 데이터 포트가 다르고, 서버가 클라이언트에게 접속하기 때문에 방화벽이 막아버리는 상황이 자주 발생
[클라이언트:2000] → [서버:21] : 접속 (제어 채널)
[클라이언트] → 서버에 “2001 포트로 데이터 주세요” 라고 요청
[서버:20] → [클라이언트:2001] : 실제 데이터 전송 시작 ❗❗
문제: 일반 방화벽은 외부(서버) → 내부(클라이언트)의 연결 요청을 차단함
결과: 데이터 채널이 차단되어 FTP 동작 실패
ALG는 제어 채널을 분석하여, 데이터 포트가 동적으로 열릴 것을 예측하고
클라이언트의 2001 포트를 자동으로 방화벽에서 열어줌
결과적으로 FTP 통신이 NAT/방화벽 환경에서도 정상적으로 동작할 수 있음
위의 문제를 해결하기 위해서는 FTP 통신 방식을 패시브 모드로 전환을 해야 하는데 이를 제공하지 못하는 컴포넌트도 있고 이미 개발된 애플리케이션을 변경할 수 없는 경우도 있어서 방화벽에서 FTP 액티브 모드를 통과시키기 위해서 애플리케이션 프로토콜을 확인하고 필요에 따라 세션을 인지해서 포트를 자동으로 열어주는 장비를 ALG라고한다