📚 네트워크 · 패킷 분석 › 04. 네트워크 장비 실습 — 181편
이전 글: 180. DMZ · 다음 글: 182. Inbound 정책
Firewall 정책(Policy) 은 방화벽이 통과하는 트래픽마다 "허용할 것인가, 차단할 것인가, 기록할 것인가"를 결정하는 규칙(Rule)들의 집합입니다. 방화벽 장비의 역할과 배치는 155. Firewall이란 무엇인가에서 다뤘고, 이 글은 정책이 장비 안에서 어떤 구조로 저장·평가되고, 조직에서 어떻게 관리되는가를 다룹니다. 개별 규칙의 필드(IP·포트·프로토콜)별 분석은 256. Firewall Rule부터 이어집니다.
제품마다 화면은 다르지만, 한 줄의 규칙은 대체로 다음 요소로 구성됩니다.
| 구성 요소 | 의미 | 예 |
|---|---|---|
| 출발지 / 목적지 Zone(인터페이스) | 어느 구역에서 어느 구역으로 | users → servers |
| 출발지 / 목적지 주소 | IP·대역·주소 객체 | 192.168.10.0/24 → WEB-SRV |
| 서비스 | 프로토콜 + 목적지 포트 | TCP 443 |
| 동작(Action) | 허용·차단(Drop/Reject) | Allow (184. Allow와 Deny) |
| 로그 | 기록 여부·시점 | 세션 시작/종료 시 기록 |
| 부가 정보 | 규칙 이름, 설명, 요청자, 만료일 | "CHG-0412 웹 서비스 공개" |
NGFW 계열은 여기에 사용자·애플리케이션·URL 분류 같은 조건이 추가되지만, 기본 뼈대는 같습니다.
대부분의 방화벽은 정책 테이블을 위에서부터 차례로 비교해 처음 일치한 규칙을 적용합니다(178. ACL의 ACL과 같은 원리). 상태 기반 방화벽은 그 앞에 세션 테이블 확인 단계가 있습니다(185. Stateful Firewall).
패킷 도착
↓
[세션 테이블에 이미 있는 연결인가?] ─ 예 → 통과 (정책 재평가 없음)
↓ 아니오 (새 연결)
[NAT 판단: 목적지 변환 여부] ← 제품마다 순서 다름 (186편)
↓
[정책 1번 → 2번 → … 비교, 첫 일치 규칙 적용]
↓
[끝까지 일치 없음 → 기본 정책(Default Deny)]
↓
허용이면 세션 생성 + 로그 / 차단이면 폐기 + 로그
정책 테이블의 권장 배치 순서입니다.
| 위치 | 규칙 성격 | 예 |
|---|---|---|
| 최상단 | 반드시 먼저 막아야 할 것 | 위조 출발지, 알려진 악성 대역 |
| 상단 | 방화벽 자체 보호 | 관리망 → 방화벽 관리 포트만 허용 |
| 중간 | 업무 허용 규칙(구체적인 것부터) | 사용자망 → 웹 서버 443 |
| 하단 | 넓은 범위 규칙 | 내부 → 인터넷 웹 |
| 최하단 | 명시적 전체 차단 + 로그 | any → any deny, log |
마지막에 명시적 deny 규칙을 로그와 함께 두는 이유는, 암묵적 기본 차단은 제품에 따라 로그가 남지 않기 때문입니다.
Linux 방화벽 도구에서 같은 구조가 어떻게 표현되는지 비교하면 정책 구조를 이해하기 쉽습니다.
| 개념 | nftables | firewalld | iptables |
|---|---|---|---|
| 정책 묶음 | table (inet fw) | zone, policy | table (filter) |
| 평가 지점 | chain + hook (input, forward, output) | zone(유입), policy(구역 간) | INPUT / FORWARD / OUTPUT 체인 |
| 규칙 순서 | chain 안 규칙 순서 | 내부적으로 정해진 순서 (rich rule priority로 조정) | 체인 안 규칙 순서 |
| 기본 정책 | chain의 policy drop | zone target (default, DROP, REJECT, ACCEPT) | -P INPUT DROP |
set)를 만들어 참조합니다.실습 예시 — nftables로 정책 구조를 만드는 방법입니다(Rocky/Ubuntu 공통). 파일로 작성해 한 번에 적용하면 규칙 순서를 관리하기 쉽습니다. 값은 예시(값은 환경마다 다름)입니다.
# /etc/nftables/lab-fw.nft (예시 파일)
table inet fw {
set web_servers {
type ipv4_addr
elements = { 10.20.0.10, 10.20.0.11 }
}
chain forward {
type filter hook forward priority 0; policy drop;
ct state established,related accept
ct state invalid drop
iifname "ens37" oifname "ens38" ip daddr @web_servers tcp dport 443 counter accept comment "CHG-0412 users->web"
iifname "ens37" oifname "ens33" tcp dport { 80, 443 } counter accept comment "users->internet web"
counter log prefix "FW-DEFAULT-DROP " drop
}
}
sudo nft -c -f /etc/nftables/lab-fw.nft # 문법만 검사 (적용 안 함)
sudo nft -f /etc/nftables/lab-fw.nft # 적용
sudo nft -a list chain inet fw forward # 규칙 handle 번호와 counter(적중 수) 확인
Rocky에서 부팅 시 자동 적용하려면 /etc/sysconfig/nftables.conf에서 이 파일을 include하고 nftables 서비스를 활성화합니다. Ubuntu는 /etc/nftables.conf를 사용합니다. firewalld를 쓰는 환경에서는 sudo firewall-cmd --list-all-zones와 --list-all-policies로 정책 구조를 확인합니다.
📷 [실습 화면 삽입 위치]
sudo nft -a list chain inet fw forward결과에서 각 규칙의 counter packets/bytes 값과 comment, 마지막 기본 차단 규칙을 표시한 화면
| 흔적 | 의미 |
|---|---|
| 정책 변경 로그(관리·감사 로그) | 누가, 언제, 어떤 규칙을 추가·수정·삭제했는가 |
| 규칙별 적중 수 | 사용되지 않는 규칙, 갑자기 사용량이 늘어난 규칙 |
| 기본 차단 규칙의 로그 | 정책에 없는 통신 시도 전체 |
| 허용 로그의 규칙 ID·이름 필드 | 어떤 규칙이 이 통신을 허용했는가 |
관제자가 확인할 질문
오탐 주의: 정기 작업 창에 몰리는 정책 변경과 차단 로그 증가는 정상일 수 있습니다. 변경 관리 일정과 대조합니다. 방화벽 로그 형식은 187. Firewall Log, 로그 분석은 273. Firewall Log 분석에서 다룹니다.