Apache에서 HTTP Method 차단 테스트 시 반드시 확인해야 할 사항

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 등)
 

보안 점검 대상은 다음과 같습니다.

Method허용 여부
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]
 

판단 기준

요청Access Log 기록테스트 헤더 존재Apache 응답 여부
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가지를 함께 확인해야 합니다.

  1. Access Log 기록 여부
  2. 테스트 응답 헤더 존재 여부
  3. 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 정책까지 함께 점검하는 것이 중요합니다.