방화벽으로 포트를 막아도 80·443 같은 웹 포트는 열어둘 수밖에 없습니다. 문제는 그 열린 문으로 SQL 인젝션이나 XSS 같은 정상 요청처럼 생긴 공격 이 들어온다는 점입니다. 이걸 거르는 게 WAF(Web Application Firewall)입니다. 일반 방화벽이 IP·포트를 보는 4계층 경비라면, WAF는 HTTP 요청의 URL·헤더·바디 내용을 읽는 7계층 검문소입니다.
일반 방화벽 vs WAF
| 구분 | 보는 것 | 막는 공격 |
|---|---|---|
| 네트워크 방화벽 | IP, 포트 | 비정상 포트 접근, 특정 IP |
| WAF | HTTP 요청 내용(URL/헤더/바디) | SQL 인젝션, XSS, 경로 탐색 |
WAF는 보통 로드밸런서나 CDN 앞단에 붙어, 요청이 애플리케이션에 닿기 전에 검사합니다. 통과한 요청만 뒤로 넘어갑니다.
WAF 규칙의 세 갈래
-
관리형 규칙(Managed Rules) — 클라우드 제공사가 OWASP Top 10 같은 알려진 공격 패턴을 미리 만들어 둔 규칙 묶음입니다. 가장 먼저 켜야 할 기본기입니다. 예: 공통 위협 규칙, SQL 인젝션 규칙, 알려진 악성 IP 목록.
-
커스텀 규칙(Custom Rules) — 우리 서비스에만 필요한 조건을 직접 만듭니다. 예를 들어 관리자 경로는 사내 IP에서만 허용하는 규칙입니다.
JSON
{
"Name": "admin-path-allow-office-only",
"Priority": 1,
"Action": { "Block": {} },
"Statement": {
"AndStatement": { "Statements": [
{ "ByteMatchStatement": { "SearchString": "/admin",
"FieldToMatch": { "UriPath": {} } } },
{ "NotStatement": { "Statement": {
"IPSetReferenceStatement": { "ARN": "arn:...:office-ips" } } } }
] }
}
}
- 레이트 기반 규칙(Rate-based) — 같은 IP가 짧은 시간에 과도하게 요청하면 자동 차단합니다. 로그인 폼 무차별 대입이나 단순 DoS를 막는 데 효과적입니다. 예: 5분에 한 IP당 1000건 초과 시 차단.
적용 순서 — Count 모드부터
규칙을 처음부터 Block으로 켜면 정상 사용자까지 막아버리는 오탐(false positive)으로 장애가 납니다. 안전한 순서는 이렇습니다.
- 관리형 규칙을 Count 모드로 먼저 켜고, 어떤 정상 트래픽이 걸리는지 로그로 관찰합니다.
- 오탐을 일으키는 규칙은 예외(허용 조건)를 추가하거나 해당 규칙만 끕니다.
- 충분히 관찰한 뒤 Block 모드로 전환합니다.
- 차단 로그를 대시보드로 모니터링하며 임계치를 조정합니다.
WAF는 한 번 켜고 끝나는 게 아니라, 로그를 보며 규칙을 다듬어가는 운영 대상이라는 점이 핵심입니다.
요점 정리
- 네트워크 방화벽은 IP·포트를, WAF는 HTTP 요청 내용을 본다.
- 관리형 규칙(기본기)
→커스텀 규칙(우리 서비스용)→레이트 제한(무차별 대입) 순으로 쌓는다. - 반드시 Count 모드로 오탐을 걸러낸 뒤 Block으로 전환한다.
WAF 규칙을 직접 만들고 공격 요청이 차단되는 과정을 로그로 확인하는 실습은 클라우드 트랙에서 회원가입 없이 무료로 할 수 있습니다.