운영중입니다

웹사이트 보안 강화: Apache mod_evasive 설치 및 차단 테스트 본문

리눅스보안

웹사이트 보안 강화: Apache mod_evasive 설치 및 차단 테스트

https443 2025. 10. 31. 20:07

 

✅ 1. mod_evasive란?

mod_evasive는
Apache 웹 서버가 짧은 시간에 같은 IP나 클라이언트로부터 과도한 요청을 받을 때
해당 요청을 자동으로 차단하거나 블랙리스트에 등록하는 기능을 하는 모듈입니다.

예를 들어 “누군가 페이지 새로고침(F5)을 계속 누르거나, 자동 봇이 반복적으로 요청을 보내는 경우
웹서버가 다운되지 않도록 막아주는 보호막” 역할을 합니다.

 


2. 설치 방법

# 테스트 서버 버전
# CentOS Linux release 7.9.2009 (Core)
# Server version: Apache/2.4.6 (CentOS)

#2.1 EPEL 저장소 설치
sudo yum install epel-release -y


#2.2 mod_evasive 설치
sudo yum install mod_evasive -y

 

  • 설치 후 모듈 파일은 보통 아래 위치에 생성됩니다.

 /usr/lib64/httpd/modules/mod_evasive24.so

 


3. 설정파일 확인 및 수정

3.1  설정 파일 확인

# /etc/httpd/conf.d

cat mod_evasive.conf 혹은 grep -vE '^\s*#|^\s*$' mod_evasive.conf

서버 상황에 따라 다를 수 있으나 mod_evasive.conf 따로 설정하지 않고 httpd.conf에 설정도 가능합니다.



 3.2 항목 별 상세 설명

항목 의미 현재 설정 영향 (제공값) 권장값 (범위 / 예시) 설명·주의사항
DOSHashTableSize 접속자(클라이언트) 추적용 내부 해시테이블 크기 3097 → 보통 적절한 초기값 1024 ~ 8192 (중소형: 2048, 대형: 8192) 값 ↑ → 메모리 사용 ↑, 값 ↓ → 해시 충돌·오탐 ↑. 동시접속자 많으면 키우기.
DOSPageCount 같은 페이지(URL) 기준 허용 요청 수 2 → 매우 엄격, 리로드·봇에 민감 2 ~ 20 (일반: 4–10) 너무 낮으면 정상 새로고침·봇에 의한 오탐 발생. 관리 페이지 예외 필요.
DOSSiteCount 사이트 전체(모든 URL 합산) 기준 허용 요청 수 50 → 보통 수준, 중소형에 무난 20 ~ 200 (소형:20–50, 대형:100–200) API/앱 트래픽 많은 서비스는 높게 설정.
DOSPageInterval DOSPageCount를 계산하는 시간창(초) 1 → 1초 창으로 매우 민감 1 ~ 10초 (일반:1–5초) 폴링/AJAX가 잦으면 간격 늘리기.
DOSSiteInterval DOSSiteCount를 계산하는 시간창(초) 1 → 사이트 전체 초당 기준으로 민감 1 ~ 10초 (일반:1–5초) 사이트 특성에 맞춰 조정.
DOSBlockingPeriod 임계치 초과 시 IP 차단 지속시간(초) 10 → 차단이 짧음(10초) — 오탐 영향 작음 10 ~ 3600초 (일반:60–600초) 너무 짧으면 억제 약함. 반복 위반엔 단계적(짧→길) 차단 권장.
DOSSystemCommand 차단 시 실행할 시스템 명령 (%s → IP) "touch /var/log/mod_evasive/dos-%s" → 파일 생성 필요할 때만 사용. 안전한 스크립트 호출 권장 Apache 권한으로 실행되므로 쉘 인젝션 등 보안 주의. 매개변수 검증된 스크립트 사용.
DOSLogDir 로그/파일 저장 디렉토리 "/var/log/mod_evasive" → 전용 디렉토리로 적절 전용 디렉토리 + 권한(예: apache:apache, 700/750) 로그 로테이트 설정 필요. 디스크 사용량 모니터링 권장.

 
 
 3.3 설정 파일 수정 후 적용
 
#설정 파일 수정 전 

mkdir -p /var/log/mod_evasive

chown apache:apache /var/log/mod_evasive

chmod 700 /var/log/mod_evasive
 
명령어 의미 이유
mkdir -p 상위 폴더까지 생성, 이미 있으면 무시 안전한 디렉토리 생성
chown apache:apache Apache가 쓸 수 있게 권한 부여 로그 기록을 위해 필요
chmod 700 오직 소유자만 접근 가능 보안 강화 (외부 접근 차단)
#/etc/httpd/conf.d/mod_evasive.conf 수정 (DOSLogDir와 DOSSystemCommand를 변경)

vim /etc/httpd/conf.d/mod_evasive.conf

DOSLogDir "/var/log/mod_evasive"

DOSSystemCommand "touch /var/log/mod_evasive/dos-%s"

 

httpd -t

service httpd restart
service httpd status

 


4. 테스트 및 확인

#4.1 수동 테스트

#Mod_evasive 모듈이 설치 된 서버에 다수 접속 시도 할 경우
#위에 설정한 DOSSystemCommand 디렉토리 확인, dos-<ip>파일이 생성되며, 
# 파일에 기록된 숫자는 그 파일을 생성한 Apache/mod_evasive 프로세스의 PID입니다.

 

#1. 파일 생성 시간(언제 차단되었는지) 확인

ls -l --full-time /var/log/mod_evasive/dos-<IP>


#2. 프로세스가 아직 살아있는지 확인

ps -ef | grep <PID>


#3. 즉시 차단 해제(파일 삭제)

rm -f /tmp/dos-<IP>
rm -f /tmp/dos-*
# 또는 전체 삭제(주의: 모든 차단 해제)


#4. 재발 방지(화이트리스트 추가)
#/etc/httpd/conf.d/mod_evasive.conf 에 추가

sudo sed -i '/<\/IfModule>/i \    DOSWhiteList <IP>' /etc/httpd/conf.d/mod_evasive.conf

 

#4.2 명령어 사용
ab -n 1000 -c 200 http://httpstest.mireene.co.kr

#1000회 요청, 동시 200. 결과에 403 응답이 섞여 있는지 확인.
#*외부 서비스에 대해 사용하면 서비스에 부담을 줄 수 있으니 반드시 본인 서버에서만 사용 권장합니다.
#4.3 로그 확인

cat /var/log/messages | grep mod_evasive