Linux WEB

ModSecurity 설치 해보기

2008.09.11 01:04

sylee 조회 수:37908

[ModSecurity 설치]

- ModSecurity 프로그램 다운로드

설치하고자 하는 안정화 버전인 1.9.2는 다음 사이트에서 다운로드 받을 수 있다.
http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz

다운로드 받은 후 다음의 명령으로 압축 및 패키징을 해제한다.
# cd /usr/local/src/
# wget http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz
# tar xvfz modsecurity-apache-1.9.2.tar.gz
# cd modsecurity-apache-1.9.2

여기서는 DSO 방식으로 설치를 한다.

DSO 방식은 아파치 웹서버의 재설치 과정없이 기존에 운영되고 있는 아파치 웹서버에 모듈을
동적으로 추가하는 방식이므로 기존에 아파치 웹서버를 이미 운영 중인 경우 DSO 방식을
선택하는 것을 권장한다.
DSO 방식으로 설치하는 것은 아파치 버전에 상관없이 다음과 같이 설치 할 수 있다.

(1) apxs를 이용하여 ModSecurity 모듈을 컴파일 및 설치하고, 설정을 자동으로 변경한다.

  # cd /usr/local/src/modsecurity-apache-1.9.2
  # /usr/local/apache2/bin/apxs -cia apache2/mod_security.c

  위의 명령은 mod_security.c를 컴파일 하고, 공유객체를 웹서버 modules 디렉토리에
  설치하고, 아파치 httpd.conf 설정파일에 적절한 LoadModule 줄을 추가한다.

  참고로 apxs는 아파치 웹서버의 확장모듈을 컴파일하고 설치하는 도구로써, 여러 소스와 오브
  젝트파일을 LoadModule 지시어로 실행 중인 아파치 서버로 읽어 들일 수 있는 동적공유객체(DSO)를 만든다.
  위의 결과로 modules 디렉토리에 mod_security.so가 생성되고 httpd.conf 파일에
  LoadModule security_module modules/mod_security.so  라인이 추가된다.

(2) 위의 과정으로 모듈이 정상적으로 설치되었는지 확인한다.
  [root:/usr/local/apache2]# ls -al modules
  -rwxr-xr-x    1 root     root       308333 Jul 19 11:28 mod_security.so


(3) 아파치 웹서버를 재구동한다.
  # /usr/local/apache2/bin/apachectl stop
  # /usr/local/apache2/bin/apachectl start


만약 /usr/local/apache2/conf/modsecurity.conf 라는 이름으로 ModSecurity 웹방화벽을 위한 환경
설정 파일을 별도로 만들었을 경우 httpd.conf 파일에 다음과 같이 이 파일을 포함시켜 줄 수 있다.

Include conf/modsecurity.conf


ModSecurity는 다양한 기능의 설정을 위해서 상당히 많은 지시자들이 존재하는데 이를 일일이 직접
 작성하여 적용하기는 쉽지 않을 것이다.
따라서 아래 ModSecurity 홈페이지에서 제공하는 Ruletemplate을 자신의 웹 환경에 맞게 커스트마이징 하는 것이
 보다 용이할 것이다.
http://www.modsecurity.org/projects/rules/index.html

이 사이트에는 기본적인 Rule과 함께 PHP 환경, 출력 필터 등 몇 가지 Rule template가 있으므로
이들을 참고해 보자.
 또는 본 고의 부록에 기본적인 Apache+PHP+MySQL 환경에 적합한 Rule 예를
제시하고 있으므로 이를 참고해 보기 바란다.
그리고 www.krcert.or.kr 사이트에서 웹방화벽 부분을 참고 바랍니다.


ModSecurity Rule 설정 예

##### Configuration #####
SecFilterEngine On
SecFilterScanPost On
SecFilterScanOutput Off
SecFilterOutputMimeTypes "(null) text/html text/plain"
##### Validation #####
SecFilterCheckURLEncoding On
SecUploadDir /tmp
SecUploadKeepFiles Off
SecFilterCheckUnicodeEncoding Off
SecFilterForceByteRange 1 255
SecFilterDefaultAction "log,deny,status:403"
##### Logging #####
SecFilterDebugLog logs/modsec_debug.log
SecFilterDebugLevel 1
SecAuditEngine RelevantOnly
SecAuditLog logs/modsec_audit.log
##### Hardening #####
# Body를 가진 GET 또는 HEAD 요청 차단(공격 가능성 높음)
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"
SecFilterSelective SERVER_PROTOCOL "!^HTTP/(0.9|1.0|1.1)$"
# Content-Length가 없는 POST 요청 차단
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
SecFilterSelective HTTP_Transfer-Encoding "!^$"
##### General #####
SecFilterSelective HTTP_Host|HTTP_User-Agent|HTTP_Accept "^$"
SecFilterSelective HTTP_User-Agent "(libwhisker|paros|wget|libwww|perl|curl|java)"
##### SQL Injection Attacks #####
SecFilterSignatureAction "log,deny,msg:'SQL Injection attack'"
SecFilterSelective ARGS "delete[[:space:]]+from"
SecFilterSelective ARGS "drop[[:space:]]+database"
SecFilterSelective ARGS "drop[[:space:]]+table"
SecFilterSelective ARGS "drop[[:space:]]+column"
SecFilterSelective ARGS "drop[[:space:]]+procedure"
SecFilterSelective ARGS "create[[:space:]]+table"
SecFilterSelective ARGS "update.+set.+="
SecFilterSelective ARGS "insert[[:space:]]+into.+values"
SecFilterSelective ARGS "select.+from"
SecFilterSelective ARGS "bulk[[:space:]]+insert"
SecFilterSelective ARGS "union.+select"
SecFilterSelective ARGS "or.+1[[:space:]]*=[[:space:]]1"
SecFilterSelective ARGS "alter[[:space:]]+table"
SecFilterSelective ARGS "or 1=1--'"
SecFilterSelective ARGS "'.+--"
SecFilterSelective ARGS "into[[:space:]]+outfile"
SecFilterSelective ARGS "load[[:space:]]+data
SecFilterSelective ARGS "/*.+*/"
##### XSS Attacks #####
SecFilterSignatureAction "log,deny,msg:'XSS attack'"
SecFilterSelective ARGS "<script"
SecFilterSelective ARGS "javascript:"
SecFilterSelective ARGS "vbscript:"
SecFilterSelective ARGS "document.cookie"
SecFilterSelective ARGS "document.location"
SecFilterSelective ARGS "document.write"
##### Command Execution #####
SecFilterSignatureAction "log,deny,msg:'Command execution attack'"
SecFilterSelective ARGS_VALUES ";[[:space:]]*(ls|id|pwd|wget)"
##### PHP Attacks #####
SecFilterSignatureAction "log,deny,msg:'PHP Injection Attacks'"
SecFilterSelective ARGS_VALUES "^http:/"
SecFilterSelective ARGS_NAMES "(^globals[|^globals$)"

번호 제목 글쓴이 날짜 조회 수
43 Apache / PHP 최신버전 설치하기 호스트웨이 2015.09.25 16496
42 CentOS 6.3 에 apache, php, mysql, phpmyAdmin(LAMP) 설치하기 #1 호스트웨이 2012.08.07 17343
41 ZendOptimizer 3.3.9 설치 file 호스트웨이 2012.06.01 17547
40 [php] 세션 유지시간 설정하기 호스트웨이 2012.10.25 17807
39 Zend Guard Loader 설치 호스트웨이 2012.04.20 17831
38 nginx - redirect 설정 호스트웨이 2012.08.24 17883
37 server-status를 이용한 아파치 모니터링 방법 file 호스트웨이 2016.04.05 18242
36 apache internal dummy connection 로그 생성 방지하기 호스트웨이 2012.09.06 18706
35 Apache Max Client 값 수정 호스트웨이 2012.08.31 19644
34 Debian 에서 mod_rewrite 활성화 하기 jook 2008.12.12 19806
33 mod_GeoIP를 이용한 국가 IP 확인 및 국가별 접속 제한 호스트웨이 2012.05.04 19949
32 apache1.3 + mod_ssl - 보안서버 구축하기 sylee 2008.05.15 20082
31 apache에서 cgi를 사용하기 위한 설정 방법 호스트웨이 2012.04.27 20147
30 Debian에서 apm 설치할때의 패키지 목록 jook 2008.12.27 20175
29 설치된 서버 php에서 지원되는 함수 확인 하기 hostway 2008.05.14 20204
28 Apache 설치 후 WEB 403 Forbidden 에러 호스트웨이 2015.09.08 20325
27 SSL 패스워드 삭제 하기 호스트웨이 2012.09.05 20691
26 httpd-2.x.x 에서의 SERVER_LIMIT 변경 hostway 2008.05.14 20922
25 아파치 환경설정 파일분석 1번째 sylee 2008.05.14 21377
24 apache2.x - 보안서버 구축하기 sylee 2008.05.15 22986