FREEDOM. FRIENDS. FEATURES. FIRST. 페도라 한국 사용자 모임

[Tip]웹 방화벽 Mod_Security2의 설치와 활용

게시판 Tech/Tip [Tip]웹 방화벽 Mod_Security2의 설치와 활용

  • This topic has 0개 답변, 1명 참여, and was last updated 10 years, 7 months 전에 by 난해주님. This post has been viewed 4900 times
  • #12234
    난해주님
    참가자
      게시글114 댓글334 총합448
    @workman729
     

    음...! 이번에 후배 한 녀석이 SQL 인젝션 공격에 의한 피해를 입었나 봅니다.

    아마도 Kisa에서 배포하고 있는 mod_security 룰셋을 이용하고 있었다고 합니다만
    사실 룰셋을 신뢰성을 의심할 수 있는 여지가 많은 데 후배의 요청도 있고 해서 Mod_Security에 대한 팁을 적어 봅니다.

    저는 개인적으로 서버와 관련해서는 컴파일한 버전을 선호하므로 이에 기반해서 설명해 드리고자 합니다.
    소스 파일과 룰셋 파일은 아래 링크를 참조해서 다운 받으시기 바랍니다.

    소스 파일: http://www.modsecurity.org/download.html
    룰셋 파일: https://github.com/SpiderLabs/owasp-modsecurity-crs

    일단 컴파일 전에 아파치의 컴파일 하실 때 "--enable-uniq-id"와 "--enable-mods-shared=all" 옵션을 주셔서 설치하셔야 함을 유념하시기 바랍니다.

    ## Mod Security2의 컴파일 설치 ###

    컴파일에 필요한 추가적인 라이브러리로 libapr-devel, libapr-util-devel, libpcre-devel, libxml2-devel,  liblua5.1-devel, libcurl-devel 등이 필요합니다. lua는 반드시 5.1 버전으로 설치하시기 바랍니다.(5.2는 지원되지 않음)

    설치 후 다음의 옵션으로 컴파일 하시기 바랍니다. (각각의 라이브러리를 모두 컴파일 설치하셨다면 경로를 변경하시기 바랍니다.)

    # ./configure --with-apxs=/usr/local/apache/bin/apxs --with-pcre=/usr/bin/pcre-config --with-apr=/usr/bin/apr-1-config --with-apu=/usr/bin/apu-1-config

    이후 make, make install 하시면 설치가 완료 됩니다.

    ### Mod Security2의 OWASP 룰셋의 설치 ###

    위의 링크에서 룰셋 파일을 다음과 같이 다운로드 합니다.
    # cd /usr/local/apache/conf
    # sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs
    # sudo mv owasp-modsecurity-crs/ crs/
    # cd crs/
    # sudo mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

    설정 파일을 열어서 다음과 같이 기본 설정하시고 로그 설정등을 추가하시기 바랍니다.

    # sudo vi modsecurity_crs_10_setup.conf
    SecRuleEngine On
    SecRequestBodyAccess On
    SecResponseBodyAccess On
    SecStatusEngine On
    SecResponseBodyMimeType (null) text/html text/plain text/xml
    SecResponseBodyLimit 524288
    SecRequestBodyLimit 13107200
    SecRequestBodyNoFilesLimit 131072
    SecAuditEngine RelevantOnly
    SecAuditLogType Serial
    SecAuditLogParts ABCFHZ
    SecAuditLogType concurrent
    SecAuditLogStorageDir /usr/local/apache/logs/audit_log
    SecAuditLog /usr/local/apache/logs/audit_log/modsec_audit.log
    SecAuditLogRelevantStatus ^(?:5|4(?!04))
    SecArgumentSeparator "&"
    SecCookieFormat 0
    SecDataDir /tmp
    SecTmpDir /tmp
    SecUploadDir /tmp
    SecUploadKeepFiles Off
    SecDebugLog /usr/local/apache/logs/debug_log/modsec-debug.log
    SecDebugLogLevel 3
    SecAuditLogDirMode 0777
    SecAuditLogFileMode 0777
    SecPcreMatchLimit 50000
    SecPcreMatchLimitRecursion 50000
    ~~~ 중략 ~~~
    SecDefaultAction "phase:2,log,auditlog,deny,status:403,tag:'SLA 24/7'"

    SecDefaultAction 설정에 유의 하시기 바라며, KISA에서 배포하는 룰셋의 설정과는 차이가 있으며 이 룰셋은 최신 버전에선 에러가 발생함을 주의하시기 바랍니다.

    위의 셋팅 옵션의 자세한 설정과 설명은 아래 링크된 매뉴얼을 참조하시기 바랍니다.
    메뉴얼: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual

    저장 후 터미널에서 아래와 같이 룰셋을 설치합니다.

    # for f in `ls base_rules/` ; do sudo ln -s /usr/local/apache/conf/crs/base_rules/$f activated_rules/$f ; done
    # for f in `ls optional_rules/ | grep comment_spam` ; do sudo ln -s /usr/local/apache/conf/crs/optional_rules/$f activated_rules/$f ; done
    # ls -l activated_rules

    ### 아파치 설정과 모듈 설정 ###

    모듈과 방화벽 운영에 필요한 기본적인 설정을 아래와 같이 해 주시면 됩니다.

    # sudo vi httpd.conf
    LoadModule xml2enc_module modules/mod_xml2enc.so (주석 제거, 순서에 주의)
    LoadModule unique_id_module modules/mod_unique_id.so (주석 제거)
    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>

    위의 내용이 기본적인 설정 내용입니다만 phpMyAdmin을 이용하는 경우 방화벽에 의해 차단될 수 있으므로  phpMyAdmin의 경로를 지정하여 SecRuleEngine 아래와 같이 해제해 주시면 이상 없이 사용 가능합니다. (방법은 여러 가지 입니다만 .htacces 설정 하기도 귀찮아서 user-dir 옵션을 이용하여 저는 일괄적으로 처리 합니다만 설치 방법에 따라 달라질 수 있으므로 경로를 변경해 주시면 됩니다.)

    <Directory /home/*/public_html/phpMyAdmin>
        SecRuleEngine Off
    </Directory>

    저장 후 방화벽 로그를 기록하기 위해 logs 디렉토리에 아래와 같이 설정합니다. (보통 개인적인 선호도에 따라 로그의 활용 방법도 달라질 수 있으므로 꼭 똑같이 설정하실 필요는 없습니다.)

    # cd /usr/local/apache/logs
    # sudo mkdir debug_log
    # sudo mkdir audit_log
    # sudo chown -R nobody:nobody audit_log/
    # sudo chmod 777 audit_log/

    참고로 auditlog는 사고 발생시 매우 유용하므로 꼭 설정하시기 바랍니다.
    위의 소유자와 그릅은 httpd.conf의 설정을 그대로 참조하시면 됩니다.

    이상으로 기본적인 설치와 설정은 완료되었으며 아파치를 다시 시작해 주시면 방화벽이 동작합니다.
    추가적인 룰셋이 필요하다면 구글링을 통해 개인적으로 공부해 보시기 바랍니다.

    # sudo /etc/init.d/httpd restart

    경험상으로 Mod_Security2가 KISA에서 배포하는 Whistl 보다는 안정적이며 속도와 보안에서 보다 더 안정적인 것 같습니다.
    또한 OWASP의 공개 룰셋은 추가적인 룰셋 설정이 필요 없을 정도로 다양하고 휼륭합니다.
    물론 개인의 선호도에 따라 달라질 수 있겠지만 말입니다.

    참고로 KISA에서 배포한 룰셋만 적용하신 서버 관리자가 있다면 나중에 후회하지 마시고 OWASP의 공개 룰셋을 적극 활용하시기를 추천합니다.

  • 답변은 로그인 후 가능합니다.

지금 이 순간


축하합니다. 현호님~
페도라16에서 리듬박스/VLC가 실행이 안됩니다~~
Fedora Linux 14 버전이 릴리즈 되었습니다.
[tip-tech] 페도라 php 설치를 위한 remi 저장소 설치와 적용
가입 인사
가입인사합니다
한국레드햇과 함게 하는 오픈 소스 소프트웨어 소개글 공모전
커뮤니티 유저분들의 ps 사용 패턴 질문입니다.
윈7 페도라12 멀티부팅질문이요
Ubuntu 쓰다가 넘어왔는데...단축키 변경 질문드립니다.