Apache2.2 - 웹방화벽 - ModSecurity 설치 및 설정

Share

Last Updated on 3월 7, 2024 by Jade(정현호)

안녕하세요 
이번 포스팅은 Apache 2.2 버전에서 ModSecurity 2.8 버전 설치에 대해서 확인해 보도록 하겠습니다.

포스팅 사용 버전 정보

ModSecurity: v2.8
Apache(아파치):  버전 2.2.24 (설치 위치  /usr/local/apache2.2)

다른 버전으로 구성된 내용은 아래 글을 참조하시면 됩니다.
 • Apache 2.4 에 ModSecurity 3.0.x 버전 설치
 • Nginx 에 ModSecurity 3.0.x 버전 설치
              

ModSecurity 다운로드 및 설치

Apache 용 ModSecurity 소스코드 다운로드 및 컴파일 설치를 진행하도록 하겠습니다.
         

파일 다운로드

파일은 아래 링크에서 다운로드 받으시면 됩니다.

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

                  

필요 패키지 설치

yum -y install pcre-devel.x86_64
yum -y install apr-util-devel

그외 필요한 패키지 및 설치 정보는 아래 링크에서 확인합니다.
github.com/SpiderLabs/Modsecurity
               

Source Compile 설치

tar zxvf modsecurity-2.8.0.tar.gz
cd modsecurity-2.8.0
./configure  --with-apxs=/usr/local/apache2.2/bin/apxs
make
make install

설치가 완료되었다면 그 다음에는 CoreRuleSet 을 다운로드 받으시면 됩니다
               

CoreRuleSet

ModSecurity 에서 사용할 RuleSet 을 다운로드 및 설정하도록 하겠습니다.
       

Rule 다운로드

아래 경로에서 파일을 다운 로드 받습니다.

www.owasp.org

                               

RuleSet 설정

다운로드 받은 룰셋을 아래와 같이 적용합니다.

unzip SpiderLabs-owasp-modsecurity-crs-2.2.9-5-gebe8790.zip
mv SpiderLabs-owasp-modsecurity-crs-ebe8790  /usr/local/apache2.2/conf/crs

cd  /usr/local/apache2.2/conf/crs
cp  modsecurity_crs_10_setup.conf.example  modsecurity_crs_10_setup.conf

ln -s /usr/local/apache2.2/conf/crs/modsecurity_crs_10_setup.conf \
activated_rules/modsecurity_crs_10_setup.conf



##아래 명령어는 한줄로 입력
for f in `ls base_rules/` ; do  ln -s /usr/local/apache2.2/conf/crs/base_rules/$f activated_rules/$f ; done

for f in `ls optional_rules/ | grep comment_spam` ; do  ln -s /usr/local/apache2.2/conf/crs/optional_rules/$f activated_rules/$f ; done

                       

httpd.conf

이번에는 apache 의 httpd.conf 설정 파일에 내용을 추가나 수정을 진행해야 합니다

httpd.conf 에 아래 내용 추가합니다.

LoadModule security2_module modules/mod_security2.so
<IfModule security2_module>
#                Include conf/crs/modsecurity_crs_10_setup.conf
                 Include conf/crs/activated_rules/*.conf
</IfModule>



주석되어 있는 mod_unique_id.so 는 주석을 해제합니다.


# LoadModule unique_id_module modules/mod_unique_id.so

to


LoadModule unique_id_module modules/mod_unique_id.so



modsecurity_crs_10_setup.conf  에서 아래 내역을 변경해야 합니다. 아래 처럼 auditlog 를 추가합니다.
(아래 기본 환경설정 및 지시자 의 2번 을 참조)

원본

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 /usr/local/apache2.2/logs/modsec_audit.log
SecAuditLogParts ABCFHZ
SecDataDir /tmp
                   

아파치 재기동

모든 설정이 완료되었다면 아파치를 재시작 합니다.

Linux 6
service httpd restart

Linux 7
systemctl restart httpd

아파치 기동 후 정상적으로 로그가 기록되는지, 차단되는지를 확인합니다.
           

환경설정 및 기본지시자

위의 본문 내용 이외 환경 설정 정보 및 기본지시자에 대한 추가 정보입니다.

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 /usr/local/apache2/logs/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


연관된 다른 글

 



0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x