한양과학기술고등학교

에듀테크 프로젝트 대시보드

방화벽 (Firewall)

📦 스테이트리스 Packet Filtering
패킷 1
→
규칙 표 매 패킷마다 처음부터
→
ALLOW/DENY
패킷 하나하나를 독립적으로 검사한다. 출발지/목적지 IP·포트·프로토콜만 보고 규칙표를 위에서부터 순서대로 대조 — 직전에 무슨 패킷이 오갔는지는 전혀 기억하지 않는다.
🧠 스테이트풀 Stateful Inspection
내부→외부 요청
→
연결 상태 테이블에 기록
→
돌아오는 응답 자동 허용
내가 먼저 나간(outbound) 연결은 상태 테이블(conntrack)에 기록되고, 그 연결의 응답 패킷은 인바운드 규칙표를 다시 훑을 필요 없이 곧바로 통과한다 — 규칙표 맨 위에 있는 "ESTABLISHED → ACCEPT" 한 줄이 그 역할.
🧪 인터랙티브 데모 — 규칙 체인(Rule Chain) 시뮬레이터 First-Match-Wins
실제 방화벽(iptables, 클라우드 보안 그룹 등)은 규칙을 위에서부터 순서대로 검사하다가 가장 먼저 일치하는 규칙에서 즉시 멈춘다. 아래에서 패킷을 골라 보내고 어떤 규칙에서 멈추는지, 그리고 순서를 바꾸면 결과가 어떻게 달라지는지 관찰해보자.
대기 중...
0 STATE: ESTABLISHED, RELATED (상태 기반) ACCEPT
1 TCP 22(SSH) ← 203.0.113.0/24 (사무실 고정 IP) ACCEPT
2 TCP 22(SSH) ← ANY DROP
3 TCP 80, 443(HTTP/S) ← ANY ACCEPT
4 TCP 3389(RDP) ← ANY DROP
· 기본 정책 (Default Policy) — 나머지 전부 DROP
// 패킷 대기 중...
📄 iptables 규칙 예시
# 기본 정책: 들어오는 건 일단 다 막는다 iptables -P INPUT DROP # ① 상태 기반: 이미 맺어진 연결의 응답은 무조건 허용 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ② 사무실 대역만 SSH 허용 iptables -A INPUT -p tcp --dport 22 \ -s 203.0.113.0/24 -j ACCEPT # ③ 그 외 SSH는 차단 iptables -A INPUT -p tcp --dport 22 -j DROP # ④ 웹 서비스 포트는 전체 허용 iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
🗂️ 연결 추적 테이블 conntrack
PROTOSRCDSTSTATE
TCP10.0.0.5:5132293.184.216.34:443ESTABLISHED
TCP10.0.0.5:51410172.217.0.4:443TIME_WAIT
UDP10.0.0.5:601118.8.8.8:53ESTABLISHED
내 PC가 먼저 나간(outbound) 연결만 이 표에 올라간다. 표에 있는 연결의 응답은 인바운드 규칙 1~4를 다시 확인하지 않고 규칙 0에서 즉시 통과 — 이것이 스테이트풀 검사의 핵심.
🔍 헷갈리기 쉬운 개념
방화벽 — IP·포트·프로토콜 기준으로 통과 여부를 결정 (허가증 검사).

NAT — 사설 IP ↔ 공인 IP 주소를 변환. 통과 여부와는 별개 (본문 「NAT」 참고).

VLAN — 스위치를 여러 방송 도메인으로 분할. 필터링이 아니라 격리 (본문 「VLAN」 참고).
WAF — IP·포트가 아니라 HTTP 요청 내용(SQL 인젝션·XSS 패턴 등)을 검사.