WAF는 웹 앱 앞에 서 있는 경비원이다
일반 방화벽(Firewall)이 IP/포트 레벨에서 트래픽을 필터링한다면, WAF(Web Application Firewall)는 HTTP 요청 내용을 보고 공격을 차단한다. SQL Injection, XSS, 파일 업로드 공격 같은 애플리케이션 레벨 공격을 막는다.
WAF가 차단하는 공격 유형
- SQL Injection: URL이나 파라미터에 SQL 구문이 포함된 요청
- XSS: 스크립트 태그가 포함된 입력
- Directory Traversal: ../../etc/passwd 같은 경로 탈취 시도
- Remote File Inclusion: 외부 파일을 포함시키는 공격
- DDoS: 비정상적으로 높은 요청 수
WAF 옵션 비교
Cloudflare WAF (무료/유료)
DNS를 Cloudflare로 옮기면 무료 플랜에서도 기본 WAF 기능을 사용할 수 있다. OWASP Top 10 기반 규칙이 자동 적용된다. 설정이 간단하고 관리 부담이 거의 없다는 게 가장 큰 장점이다.
AWS WAF
AWS CloudFront나 ALB 앞에 붙이는 방식. 규칙을 직접 정의하거나 AWS Managed Rules를 구독해서 사용한다. 유연하지만 설정이 복잡하고 비용이 발생한다.
ModSecurity (오픈소스, 무료)
Nginx/Apache에 모듈로 추가하는 오픈소스 WAF. OWASP CRS(Core Rule Set)와 함께 사용한다. 무료지만 설정과 유지보수에 시간이 든다.
# Ubuntu에서 ModSecurity + Nginx 설치
sudo apt install libnginx-mod-security2 -y
# /etc/nginx/nginx.conf에 추가
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
WAF만으로 충분할까?
WAF는 알려진 공격 패턴을 막는 데 효과적이다. 하지만 비즈니스 로직 취약점(IDOR, 인증 우회 등)은 WAF가 잡지 못한다. 인증 없는 API 엔드포인트에 SQLi 없이 그냥 GET 요청만 해도 데이터를 가져올 수 있는 경우, WAF는 아무것도 차단하지 않는다.
WAF는 방어의 여러 레이어 중 하나다. 애플리케이션 코드의 보안, 인증/인가 설계, 보안 헤더 설정과 함께 사용해야 의미가 있다.
내 서버에 WAF가 동작 중인지는 CodeScan의 WAF 탐지 항목에서 확인할 수 있다.