1. 필수 패키지 설치
sudo yum install epel-release
sudo yum install gcc make pcre2-devel libxml2-devel git autoconf automake libtool
- 빌드 및 의존성 해결을 위한 패키지 설치
2. ModSecurity 소스 다운로드 및 빌드
cd /usr/local/src
git clone --depth 1 -b v2.9.7 https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
git submodule init
git submodule update
./autogen.sh
./configure --with-apxs=시스템내Apache경로/bin/apxs
make
sudo make install
- 경로 및 버전은 환경에 따라 조정
- 빌드 완료 시 시스템내Apache경로/modules/mod_security2.so 생성
3. mod_unique_id.so 빌드 (필요시)
cd /usr/local/src/httpd-2.4.57/modules/metadata
시스템내Apache경로/bin/apxs -c -i mod_unique_id.c
- 빌드 후 시스템내Apache경로/modules/mod_unique_id.so 생성
4. 설정 파일 및 부가 파일 준비
- unicode.mapping 파일 복사
-
cp /usr/local/src/ModSecurity/unicode.mapping 시스템내Apache경로/conf/extra/
- modsecurity.conf 준비
- 샘플(예: modsecurity.conf-recommended)을 복사 및 편집
- 아래 두 줄 반드시 포함:
SecRuleEngine On SecServerSignature "MyServer"
5. httpd.conf 주요 설정
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule security2_module modules/mod_security2.so
ServerTokens Full
ServerSignature Off
Include conf/extra/modsecurity.conf
6. 설정 적용 및 점검
시스템내Apache경로/bin/httpd -t
sudo systemctl restart httpd
시스템내Apache경로/bin/httpd -M | grep -E 'security2|unique_id'
- 두 모듈이 (shared)로 출력되어야 함
7. Server 헤더 변경 확인
curl -I http://localhost/
- 결과에 Server: MyServer가 출력되어야 성공
8. 문제 발생 시 주요 대응
- 빌드 오류: 에러 메시지에 따라 추가 패키지 설치
- 모듈 미로드: LoadModule 위치 및 파일 경로 재확인
- 파일 누락: 소스에서 복사 (예: unicode.mapping)
- SecServerSignature 미적용: ServerTokens를 Full로 변경
9. 최종 체크리스트
- 필수 패키지 설치 및 소스 빌드
- unicode.mapping 등 부가 파일 준비
- mod_unique_id, mod_security2 빌드 및 LoadModule 적용
- modsecurity.conf에 SecRuleEngine On, SecServerSignature "MyServer"
- httpd.conf에 ServerTokens Full, Include modsecurity.conf
- Apache 재시작 및 문법 확인
- curl로 Server 헤더 변경 확인
10. ModSecurity JSON 지원 활성화 -> Http Request 호환성 설정으로 필요****
원인 요약
- 로그에 반복적으로 아래 메시지 발생:
ModSecurity: JSON support was not enabled Access denied with code 400 (phase 2). Match of "eq 0" against "REQBODY_ERROR" required.
- ModSecurity에서 JSON 파서 미활성화 상태에서 Content-Type: application/json 요청이 들어오면 400 에러로 차단됨
상세 원인
- ModSecurity 2.x는 빌드 시 별도의 JSON 지원 라이브러리(libyajl)가 필요
- 현재 환경은 JSON 파서가 활성화되지 않아 JSON 요청을 처리하지 못함
해결 방법
- libyajl-devel 설치
-
sudo yum install yajl-devel
- ModSecurity 재빌드
- configure 단계에서 checking for YAJL... yes가 반드시 출력되어야 함
-
cd /usr/local/src/ModSecurity make clean ./configure --with-apxs=시스템내Apache경로/bin/apxs make sudo make install
- Apache 재시작
-
sudo systemctl restart httpd
- 로그에서 JSON 지원 활성화 확인
- Apache error_log에 아래 메시지 확인
ModSecurity: YAJL compiled version=...
- Apache error_log에 아래 메시지 확인
11. HAIFeR 사용자 필수 설정
- 하이퍼 기준 모든 POST Request는 "/api/" 로 시작함.
- 이에 대해 예외처리 설정 필요. 지금까지 작업한 내용이 보안 업데이트이기 때문.
- modsecurity.conf 파일에 설정 후 apache 재시작.
SecRule REQUEST_URI "@beginsWith /api/" "id:900001,phase:1,pass,nolog,ctl:requestBodyAccess=Off"
참고
- 모든 경로 및 버전 정보는 환경에 따라 달라질 수 있습니다.
- Chat-GPT에 해당 사항을 붙여넣고, systemctl status httpd 를 쳤을 때 나오는 결과값을 붙여넣으시면 명령어가 자동 완성됩니다.
- .conf 파일 수정 이후에는 반드시 "서버내Apache경로/bin/httpd -t" 를 쳐 Syntax OK가 나오는지 확인하시길 바랍니다.
'DevOps > Linux' 카테고리의 다른 글
Centos 환경에서 Docker 간단 설치하기 (feat. 별도 디렉토리 지정) (0) | 2025.05.12 |
---|---|
Jenkins로 Tomcat 빌드 시 root 계정으로 인한 빌드 오류 현상 해결 (1) | 2025.03.28 |
[DevOps Roadmap] Oracle Cloud 인스턴스의 루트 볼륨 증설 (물리, 논리) (0) | 2024.02.02 |