메뉴 건너뛰기

조회 수 8912 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Apache Mod_Security 사용방법

Mod Security 는 Apache 용 웹 방화벽이다. 
가장 널리 알려져 있는 HTTP,HTTPS를 이용한 공격을 차단 할 수 있는 웹 방화벽이다. 공격의 종류는 XSS, SQL Injection, Command Execute 등을 차단하여 웹 보안에 있어서 최소한(?) 의 보안을 해주는 Apache 모듈이다. 

준비물 
ModSecurity
사이트 : http://www.modsecurity.org/
다운로드 : http://www.modsecurity.org/download/modsecurity-apache_2.5.9.tar.gz

*PCRE  Perl Compatible Regular Expressions 
사이트 : http://www.pcre.org/
다운로드 : ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

우선 Apache가 설치가 되어 있어야 한다. Apache 의 apr, apu를 사용하기 위함이다. 그리고 현재 설치하려는 시스템에 PCRE 라이블러리가 설치가 되어 있는지 확인을 한다. 설치가 안되어 있다면 PCRE 를 다운로드 받아서 컴파일 해준다. *

ModSecurity 를 적당한 디렉토리(/usr/local/src) 에 다운로드 받는다. 
(편의상 root로 진행)
tar zxvf modsecurity-apache_2.5.9.tar.gz
cd modsecurity-apache_2.5.9/apache2
./configure \
   --with-apxs=/usr/local/apache/bin/apxs \
   --with-pcre=/usr/local/pcre \ (PCRE 를 컴파일 했을때)
   --with-apr=/usr/local/apache/bin/apr-1-config \   --with-apu=/usr/local/apache/bin/apu-1-config 
# make

make test 하니 안되는데 
make CFLAGS=-DMSC_TEST test 


make install 
* 위 부분에서 --with-pcre 는 pcrelib 를 찾지 못한다는 메세지가 출력되고 PCRE라이블러리를 직접 컴파이르 했을 때 경로를 지정해 주는것이다. 그리고 위 예제는 Apache 2.2.x 를 기준이다. 

위 과정을 하고 나서 httpd.conf 를 편집을 한다. 
LoadModule security2_module    modules/mod_security2.so

ModSecurity 의 룰은 한국정보보호진흥원에서 배포를 한다. 
사이트 : http://www.securenet.or.kr/
위 사이트에 공개웹방화벽 커뮤니티 - 자료실 에 들어가서 최신 버전의 ModSecurity 용 차단 샘플툴을 다운로드 받아 필요한 부분을 편집을 해서 사용하면 된다. 기본적으로 deny가 아닌 pass로 되어 있기 때문에 필요한 부분을 수정후 동작을 시키면 된다.  여기서 주의 할점은 배포가 되는 차단룰이 모든 서버에 완벽히 동작하는 것은 아니고 각 서버마다 필요한 것을 수정/추가 하면 된다. 

위 룰을 httpd.conf 에서 Include 를 이용해 경로를 지정해 주면 동작을 하게 된다. 

룰 설정에 대해서는 추후 작성을 하겠다. 

*PCRE 설치 방법
PCRE 라이블러리를 적당한 디렉토리(/usr/local/src)에 다운로드 받는다. 

# tar zxvf pcre-7.9.tar.gz
./configure 
make
make install
ldconfig 

위 과정을 진행해주면 기본 디렉토리인 /usr/local 에 라이블러리가 설치가 된다. 펄 호환 정규표현식을 지원해 주는 라이블러리로 Mod Security 에서 정규식으로 차단룰을 설정하는데 사용된다. yum 이나 apt-get 등으로 설치를 해도 무방하다.

 

공개 웹방화벽이라 한번 사용해보고 싶긴한데 웹서버마다 설치해야되는건지.. 흠..

■ 기본 환경설정 및 지시자(mod_seruciry.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 /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 상태코드의 값을 설정한다.

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

) 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:2REQUESET_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

 

======================================================================================

 


ModSecurity가 제대로 동작되고 있는지 확인하는 방법은?

# curl --head localhost

 

그러면 Server 항목에 ModSecurity에서 정의한 Server Siganature값인

Microsoft-IIS 등으로 바뀌어 나타나면 정상 작동하고 있는것 입니다.

 

※ 바뀌지 않는다면 httpd.conf 에서 ServerTokens 값이 Full인지 확인하세요.

 

 

 

ModSecurity Log 연도,일별로 설정 - cronolog 활용

ModSecurity는 SecAuditLogType, SecAuditLogStorageDir 이 두가지 옵션으로 로그파일을 분할할 수 있습니다. 그러나 이 옵션을 이용하여 로그를 관리하실 경우 초(sec)단위로 상세하게 나뉘어지다 보니 도리어 관리상 문제점이 발생하게 됩니다. Cronolog 라는 프로그램은 자신이 관리하고 싶은 날짜나 시간형태별로 로그를 관리할 수 있습니다. 설치방법은 아래와 같습니다.

 

    1. 바이너리를 다운받습니다.
     http://cronolog.org/download/cronolog-1.6.2.tar.gz

 

    2. 압축을 해제하고 설치합니다.
      # tar xzvf cronolog-1.6.2.tar.gz
      # configure && make && make install
     - /usr/local/sbin/ 에 설치가 됨.

 

    
3. ModSecurity의 설정파일에 로그파일 경로를 아래와 같이 수정합니다.


      SecAuditLog "|/usr/local/sbin/cronolog /로그경로/%Y%m%d.log"

      - 로그경로는 Full Path여야 합니다.

List of Articles
번호 제목 날짜 조회 수
176 백업받기 2016.09.12 8010
175 리눅스... 디스크 가득 찼을 때 2016.09.12 7937
174 리눅스 yum 명령어 2016.09.11 7993
173 PHPIZE를 이용한 openSSL PHP 확장 모듈 설치 2016.09.11 8063
172 우분투(리눅스) 설치 USB 만들기 2016.08.10 8337
171 우분투(리눅스) 설치 USB 만들기 file 2016.08.10 8603
170 리눅스 SSH 로그인 점검 2016.07.26 9145
169 리눅스/날짜 시간 바꾸기 2016.07.22 7740
168 리눅스/RAID 설정하기 2 2016.07.22 7645
167 리눅스/RAID 설정하기 1 2016.07.22 8473
166 Root Disk를 Mirroring하는 방법 2016.07.22 8407
165 인코딩 깨진한글파일 삭제 방법 file 2016.07.22 8953
164 아파치(apache) 한글 URL 인식 모듈 설치 file 2016.07.22 9123
163 아파치(apache) 한글 URL 인식 모듈 설치 file 2016.07.22 9435
162 아파치(apache) 한글 URL 인식 모듈 설치 file 2016.07.22 8429
161 아파치 한글파일 인식설정 file 2016.07.22 8622
160 리눅스 읽기전용 파일시스템 / 파일 입/출력 오류 2016.07.22 12175
159 bind , 네임서버 구축 ( CentOS 6.x) file 2016.04.22 7084
158 Nikto - 웹 취약점 스캐너 도구 file 2016.04.22 9232
» Apache Mod_Security 사용방법 2016.04.22 8912
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved