mod_cband, mod_evasive, mod_ratelimit을 이용한 apache 트래픽 관리
apache에서 초당 접속 횟수 제한하는 방법
웹 서버를 운영하다보면 트래픽이나 속도를 제한해야 하는 경우가 있습니다.예를 들어, 특정 IP나 URL에 대해 초당 접속 횟수를 제한하거나, 다운로드 속도를 조절하거나, 전체적인 대역폭을 관리하거나 하는 등의 작업이 필요할 수 있습니다.
이런 경우에는 apache 웹 서버에서 제공하는 여러가지 모듈과 설정을 이용할 수 있습니다.
이런 경우에는 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: 트래픽 상태를 확인할 수 있는 핸들러를 설정합니다.
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 |
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 |
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/s 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: 로그 파일을 저장할 디렉토리를 설정합니다.
1. 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 응답의 전송 속도를 제한하기 위해 사용하는 모듈로서, 다음과 같은 기능을 제공합니다.
mod_ratelimit 모듈을 설치하고 사용하는 방법은 다음과 같습니다.
- RateLimit: HTTP 응답의 전송 속도를 설정합니다. kb/s 단위로 입력합니다.
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 모듈이 가장 유용하다고 생각합니다.
트래픽 용량과 전송 속도를 쉽게 제어할 수 있고, 트래픽 상태를 실시간으로 확인할 수 있기 때문입니다.
또한, 트래픽 제한이 초과되었을 때 이메일 알림이나 시스템 명령어 실행 등의 추가적인 기능도 제공합니다.
여러분은 어떤 모듈이 좋을꺼 같나?
여러분은 어떤 모듈이 좋을꺼 같나?
댓글로 의견을 남겨주세요!
댓글
댓글 쓰기