Centos6 + Apache 2.2 + Mod Security 2.8 setting
yum -y install pcre-devel.x86_64
yum -y install apr-util-devel
tar zxvf modsecurity-2.8.0.tar.gz
cd modsecurity-2.8.0
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 에 아래 내용 추가
<IfModule security2_module>
# Include conf/crs/modsecurity_crs_10_setup.conf
Include conf/crs/activated_rules/*.conf
</IfModule>
[추가 정보 ] 기본 환경설정 및 지시자(mod_security.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
감사로깅의 목적과 관련된 response 상태코드의 값을 설정한다.
o 매개변수에는 정규표현식이 들어간다.
예) SecAuditLogRelevantStatus ^[45]
7) SecDefaultAction "log, auditlog, deny, status:403, phase:2, t:lowercase"
룰이 매칭되면 기본적으로 취할 행동을 정의한다 룰이 특정 액션들에 대한 개별 룰을
8) SecRequestBodyAccess On | Off
Request 값에서 Body 부분에 대한 처리를 어떻게 할 것인지 구성한다.
o On : RequestBody 접근을 시도한다.
o Off : RequestBody 접근시도를 하지 않는다.
9) SecReponseBodyAccess On | Off
Response 값에서 Body 부분에 대한 처리를 어떻게 할 것인지 구성한다.
o On : ResponseBody 접근을 시도한다. (그러나 MIME 타입과 일치해야만 한다.)
o Off : ResponseBody 접근시도를 하지 않는다.
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
setvar:tx.regression_testing=1, \nolog, pass"
기본적으로 mod_unique_id 모듈을 apache install 시 설치해야되나 빠져있다면
apache source를 다운받아서 해당 모듈만 복사한다.
# cd /usr/local/src
# wget http://mirror.apache-kr.org/httpd/httpd-2.2.27.tar.gz
# tar xvfz httpd-2.2.27.tar.gz
# cd httpd-2.2.27/modules/metadata
# /usr/local/apache/bin/apxs -cia mod_unique_id.c
# /etc/rc.d/init.d/httpd restart (/usr/local/apache/bin/apachectl restart)
2. 컴파일전 설치되어야할 라이브러리들이 다 설치되어 있는지 확인한다.
https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Installation_for_Apache
해당 사이트를 참고
3. 컴파일
# ./autogen.sh
#./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--with-libxml=/usr \
--with-apr=/usr/local/apache/bin/apr-1-config \
--with-apu=/usr/local/apache/bin/apu-1-config
./autogen.sh
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apu=/usr/local/apr-util/bin/apu-1-config --with-lua --with-pcre=/usr/local/bin/pcre-config
# make install
4. https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project 에서 최근 롤셋을 다운
INSTALL text 파일안 설명대로 설치
krcert.or.kr 에서 제공하는 룰셋은 오래전 룰셋이라 OWASP에서 제공하는 룰셋으로 셋팅한다.
5. httpd.conf 에 아래 내용 추가
LoadModule unique_id_module modules/mod_unique_id.so
LoadFile /usr/lib64/libxml2.so
LoadFile /usr/lib64/liblua-5.1.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>
6. crs/activated_rules 디렉토리의 modsecurity_crs_10_setup.conf 심볼릭 링크 삭제
httpd.conf 에 include되는 modsecurity_crs_10_setup.conf 파일을 아래 activated_rules/*.conf 으로 모든 파일을
불러오는데 modsecurity_crs_10_setup.conf이 2번 불려오게 되서 apache error_log에
ModSecurity: Found another rule with the same id 에러가 발생하게 된다.
Include conf/crs/activated_rules/*.conf 만 하던지 심볼릭 링크를 삭제하던지 2번 불려지지 않게 한다.
7. httpd restart
8. www.your-domain.com/?foo=/etc/passwd 해서 apache error_log에 ModSecurity: Access denied.....이런 메세지가 나오면
제대로 작동하는것이다.
9. 개발서버 IP로 접속이 안되면 modsecurity_crs_21_protocol_anomalies.conf 파일의 98번 라인을 주석처리하여 롤을
없앤다.
error_log를 보면 어떤 롤파일의 몇번째 롤 때문에 오류가 나는지 나오므로 그걸보고 하나씩 롤을 수정하면 된다.
The first issue to realize is that in ModSecurity 2.0, the allow action is only applied to the current phase. This means that if a rule matches in a subsequent phase it may still take a disruptive action. The recommended rule configuration to allow a remote IP address to bypass ModSecurity rules is to do the following (where 192.168.1.100 should be substituted with the desired IP address):
SecRule REMOTE_ADDR "^192\.168\.1\100$" phase:1,nolog,allow,ctl:ruleEngine=Off
If you want to allow uninterrupted access to the remote IP address, however you still want to log rule alerts, then you can use this rule -
SecRule REMOTE_ADDR "^192\.168\.1\100$" phase:1,nolog,allow,ctl:ruleEngine=DetectionOnly
If you want to disable both the rule and audit engines, then you can optionally add another ctl action:
SecRule REMOTE_ADDR "^192\.168\.1\100$" phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off
'엔지니어 > Linux' 카테고리의 다른 글
Firewalld (0) | 2022.02.22 |
---|---|
[정보보안] Polkit 취약점 보안 업데이트 권고(CVE-2021-4034) (0) | 2022.02.14 |
drbd split brain 스플릿 브레인 처리 (0) | 2018.03.28 |
리눅스 multi default gateway(routing) 설정 (0) | 2017.12.21 |
Ubuntu 16.04 LTS iptables 설정 (0) | 2017.11.29 |