본문 바로가기

Linux

[Linux] ModSecurity 웹방화벽 설치

원인 : 운영중인 웹서버로 취약점을 이용한 공격 예를들어 스크립트 업로드 시도 후 url에 <srcipt> 실행 공격 등 다수의 시도가 발생 하였습니다.

 

에러 : 위처럼 웹 공격으로 인하여 부하가 발생하여, 서버가 제대로 동작하지 않았습니다

 

해결방법 : 웹 공격에 대한 방어와, 탐지를 위하여 찾아보던 중 무료 웹방화벽 프로그램인 modsecurity를 찾게되어 설치를 진행하였습니다. 물론 유료라이센스도 존재하지만 무료 라이센스로도 충분히 기본적이고 낮은 수준의 공격은 차단이 가능 합니다.

 

# cd /usr/local/src
# wget https://ko.osdn.net/frs/g_redir.php?m=kent&f=mod-security%2Fmodsecurity-apache%2F2.5.6%2Fmodsecurity-apache_2.5.6.tar.gz
 - 경로가 만료되었으면 구글에 modsecurity-apache_2.5.6.tar.gz를 검색하여 링크를 찾으면 됩니다
 
# tar xvzf modsecurity-apache_2.5.6.tar.gz
# cd modsecurity-apache_2.5.6

# ls
apache2  CHANGES  doc  LICENSE  modsecurity.conf-minimal  MODSECURITY_LICENSING_EXCEPTION  README.TXT  rules  tools

# cd apache2
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-httpd-src=/usr/local/src/httpd-2.2.4/ --with-libxml=/usr/\
 - apxs가 설치된 경로, httpd source 파일 위치 등등 컴파일에 필요한 옵션을 경로에 맞춰서 설정해 주면 됩니다.
 - apxs란 서버의 확장모듈을 컴파일하고 설치하는 도구 입니다
 
# make
# make install

# vi /usr/local/apache/conf/httpd.conf
LoadModule security2_module    modules/mod_security2.so
 - 설치한 모듈을 추가 합니다
 
##ModSecurity_Config
Include conf/mod_security2.conf
 - /usr/local/apache/conf 아래에 mod_security2.conf 파일을 만들어서 룰셋을 지정하여 주면 됩니다
 - 해당파일은 첨부 하겠습니다.

# /usr/local/apache/bin/apachectl -D DUMP_MODULES
 - 모듈이 정상적으로 설치되었는지 확인 합니다
 
mod_security2.conf 파일의 의미

#실행여부
# on, off, DetectionOnly(mornitoring)
SecRuleEngine On

#요청본문처리
SecRequestBodyAccess Off

#응답본문처리
SecResponseBodyAccess Off

#응답본문 mime type
SecResponseBodyMimeType (null) text/html text/plain text/xml

#기본액션 설정
#SecDefaultAction "pass,log,auditlog,phase:2,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"
#SecDefaultAction "deny,log,phase:2,status:406,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"
#SecDefaultAction "action1,action2,action3"
#SecDefaultAction "phase:1,log,auditlog,pass"
#SecDefaultAction "phase:2,log,auditlog,pass"
#SecDefaultAction "phase:1,log,auditlog,deny"
#SecDefaultAction "phase:2,log,auditlog,deny"
#SecDefaultAction "phase:1,log,auditlog,pass,status:403"
#SecDefaultAction "phase:2,log,auditlog,pass,status:403"
SecDefaultAction "phase:1,log,deny,auditlog,status:403"
SecDefaultAction "phase:2,log,deny,auditlog,status:403"

#로그설정
SecAuditEngine On
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus "^(?:5|4\d[^4])"
SecAuditLogType Serial
SecAuditLogParts "ABIFHZ"
SecAuditLog /usr/local/apache/logs/modsec_audit_log

#기본설정
SecServerSignature "Microsoft IIS 7.0"
 - 해당 부분은 서버에서 일부러 iis로 보이게 함으로써, apache 공격에 대비하는 의미에서 다르게 정보를 

#응답본문크기(now 512kb)
SecResponseBodyLimit 524288

#콜렉션시간초과(수집)
SecCollectionTimeout 600

 

테스트 

먼저 tail -f /usr/local/apache/logs/modsec_audit_log 로 로그를 살펴 봅니다

정상적으로 설치 후 예를들어 aaaa.com에 접속한다고 가정하면 

ex) aaaa.com/<script>attak</script> 이렇게 입력하게 되면 화면이 403 에러가 발생되면서 로그에 해당 공격을 감지하고 접근을 차단시키는 모습을 볼수가 있습니다

 

문의

ollllllloaa@icloud.com