mod_cband, mod_evasive, mod_ratelimit을 이용한 apache 트래픽 관리

apache에서 초당 접속 횟수 제한하는 방법

웹 서버를 운영하다보면 트래픽이나 속도를 제한해야 하는 경우가 있습니다.
예를 들어, 특정 IP나 URL에 대해 초당 접속 횟수를 제한하거나, 다운로드 속도를 조절하거나, 전체적인 대역폭을 관리하거나 하는 등의 작업이 필요할 수 있습니다.
이런 경우에는 apache 웹 서버에서 제공하는 여러가지 모듈과 설정을 이용할 수 있습니다.
이번 포스팅에서는 ubuntu 기준으로 apache에서 초당 접속 횟수를 제한하는 방법에 대해 알아보겠습니다.

apache 설치하기

ubuntu에서 apache를 설치하는 방법은 간단합니다.
터미널을 열고 다음 명령어를 입력하면 됩니다.

1
2
sudo apt update
sudo apt install apache2
cs

설치가 완료되면 다음 명령어로 apache 서비스의 상태를 확인할 수 있습니다.

1
sudo systemctl status apache2
cs

mod_cband 모듈 사용하기

apache에서 초당 접속 횟수를 제한하는 방법 중 하나는 mod_cband라는 모듈을 사용하는 것입니다.
mod_cband는 개별 홈페이지의 트래픽을 관리하기 위해 사용하는 모듈로서, 다음과 같은 기능을 제공합니다.
  • CBandLimit: 일정 기간 동안 허용할 최대 트래픽 용량을 설정합니다.
  • CBandPeriod: 트래픽 제한을 적용할 기간을 설정합니다.
  • CBandSpeed: 일정 시간 동안 허용할 최대 전송 속도를 설정합니다.
  • CBandRemoteSpeed: 원격 클라이언트의 최대 전송 속도를 설정합니다.
  • CBandExceededURL: 트래픽 제한이 초과되었을 때 보여줄 URL을 설정합니다.
  • CBandScoreboard: 트래픽 사용량을 저장할 파일의 경로를 설정합니다.
  • CBandStatusHandler: 트래픽 상태를 확인할 수 있는 핸들러를 설정합니다.
mod_cband 모듈을 설치하고 사용하는 방법은 다음과 같습니다.

1. mod_cband 모듈 다운로드 및 설치
1
2
3
4
5
6
wget http://cband.linux.pl/download/mod-cband-0.9.7.5.tgz
tar xvzfp mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
./configure --with-apxs=/usr/bin/apxs2
make
sudo make install
cs

2. apache 설정 파일에 mod_cband 모듈 로드

1
sudo vi /etc/apache2/apache2.conf
cs

파일의 마지막에 다음 줄을 추가합니다.

1
LoadModule cband_module /usr/lib/apache2/modules/mod_cband.so
cs

3. apache 설정 파일에 mod_cband 설정 추가

1
sudo vi /etc/apache2/apache2.conf
cs

파일의 마지막에 다음 내용을 추가합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<IfModule mod_cband.c>
  <Location /cband-status>
    SetHandler cband-status
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1 # 허용할 IP 입력 (전부 허용은 All)
  </Location>
  <Location /cband-me>
    SetHandler cband-status-me
    Order deny,allow
    Deny from all
    Allow from all
  </Location>
</IfModule>
cs

4. apache 가상 호스트 파일에 mod_cband 적용

1
sudo vi /etc/apache2/sites-available/000-default.conf
cs

파일의 <VirtualHost *:80> 태그 안에 다음 내용을 추가합니다.

1
2
3
4
5
6
CBandLimit 100Mi # 1일 동안 허용할 최대 트래픽 용량
CBandPeriod 1D # 트래픽 제한을 적용할 기간
CBandSpeed 1024 10 30 # 10초 동안 허용할 최대 전송 속도 (1024kbps)
CBandRemoteSpeed 20kb/3 30 # 원격 클라이언트의 최대 전송 속도 (20kb/s)
CBandExceededURL http://example.com/exceeded.html # 트래픽 제한이 초과되었을 때 보여줄 URL
CBandScoreboard /var/www/html/cband.scoreboard # 트래픽 사용량을 저장할 파일의 경로
cs

5. apache 서비스 재시작

1
sudo systemctl restart apache2
cs

6. 트래픽 사용량 확인
웹 브라우저에서 다음 주소로 접속하면 트래픽 상태를 확인할 수 있습니다.
  • http://example.com/cband-status: 전체 트래픽 상태를 확인할 수 있습니다.
  • http://example.com/cband-me: 현재 접속한 클라이언트의 트래픽 상태를 확인할 수 있습니다.

mod_evasive 모듈 사용하기

apache에서 초당 접속 횟수를 제한하는 방법 중 또 다른 하나는 mod_evasive라는 모듈을 사용하는 것입니다.
mod_evasive는 DoS 공격이나 무차별적인 요청을 방어하기 위해 사용하는 모듈로서, 다음과 같은 기능을 제공합니다.

  • DOSHashTableSize: 해시 테이블의 크기를 설정합니다. 해시 테이블은 클라이언트의 IP 주소와 요청한 URL을 저장하는데 사용됩니다.
  • DOSPageCount: 일정 시간 동안 같은 페이지에 대해 허용할 최대 요청 수를 설정합니다.
  • DOSSiteCount: 일정 시간 동안 같은 사이트에 대해 허용할 최대 요청 수를 설정합니다.
  • DOSPageInterval: DOSPageCount를 적용할 시간 간격을 설정합니다. 초 단위로 입력합니다.
  • DOSSiteInterval: DOSSiteCount를 적용할 시간 간격을 설정합니다. 초 단위로 입력합니다.
  • DOSBlockingPeriod: 요청 제한이 초과된 클라이언트에 대해 차단할 시간을 설정합니다. 초 단위로 입력합니다.
  • DOSEmailNotify: 요청 제한이 초과된 클라이언트가 발생하면 알릴 이메일 주소를 설정합니다.
  • DOSSystemCommand: 요청 제한이 초과된 클라이언트가 발생하면 실행할 시스템 명령어를 설정합니다. %.*s로 클라이언트의 IP 주소를 전달할 수 있습니다.
  • DOSLogDir: 로그 파일을 저장할 디렉토리를 설정합니다.

mod_evasive 모듈을 설치하고 사용하는 방법은 다음과 같습니다.

1. mod_evasive 모듈 설치

1
sudo apt install libapache2-mod-evasive
cs

2. mod_evasive 모듈 활성화

1
sudo a2enmod evasive
cs

3. mod_evasive 모듈 설정 파일 생성

1
sudo vi /etc/apache2/mods-available/evasive.conf
cs

파일에 다음 내용을 입력합니다.

1
2
3
4
5
6
7
8
9
10
11
<IfModule mod_evasive20.c>
  DOSHashTableSize 3097
  DOSPageCount 5 # 1초 동안 같은 페이지에 대해 허용할 최대 요청 수
  DOSSiteCount 50 # 1초 동안 같은 사이트에 대해 허용할 최대 요청 수
  DOSPageInterval 1 # DOSPageCount를 적용할 시간 간격 (초)
  DOSSiteInterval 1 # DOSSiteCount를 적용할 시간 간격 (초)
  DOSBlockingPeriod 10 # 요청 제한이 초과된 클라이언트에 대해 차단할 시간 (초)
  DOSEmailNotify admin@example.com # 요청 제한이 초과된 클라이언트가 발생하면 알릴 이메일 주소
  DOSSystemCommand "sudo iptables -A INPUT -s %.*s -j DROP" # 요청 제한이 초과된 클라이언트가 발생하면 실행할 시스템 명령어
  DOSLogDir "/var/log/mod_evasive" # 로그 파일을 저장할 디렉토리
</IfModule>
cs

4. apache 서비스 재시작

1
sudo systemctl restart apache2
cs

mod_ratelimit 모듈 사용하기

apache에서 초당 접속 횟수를 제한하는 방법 중 또 다른 하나는 mod_ratelimit라는 모듈을 사용하는 것입니다.
mod_ratelimit는 HTTP 응답의 전송 속도를 제한하기 위해 사용하는 모듈로서, 다음과 같은 기능을 제공합니다.
  • RateLimit: HTTP 응답의 전송 속도를 설정합니다. kb/s 단위로 입력합니다.

mod_ratelimit 모듈을 설치하고 사용하는 방법은 다음과 같습니다.

1. mod_ratelimit 모듈 활성화

1
sudo a2enmod ratelimit
cs

2. apache 설정 파일에 mod_ratelimit 적용

1
sudo vi /etc/apache2/sites-available/000-default.conf
cs

파일의 <VirtualHost *:80> 태그 안에 다음 내용을 추가합니다.

1
2
3
4
<Location />
  SetOutputFilter RATE_LIMIT
  SetEnv rate-limit 10 # HTTP 응답의 전송 속도 (10kb/s)
</Location>
cs

3. apache 서비스 재시작

1
sudo systemctl restart apache2
cs

결론

이번 포스팅에서는 ubuntu 기준으로 apache에서 초당 접속 횟수를 제한하는 방법에 대해 알아보았습니다.
mod_cband, mod_evasive, mod_ratelimit 등의 다양한 모듈과 설정을 이용하여 웹 서버의 성능과 안전성을 향상시킬 수 있고, 이에 대해 간단한 예제와 함께 설명을 하는 포스팅을 작성했습니다.
각 모듈의 자세한 옵션과 사용법은 공식 문서를 참고하시기 바랍니다.

저는 개인적으로 mod_cband 모듈이 가장 유용하다고 생각합니다.
트래픽 용량과 전송 속도를 쉽게 제어할 수 있고, 트래픽 상태를 실시간으로 확인할 수 있기 때문입니다.
또한, 트래픽 제한이 초과되었을 때 이메일 알림이나 시스템 명령어 실행 등의 추가적인 기능도 제공합니다.
여러분은 어떤 모듈이 좋을꺼 같나?
댓글로 의견을 남겨주세요!

댓글

이 블로그의 인기 게시물

crontab 설정방법과 로그 확인하는 법

Microsoft Defender 방화벽 설정 또는 해제하는 방법

한국 군비지출 세계 9위