방화벽 (Firewall) 과 ALG

JIWON·2025년 6월 4일

Network security

목록 보기
3/6
post-thumbnail

네트워크 보안은 호스트에서 수행하는 보안과 달리 많은 호스트들을 한꺼번에 관리하고 보호할 수 있다는 장점이 있지만 많은 트래픽을 감당해야 하기 때문에 속도를 유지하면서 보안을 제공할 수 있어야 한다는 어려움이 있다.

따라서 성능 저하 없이 보안을 향상시키는 기술이 필요한데 그 기술이 방화벽이다.


1️⃣ 방화벽이란?

방화벽(Firewall) : 네트워크 중간에 위치해서 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 비인가된 접근을 차단하고, 허용된 트래픽만 통과시키는 보안 시스템

네트워크에서 보안을 제공하는 장비를 넓게는 모두 방화벽으로 볼 수 있지만 실제로 방화벽은 네트워크 3, 4계층에서 동작하며 세션을 인지하는 상태기반 엔진(SPI)으로 동작한다.

  • 주로 IP(3계층), 포트(4계층), 프로토콜을 기준으로 통신을 제어

    • 3계층 장비컴퓨터를 기준으로 구분한다

    • 4계층 장비는 컴퓨터에서 오는 데이터를 해석해서 데이터 단위로 서비스를 구분한다.


2️⃣ 방화벽 유형

💠 Stateless 방화벽 , 패킷 필터링 방화벽

  • 초창기 방화벽으로, 초기 방화벽에서는 패킷의 인과 관계를 확인하지 못했다

  • 패킷의 세션 정보나 방향성과 상관없이 순수하게 방화벽에 설정된 정책에 따라 동작하기 때문에 이런 초기 방화벽을 Stateless 또는 Packet Filter 방화벽이라고 한다

단점

  • 패킷 필터링 방화벽은 지정된 구간에서 간단한 정책을 정의할 때는 큰 문제가 없지만 인터넷 통신과 같이 불특정 다수 기반의 정첵을 정의할 때는 Ruleset이 복잡해지고 보안이 약화되는 문제가 발생한다

  • 패킷 단위의 필터링이므로 5-tuple 이외의 3, 4계층 헤더를 변조해서 공격하면 방어가 불가능하다

장점

  • 패킷 필터링 자체는 다른 세대의 방화벽 엔진보다 부하가 적고 간단히 동작하므로 완전히 없어지지 않고 현대적인 일부 방화벽에서도 특수한 기능을 위해 남겨두었다.

  • 지정된 IP 들을 방어하는데는 간단한 패킷 필터링이 부하가 적어 블랙리스트 처리를 위해 방화벽 내부에 패킷 필터링 엔진을 배치한다

동작 방식

  • 패킷이 장비에 인입되면 해당 패킷이 방화벽에 설정된 정책에 일치되는 것이 있는지 확인한다

  • 이 때 참고하는 조건을 5-Tuple

    • Source IP, Detination IP, Protocol No, Source Port, Destination Port
  • 방화벽에 일치된 정책이 있으면 해당 정책에 따라 그 패킷을 허용하거나 차단한다.


📌 HTTP는 Stateless

HTTP가 stateless(무상태)하다는 말은,
각 요청(Request) 간에 서버가 이전 요청의 상태 정보를 기억하지 않는다는 의미이다.

  • 상태를 저장하기 위한 방법 :

    • 서버에 저장 -> 세션(Session)
      문제점 : 느림

    • 클라이언트에 저장 -> 쿠키(Cookie)
      문제점 : 보안 문제


💠 상태 저장 방화벽 (Stateful Firewall)

세션 기반으로 동작하는 상태기반엔진(SPI)을 탑재한 방화벽

  • 세션 인지 기능이 있어서 5-Tuple 조건만 확인하는 것이 아니라 OSI 3, 4계층의 세부적인 필드도 함께 확인한다.
    • TCP 컨트롤 플래그에 따라 동작방식이 변하거나, 시퀀스와 ACK 번호가 갑자기 변경되는 것을 인지해서 세션 탈취 공격을 일부 방어할 수 있다.

패킷 필터 방화벽의 문제점

  • 내부 사용자가 외부의 특정 웹 페이지에 접속할 때 3 way-handshake를 거친 후 HTTP 요청과 응답과정을 거친다
    • 패킷 필터 방화벽에서는 이런 트래픽을 처리하려면 목적지가 불특정 다수의 웹이 될 수 있기 때문에 외부로 나가는 목적지에 대해서는 모든 패킷을 허용해야 한다
    • 이렇게만 정책을 설정하면 내부에서 외부 웹사이트로 나갈 수 있지만 외부에서 내부로 들어오는 응답에 대한 정책이 없기 때문에 정상적인 통신이 불가능함
    • 응답에 대한 정책을 설정해야 한다면 외부의 사이트는 불특정이기 때문에 출발지가 모든 IP이어야 하고 목적지 서비스 포트는 내부에서 외부 호출 시 랜덤 포트를 지정하므로 모든 포트가 되어야 한다
    • 모든 IP와 모든 Port를 열어야 하므로 보안상 매우 취약
[내부 PC] → [방화벽] → [외부 A]     ✅ 요청 허용
[내부 PC] ← [방화벽] ← [외부 A]     ✅ 응답 허용
[내부 PC] ← [방화벽] ← [외부 C]     ✅ 차단 불가 (출발지 상태 추적 없음)

SPI 엔진

  • SPI 엔진을 탑재하면 내부에서 외부 인터넷으로 통신을 시도해 받은 응답외부에서 내부로 직접 들어오는 패킷을 구분 할 수 있다.
[내부 PC] → [방화벽] → [외부 A]     ✅ 요청 허용
[내부 PC] ← [방화벽] ← [외부 A]     ✅ 응답 허용
[내부 PC] ← [방화벽] ← [외부 C]     ❌ 차단 (세션 미일치)

동작방식

[1] 내부 컴퓨터에서 요청 발생
          │
          ▼
[2] 세션 테이블에 매칭되는 세션 있음?
          │
     ┌────┴───────────────────────┐
     │                          │
     Y                          N
     │                          │
     ▼                          ▼
[3] 포워딩 테이블에 경로 있음?    [4] 정책에 매칭되는 규칙 있음?
     │                                │
  ┌──┴──┐                          ┌───┴────────┐
  │     │                          │           │
 Y      N                          Y           N
  │     │                          │           │
  ▼     ▼                          ▼           ▼
포워딩   폐기           세션 기록 + 포워딩 확인    폐기
                               │
                               ▼
                    포워딩 테이블에 경로 있음?
                               │
                            ┌───┴───┐
                            │       │
                            Y       N
                            │       │
                            ▼       ▼
                         포워딩     폐기
  • 세션 테이블: 기존 연결 정보(IP/포트 등)를 저장한 테이블

  • 포워딩 테이블: 패킷을 어느 인터페이스로 보낼지 결정하는 경로 정보

  • 정책: 방화벽에 등록된 허용/차단 규칙(IP, 포트, 프로토콜 기반)


📌 세션 테이블, 포워딩 테이블 vs 정책 저장의 차이

세션 테이블, 포워딩 테이블

  • 저장 위치: 일반적으로 RAM(메모리)에 저장됨
  • 휘발성, 일시적으로 기억함
  • 실시간 업데이트: 트래픽이 오가면서 계속 생성/삭제됨

정책 저장

  • 저장 위치: 비휘발성 저장소 (디스크, 설정 파일 등)에 저장
  • 영속성(Persistent): 장비를 껐다 켜도 유지됨
  • 관리자 설정을 통해 변경되며 빈번하게 바뀌지 않음
  • 트래픽이 발생하면 정책을 기반으로 세션 테이블을 생성함


3️⃣ ALG

ALG (Application Layer Gateway)는 방화벽 또는 NAT 장비에서 애플리케이션 계층(7계층) 트래픽을 인식하고,
특정 프로토콜이 방화벽 환경에서도 정상적으로 작동하도록 중계 역할을 수행하는 기능입니다.

💠 왜 필요한가?

  • 초기의 프로토콜들(예: FTP, SIP, H.323 등)은 방화벽이나 NAT 장비가 존재하는 네트워크 환경을 고려하지 않고 설계됨.

  • 이로 인해 중간에 방화벽이 있을 경우, 통신이 차단되거나 동작이 비정상적일 수 있음.

  • ALG는 이러한 문제를 해결하기 위해 방화벽 장비가 애플리케이션 계층의 통신 흐름을 이해하도록 돕는 역할을 함.

일반적인 방화벽은 IP/포트(3~4계층)만 인식하므로
복잡한 세션 구조를 가진 프로토콜은 통신 실패 발생 가능

💠 ALG의 한계

  • 세션 인지는 가능하지만, 애플리케이션 헤더를 완전히 분석하지 못함

  • 즉, 단순 패킷 필터보다는 똑똑하지만 애플리케이션 수준 완전한 보안 장비는 아님

💡 예시: FTP에서 ALG가 필요한 이유

FTP

  • FTP 는 컨트롤 프로토콜과 데이터 프로토콜이 반대로 세션을 맺기 때문에 방화벽이 FTP 프로토콜을 이해해서 동작하지 않으면 정상적인 서비스가 불가능하다

🔄 FTP 기본 구조

구분설명
제어 채널클라이언트 → 서버의 21번 포트 (명령 송수신)
데이터 채널서버 → 클라이언트의 랜덤 포트 (파일 데이터 전송)

🔁 FTP는 제어와 데이터 포트가 다르고, 서버가 클라이언트에게 접속하기 때문에 방화벽이 막아버리는 상황이 자주 발생

❌ 일반 방화벽에서 FTP가 막히는 이유

[클라이언트:2000] → [서버:21] : 접속 (제어 채널)
[클라이언트] → 서버에 “2001 포트로 데이터 주세요” 라고 요청
[서버:20] → [클라이언트:2001] : 실제 데이터 전송 시작 ❗❗
  • 문제: 일반 방화벽은 외부(서버) → 내부(클라이언트)의 연결 요청을 차단함

  • 결과: 데이터 채널이 차단되어 FTP 동작 실패

✅ ALG가 해결하는 방식

  • ALG는 제어 채널을 분석하여, 데이터 포트가 동적으로 열릴 것을 예측하고
    클라이언트의 2001 포트를 자동으로 방화벽에서 열어줌

  • 결과적으로 FTP 통신이 NAT/방화벽 환경에서도 정상적으로 동작할 수 있음

  • 위의 문제를 해결하기 위해서는 FTP 통신 방식을 패시브 모드로 전환을 해야 하는데 이를 제공하지 못하는 컴포넌트도 있고 이미 개발된 애플리케이션을 변경할 수 없는 경우도 있어서 방화벽에서 FTP 액티브 모드를 통과시키기 위해서 애플리케이션 프로토콜을 확인하고 필요에 따라 세션을 인지해서 포트를 자동으로 열어주는 장비를 ALG라고한다


4️⃣ 방화벽의 한계

  • 공격 목표가 시스템이나 계정 탈취에서 서비스 중단으로 변경되면서 DDoS 공격이 새로운 트렌드
  • 바이러스나 백도어, 인터넷 웜 등을 방어할 수 없다.
    • 이 공격을 막기 위해 등장한 것이 IPS

0개의 댓글