Apache에서 HTTP Method(GET, POST, PUT, DELETE, PATCH, TRACE, OPTIONS) 차단 여부를 점검할 때 단순 응답 코드만 확인하면 오판할 수 있습니다. Apache 로그, 응답 헤더, WAF 및 L4/L7 장비까지 함께 확인하는 방법을 정리합니다.

Apache에서 HTTP Method 차단 테스트 시 반드시 확인해야 할 사항
보안 점검 과정에서는 GET, POST 외의 HTTP Method(PUT, DELETE, PATCH, TRACE, OPTIONS)가 차단되는지 확인하는 경우가 많습니다.
하지만 단순히 curl 명령으로 응답 코드만 확인하면 실제 차단 여부를 잘못 판단할 수 있습니다.
특히 Apache 앞단에 WAF(Web Application Firewall), L4, L7 Load Balancer, F5 같은 보안 장비가 존재하는 환경에서는 Apache가 아닌 앞단 장비가 응답할 수 있기 때문입니다.
이번 글에서는 Apache에서 HTTP Method 차단 설정을 적용한 후 실제로 요청이 Apache까지 도달하는지 확인하는 방법을 정리해보겠습니다.
테스트 환경
구성은 일반적인 운영 환경을 가정합니다.
Client
↓
WAF / L4 / L7
↓
Apache
↓
WAS(Tomcat, JEUS 등)
보안 점검 대상은 다음과 같습니다.
| GET | 허용 |
| POST | 허용 |
| HEAD | 허용 |
| PUT | 차단 |
| DELETE | 차단 |
| PATCH | 차단 |
| TRACE | 차단 |
| OPTIONS | 차단 |
Apache HTTP Method 차단 설정
VirtualHost 설정에 다음 내용을 추가합니다.
Header always set X-Test "BLOCK_TEST"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule ^ - [R=405,L]
TraceEnable off
설정 적용 후 문법 검사를 진행합니다.
sudo apachectl configtest
정상이라면 Apache를 Reload 합니다.
sudo systemctl reload httpd
Apache 설정이 실제 적용되었는지 확인하기
먼저 Apache 설정이 반영되었는지 확인해야 합니다.
테스트
curl -I https://example.com/
예상 결과
HTTP/1.1 200 OK
Server: Apache
X-Test: BLOCK_TEST
확인 포인트
응답 헤더에 추가한 테스트 헤더가 포함되어 있어야 합니다.
X-Test: BLOCK_TEST
해당 헤더가 보인다면 현재 요청은 Apache를 통과한 것으로 볼 수 있습니다.
GET 요청 테스트
GET 요청을 전송합니다.
curl -v -X GET https://example.com/
정상적인 경우 웹 페이지가 반환됩니다.
동시에 Apache Access Log를 확인합니다.
tail -f /var/log/httpd/access_log
결과
GET 요청 로그 확인
결론
GET 요청은 Apache까지 정상적으로 전달되고 있습니다.
DELETE 요청 테스트
이번에는 DELETE 요청을 전송합니다.
curl -v -X DELETE https://example.com/
예상했던 결과는 다음과 같습니다.
HTTP/1.1 405 Method Not Allowed
하지만 실제 운영 환경에서는 아래처럼 응답할 수 있습니다.
HTTP/1.1 200 OK
문제는 Apache 로그에는 아무 기록도 남지 않는다는 점입니다.
또한 응답 헤더에 설정했던 테스트 헤더도 없습니다.
X-Test: BLOCK_TEST
왜 이런 현상이 발생할까?
많은 운영 환경에서는 Apache 앞에 별도의 보안 장비가 존재합니다.
예를 들어 다음과 같은 구조입니다.
Client
↓
WAF
↓
Apache
↓
Application
GET 요청의 흐름은 다음과 같습니다.
Client
↓
Apache
↓
Application
↓
Response
하지만 DELETE 요청은 아래처럼 동작할 수 있습니다.
Client
↓
WAF
↓
Response
즉 Apache까지 도달하기 전에 WAF가 요청을 처리해버리는 것입니다.
응답 코드만 보고 판단하면 안 되는 이유
많은 보안 점검에서 아래와 같이 확인합니다.
curl -I -X DELETE https://example.com/
결과
HTTP/1.1 200 OK
이 경우 흔히 다음과 같이 오해할 수 있습니다.
"DELETE Method가 허용되어 있다."
하지만 실제로는 전혀 다른 상황일 수 있습니다.
가능한 시나리오
- Apache까지 요청이 도달하지 않음
- WAF가 자체 응답 반환
- L7 Load Balancer가 응답 처리
- F5 정책에 의해 차단
- 보안 장비가 정상 페이지 반환
즉 응답 코드만으로는 실제 활성화 여부를 판단할 수 없습니다.
반드시 함께 확인해야 하는 항목
1. Apache Access Log
tail -f /var/log/httpd/access_log
2. Apache Error Log
tail -f /var/log/httpd/error_log
3. 테스트용 응답 헤더
Header always set X-Test "BLOCK_TEST"
4. RewriteRule 동작 여부
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
RewriteRule ^ - [R=405,L]
판단 기준
| GET | O | O | O |
| POST | O | O | O |
| DELETE | X | X | X |
| PUT | X | X | X |
| PATCH | X | X | X |
DELETE 요청에서 로그가 기록되지 않고 테스트 헤더도 없다면 Apache가 응답한 것이 아닙니다.
실무에서 확인해야 할 장비
Apache 설정이 정상임에도 특정 Method가 예상과 다르게 동작한다면 아래 장비를 함께 점검해야 합니다.
| WAF | Method Filtering 정책 |
| F5 | HTTP Profile 설정 |
| L7 Load Balancer | URL 정책 |
| Reverse Proxy | Method 제한 설정 |
| CDN | 보안 정책 |
| API Gateway | Method 허용 정책 |
FAQ
Q. Apache RewriteRule이 있는데 왜 405가 나오지 않나요?
Apache까지 요청이 도달하지 않을 가능성이 높습니다.
WAF나 L7 장비가 먼저 응답하고 있을 수 있습니다.
Q. Access Log에 기록되지 않으면 Apache를 통과하지 않은 건가요?
대부분 그렇습니다.
특히 테스트 헤더도 함께 보이지 않는다면 Apache 이전 단계에서 처리된 것으로 볼 수 있습니다.
Q. 응답 코드가 200 OK인데 Method가 차단된 상태일 수도 있나요?
가능합니다.
앞단 장비가 자체적으로 정상 페이지를 반환할 수 있기 때문입니다.
Q. Method 차단 여부를 가장 정확하게 확인하는 방법은 무엇인가요?
다음 3가지를 함께 확인해야 합니다.
- Access Log 기록 여부
- 테스트 응답 헤더 존재 여부
- Apache RewriteRule 동작 여부
마무리
Apache에서 HTTP Method 차단 테스트를 수행할 때는 단순히 응답 코드만 확인해서는 안 됩니다.
특히 WAF, L4, L7, F5 같은 보안 장비가 존재하는 환경에서는 DELETE, PUT, PATCH 요청이 Apache까지 도달하지 않을 수 있습니다.
실무에서는 반드시 Access Log, Error Log, 테스트용 응답 헤더를 함께 확인해야 하며, 로그에 기록되지 않는다면 Apache가 아닌 앞단 보안 장비에서 요청을 처리하고 있을 가능성이 높습니다.
HTTP Method 차단 정책을 수정해야 하는 경우에도 Apache 설정만 확인하지 말고 WAF, Load Balancer, Reverse Proxy 정책까지 함께 점검하는 것이 중요합니다.
'서버 & 인프라' 카테고리의 다른 글
| GitLab Runner를 이용한 Spring Boot 자동 배포 구축하기 (AlmaLinux 9) (0) | 2026.06.05 |
|---|---|
| AlmaLinux 9에서 Spring Boot 서비스 등록 및 운영하기 (systemd + Apache Reverse Proxy) (0) | 2026.06.05 |
| DDNS란 무엇인가? 유동 IP 환경에서 꼭 필요한 이유와 활용 방법 (0) | 2026.06.04 |
| GitLab Runner SSH 비밀번호 없이 원격 서버 자동 배포 설정하기 (0) | 2026.06.04 |
| ipTIME 포트포워딩 설정 방법 (Ubuntu 서버 GitLab, Nexus, Apache 외부 접속하기) (0) | 2026.06.03 |
