웹 방화벽 Apache mod_security 모듈 설치하기

웹 방화벽 Apache mod_security 모듈 설치

1.mod_security 모듈의 개요

mod_security 모듈은 가장 널리 알려저 있는 웹 서비스의 공격을 효과적으로 차단할 수 있는 공개 웹 방화벽 이다

Apache 모든 버전에서 적용하여 설치,적용이 가능하다

2.설치를 위한 파일 준비

-설치환경 : CentOS6. 7

-mod_security

*사이트 주소 : http://www.modsecurity.org/

*파일위치 : https://www.modsecurity.org/tarball/2.9.3/modsecurity-2.9.3.tar.gz

3.설치를 위한 조건사항

mod_security모듈을 설치하기 위해서 먼저, Apache데몬이 서버에 설치되어 있어야 함

1)다운로드 및 설치

https://www.modsecurity.org/download.html

▶ Mod_security 설치

mkdir pkg

cd pkg

wget https://www.modsecurity.org/tarball/2.9.3/modsecurity-2.9.3.tar.gz

tar xzfv modsecurity-2.9.3.tar.gz

cd modsecurity-2.9.3

./configure

make && make install

cp modsecurity.conf-recommended /etc/httpd/conf.d/mod_security.conf

cp unicode.mapping  /etc/httpd/conf.d/

▶ httpd.conf에 해당 모듈 추가

vi /etc/httpd/conf/httpd.conf 맨아래 추가

<IfModule security2_module>
Include conf.d/mod_security.conf
Include conf.d/mod_evasive.conf
Include modsecurity.d/modsecurity_crs_10_config.conf
Include modsecurity.d/activated_rules/*.conf
</IfModule>

참고 작동안함

 /etc/httpd/conf.modules.d/10-mod_security.conf            파일 확인후  없으면 작성. 있으면 파일 추가

<IfModule !mod_unique_id.c>
LoadModule security2_module modules/mod_security2.so
LoadModule unique_id_module modules/mod_unique_id.so
</IfModule>

▶ 아파치 재시작

systemctl restart httpd && systemctl restart php-fpm

▶ 룰셋 다운로드및 적용

cd /etc/httpd/

git clone https://github.com/spiderLabs/owasp-modsecurity-crs.git

mv owasp-modsecurity-crs modsecurity-crs

cd modsecurity-crs

cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_config.conf

▶ httpd.conf에 해당 모듈 추가

vi  /etc/httpd/conf/httpd.conf 위에 추가된 경우 확인함.

IncIude modsecurity-crs/modsecurity_crs_10_config.conf

IncIude modsecurity-crs/base_rules/*.conf

▶ modsecurity_crs_10_config.conf  에서 아래 내역을 변경한다, 아래 처럼 auditlog 를 추가

원본

SecDefaultAction “phase:1,deny,log”

SecDefaultAction “phase:2,deny,log”

수정내역

SecDefaultAction “phase:1,deny,log,auditlog”

SecDefaultAction “phase:2,deny,log,auditlog”

아래 4개 옵션을 넣어준다.

SecRuleEngine On

SecAuditEngine On

SecAuditLog /var/log/modsec_audit.log

SecAuditLogParts ABCFHZ

SecDataDir /tmp

[추가 정보 ] 기본 환경설정 및 지시자(mod_security.conf)

1) SecRuleEngine On | Off | DetectionOnly

ModSecurity 기능을 활성화(enable) 시킨다.

o On : ModSecurity 기능 활성화

o Off : ModSecurity 기능 비활성화

o DetectionOnly : 활성화는 하지만 차단하지 않고 탐지만 한다.

2) SecAuditEngine On | Off | RelevantOnly

감사 로깅에 대한 설정을 구성한다.

o On : 모든 트랜젝션 로깅

o Off : 모든 트랜젝션 로깅하지 않음

o RelevantOnly : Error 또는, Warning 의 트랜젝션, 그리고 SecAuditLogRelevantStatus에 정의

된 상태코드와 일치하는 트랜젝션만 로깅

3) SecAuditLog logs/modsec_audit.log

감사 로그 파일의 경로를 정의한다.

예) SecAuditLog /var/log/modsec_audit.log

4) SecAuditLogParts

로그 파일에 기록할 항목을 정의한다.   예) SecAuditLogParts ABCFHZ

         A audit log header (필수)

       B request header 

       C request body (request body가 존재하고 modsecurity가 request body를 검사하도록 설정되어 있는 경우에만)

       D 보류중, response header의 중개 (현재 지원 안 됨)

  E response body 중간 단계(현재 modsecurity가 response body를 검사하며 감사로깅 엔진이

               이를 저장하게끔 설정되어 있는 경우에만)

         F 최종 response header

           (마지막 컨텐츠 전달 과정에서 아파치에 의해 매번 추가 되는 날짜와 서버 헤더를 제외한)

       G 실제 response body(현재 지원 안됨)

         H 감사 로그 트레일러

       I  이 옵션은 C를 대체하는 옵션이다. multipart/form-data 인코딩이 사용되었을때를 제외한 

             모든 경우엔 C와 같은 데이터를 기록한다. 

        J 보류중, multipart/form-data 인코딩을 사용하는 파일 업로드에 대한 정보를 포함할 때 효과가 있다. 

        Z 로그의 끝을 의미한다. (필수)

5) SecAuditLogRelevantStatus REGEX]

감사로깅의 목적과 관련된 response 상태코드의 값을 설정한다.

o 매개변수에는 정규표현식이 들어간다.

예) SecAuditLogRelevantStatus ^[45]

6) SecAuditLogType Serial | Concurrent

감사로깅 구조의 타입을 설정한다.

o Serial – 모든 로그는 메인 로그파일에 저장된다. 일시적으로 편리할 순 있지만 

하나의 파일에만 기록되기 때문에 느려질 수 있다.

o Concurrent – 로그가 각 트랜잭션 별로 나누어 저장된다.

이 방식은 로그파일을 원격 ModSecurity Console host로 보낼 때 사용하는 방식이다.

7) SecDefaultAction “log, auditlog, deny, status:403, phase:2, t:lowercase”

룰이 매칭되면 기본적으로 취할 행동을 정의한다 룰이 특정 액션들에 대한 개별 룰을

적용하거나 다른 SecDefaultAction이 정의되어있지 않다면 최초 지정된 SecDefaultAction의 설정을 따른다.

위의 예는 룰이 매칭 되었을 때 차단하며 로그를 남기고, 403 상태코드 페이페이지를 보여주며 필터링 단계는 “2”이다. 

기본적으로 대문자는 모두 소문자로 바뀌어 필터링 된다.

 8) SecRequestBodyAccess On | Off

Request 값에서 Body 부분에 대한 처리를 어떻게 할 것인지 구성한다.

o On : RequestBody 접근을 시도한다.

o Off : RequestBody 접근시도를 하지 않는다.

이 지시자는 Request 값에서의 POST_PAYLOAD를 검사할 때 필요하다. POST값을 필터링하기 위해서는 

phase:2와 REQUESET_BODY 변수/로케이션, 3가지가 모두 구성되어야만 처리가 가능

9) SecReponseBodyAccess On | Off

Response 값에서 Body 부분에 대한 처리를 어떻게 할 것인지 구성한다.

o On : ResponseBody 접근을 시도한다. (그러나 MIME 타입과 일치해야만 한다.)

o Off : ResponseBody 접근시도를 하지 않는다.

이 지시자는 html 응답을 조사하기 위해 필요하다. “phase:4″의 처리 단계와 RESPONSE_BODY 변수/로케이션, 

3가지가 설정되어 있지 않으면, response body를 검사할 수 없다.

 10) SecResponseBodyLimit

ModSecurity가 Response Body 크기로 할당할 수 있는 메모리 최대 크기를 설정한다.

o SecRequestBodyLimit 524228

이 값을 넘어가면 서버는 500 내부 서버 오류 메시지만 표시할 것이다.

11) SecReponseBodyMimeType mime/type

Response 값에서 Body 값을 버퍼링할 MIME 타입을 설정한다.

o SecResponseBodyMimeType text/plain text/html // 기본값

Mime 타입은 복수로 추가할 수 있다.

12) SecReponseBodyMimeTypesClear

ResponseBody의 버퍼링을 위해 Mime 타입의 목록을 지우며, 처음에 위치시킨다.

o SecResponseBodyMimeType

▶ 아파치 재시작

/usr/local/apache/bin/apachectl restart

▶ 로그 확인

vi /usr/local/apache/logs/modsec_audit.log

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다