📚 네트워크 · 패킷 분석 › 06. 방화벽 · IDS 기초 — 253편
이전 글: 252. Firewall이란 무엇인가 · 다음 글: 254. Stateful Firewall
Packet Filtering Firewall은 패킷 한 개의 헤더 정보(IP 주소, 프로토콜, 포트, TCP 플래그)만 보고 규칙과 비교해 통과 여부를 정하는 방식입니다. 이전 패킷과의 관계, 즉 "이 패킷이 어떤 연결의 일부인가"를 기억하지 않기 때문에 Stateless(상태 비저장) 방화벽이라고도 부릅니다.
라우터·L3 스위치의 ACL이 대표적인 패킷 필터이며, 장비 설정 방법은 04 영역 178. ACL에서 다뤘습니다. 이 글은 상태를 모르는 판단이 어떤 약점과 흔적을 남기는가를 봅니다.
| 비교 항목 | Packet Filtering | Stateful (254. Stateful Firewall) |
|---|---|---|
| 판단 단위 | 패킷 하나 | 연결(세션) |
| 응답 패킷 처리 | 별도 허용 규칙 필요 | 세션 테이블로 자동 허용 |
| 기억하는 정보 | 없음 | 5-tuple, 상태, 타임아웃 |
| 처리 부담 | 낮음 | 세션 테이블 유지 비용 |
| 대표 사례 | 라우터 ACL, 대용량 회선 앞단 필터 | 대부분의 현대 방화벽 |
내부 PC가 외부 웹 서버에 접속할 때, 패킷 필터는 요청과 응답을 서로 다른 패킷으로 판단합니다.
[요청] 192.168.10.25:51544 → 203.0.113.80:443 SYN
↓ 규칙 A: 내부 → 외부 TCP dport 443 허용 → 통과
[응답] 203.0.113.80:443 → 192.168.10.25:51544 SYN/ACK
↓ 이 패킷은 "외부 → 내부" 방향의 새 패킷
↓ 규칙 B가 없으면 → 차단 (연결 실패)
↓ 규칙 B: 외부 → 내부 TCP sport 443 허용 (문제의 시작)
응답을 통과시키려면 규칙 B처럼 출발지 포트 기준 허용이나 ACK 플래그 기준 허용(Cisco ACL의 established 키워드는 ACK 또는 RST 비트가 설정된 TCP 패킷과 일치)을 써야 합니다. 두 방법 모두 "진짜 응답인지"는 확인하지 않습니다.
| 특징 | 내용 | 관제 의미 |
|---|---|---|
| 순서대로 비교, 첫 일치 적용 | 규칙 순서가 결과를 결정 | 차단 원인은 "어느 규칙"인지로 설명 |
| 헤더만 확인 | 페이로드는 보지 않음 | 허용 포트 안의 공격은 보이지 않음 |
| 조각 패킷 처리 | 두 번째 이후 조각에는 TCP/UDP 헤더(포트)가 없음 | 조각 처리 정책이 약하면 우회 가능성 |
| 빠른 처리 | 상태 저장 없음 | 대용량 구간 앞단 1차 필터로 적합 |
nftables로 상태 추적을 쓰지 않는 필터를 만들면 응답용 규칙이 따로 필요하다는 점을 확인할 수 있습니다. 실습 예시(값은 환경마다 다름)이며 Rocky/Ubuntu 공통입니다.
# 실습 예시: 상태 추적 없이 웹 접속만 허용하려는 필터 (문제점 확인용)
table inet stateless_lab {
chain forward {
type filter hook forward priority 0; policy drop;
iifname "ens37" tcp dport 443 accept comment "요청"
iifname "ens33" tcp sport 443 accept comment "응답 (출발지 포트만 확인)"
}
}
두 번째 규칙은 "외부에서 출발지 포트 443으로 오는 모든 TCP"를 허용합니다. 같은 목적을 상태 기반으로 쓰면 ct state established,related accept 한 줄로 실제로 내부에서 시작된 연결의 응답만 허용할 수 있습니다(254. Stateful Firewall).
Cisco 계열 ACL의 로그는 다음과 같은 형식으로 남습니다.
# 형식 예시 (값은 환경마다 다름)
%SEC-6-IPACCESSLOGP: list OUTSIDE-IN denied tcp 198.51.100.7(40022) -> 10.20.0.10(3389), 1 packet
관제자가 확인할 질문
| 흔적 | 의심 방향 |
|---|---|
| 요청 기록 없이 외부발 "응답 형태" 패킷 다수 | 출발지 포트 위조, 스캔 |
| ACL deny 로그의 목적지 포트가 넓게 분포 | 포트 스캔 |
| 조각 패킷만 반복 수신 | 필터 우회 시도 또는 MTU 문제 |
오탐 주의: 비대칭 라우팅이나 타임아웃으로 세션이 먼저 끊긴 뒤 도착한 늦은 응답도 "요청 없는 응답"처럼 보입니다. 같은 시간대 반대 방향 통신을 함께 확인합니다.