mod_cband는 Apache 웹 서버의 모듈 중 하나로, 웹 서버의 대역폭 사용을 제어하고 관리하는 데 사용됩니다.
이 모듈을 사용하면 웹 서버의 트래픽을 제한하고 관리할 수 있습니다.
주요 기능으로는 대역폭 제한 및 제어, 트래픽 모니터링이 있어 트래픽을 효과적으로 제어하고 관리할 수 있습니다.
선행 조건으로 vhost설정이 되어있어야 하고 vhost를 설정하는 방법은
2024.04.15 - [OS/Linux] - apache vhost 설정하기
apache vhost 설정하기
vhost는 virtual host로 웹 서버의 다른 디렉터리로 요청을 라우팅 하여하나의 IP 주소에서 여러 개의 도메인을 처리하는 데 사용합니다. 사용할 수 있는 도메인이 하나이므로 서브도메인을 www, eee로
engineer1.tistory.com
에서 확인 가능합니다.
1. mod_cband 설치먼저 centos 7에서 소스로 설치된 apache를 기준으로 설명하겠습니다.
# 소스설치 centos 7
wget https://fossies.org/linux/www/apache_httpd_modules/old/mod-cband-0.9.7.5.tgz
tar zxvf mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
./configure --with-apxs=/usr/local/apache/bin/apxs
make
# 패키지 설치 ubuntu 22.04
apt install -y apache2-dev
wget https://fossies.org/linux/www/apache_httpd_modules/old/mod-cband-0.9.7.5.tgz
tar zxvf mod-cband-0.9.7.5.tgz
cd mod-cband-0.9.7.5
./configure
make
만약 apahce가 2.2 이하면 에러가 발생하지 않고 정상적으로 설치가 되지만 apache 2.4는 아래와 같은 에러가 출력됩니다.
에러는 명시되어있는 문구에서 remote_ip와 remote_addr부분을 client로 수정하면 됩니다.
vi mod-cband-0.9.7.5/src/mod_cband.c
1333번 라인 remote_ip -> client_ip
1342번 라인 remote_ip -> client_ip
1362번 라인 remote_ip -> client_ip
1363번 라인 remote_ip -> client_ip
1365번 라인 remote_addr -> client_addr
로 수정 후 다시 make를 진행하여 make install을 해줍니다.
conf 수정
이제 httpd.conf에 cband 모듈이 추가된 것을 확인합니다.
# centos
vi /usr/local/apache/conf/httpd.conf
# ubuntu
vi /etc/apache2/mods-enabled/cband.load
모듈이 적용되었다면 cband를 모니터링하기위해 status설정을 합니다.
제일 아래에
# centos
<IfModule mod_cband.c>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
<Location /~*/cband-status-me>
SetHandler cband-status-me
</Location>
<Location /cband-status>
SetHandler cband-status
Order deny,allow
#Deny from all # 필요에 맞게 보안을 구성해도 됩니다.
#Allow from # 접속을 허용할 IP
Allow from all
</Location>
</IfModule>
# ubuntu
vi /etc/apache2/mods-available/cband.conf # 생성후 저장
<IfModule mod_cband.c>
<Location /cband-status-me>
SetHandler cband-status-me
</Location>
<Location /~*/cband-status-me>
SetHandler cband-status-me
</Location>
<Location /cband-status>
SetHandler cband-status
Order deny,allow
#Deny from all # 필요에 맞게 보안을 구성해도 됩니다.
#Allow from # 접속을 허용할 IP
Allow from all
</Location>
</IfModule>
cd /etc/apache2/mods-enabled/ # 모듈 활성화
ln -s ../mods-available/cband.conf ./ # mod_cband를 enalbed하기위해 링크파일 생성
를 추가하고 vhost설정 파일을 수정합니다.
vhost 설정파일 수정
vhost 설정파일에 아래와 같이 수정합니다.
vi /usr/local/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs"
ServerName www.domain.com
CBandLimit 100Mi
CBandPeriod 1D
CBandSpeed 1024 10 30
CBandDefaultExceededCode 509
</VirtualHost>
해당 설정은 www.domain.com은
100Mi의 트래픽을 하루를 주기로 제한하고
최대 1024kbps속도와 초당 10번의 연결, 동시접속자 30명으로 제한하고
만약 트래픽 100Mi를 초과 시 509 에러를 출력합니다.
CBandLimit는 트래픽 관련 설정으로 단위는 기본값은 K이고
K, M, G bytes : 1000, 1000*1000, 1000*1000*1000 bytes를 의미하고
Ki, Mi, Gi bytes : 1024, 1024*1024, 1024*1024*1024 bytes를 의미합니다.
CBandSpeed의 전송 속도 단위의 기본값은 kbps이고
kbps, Mbps, Gbps - 1024, 1024*1024, 1024*1024*1024 bits per second를 의미하고
kb/s, Mb/s, Gb/s - 1024, 1024*1024, 1024*1024*1024 bytes per second를 의미합니다.
CBandPeriod에서의 시간 단위는 기본값은 S이고
S, M, H, D, W - 초, 분, 시간, 일, 주를 의미합니다.
(1, 60, 3600, 86400, 604800)
이제 www.domain.com/cband-status 에서 확인이 가능합니다.
해당 페이지도 .htpasswd를 설정하여 보안을 강화할 수 있습니다.
2024.04.11 - [OS/Linux] - htpasswd로 웹페이지 잠금하기
아래는 cband의 설정들입니다.
1. CBandDefaultExceededURL
설명 : 제한을 초과했을때보여줄 URL (지정하지 않으면, 503 에러 페이지)
문법 :CBandDefaultExceededURL [URL]
2. CBandDefaultExceededCode
설명 : 제한을 초과했을 시 보여줄 에러코드
문맥 : Server config
문법 :CBandDefaultExceededCode [HTTP_CODE]
예제 :CBandDefaultExceededCode 509
3. CBandScoreFlushPeriod
설명 : scoreboard 파일에 기록할 요청수, mod_cband의 성능에 영향을 준다.
기본값 : 1
문맥 : Server config
문법 :CBandScoreFlushPeriod [요청수]
예제 :CBandScoreFlushPeriod 100 ( 매 100번의 요청에 한 번씩 scoreboard 파일에 기록)
4. CBandSpeed
설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수 설정
문맥 :<Virtualhost>
문법 : CBandSpeed [kbps] [rps] [max_conn]
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandSpeed 1024 10 30
최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.
5. CBandRemoteSpeed
설명 : 접속자(IP)의 최대속도, 요청수, 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)
문맥 :<Virtualhost>
문법 : CBandRemoteSpeed [kbps] [rps] [max_conn]
kbps - 초당 최대 전송속도
rps - 초당최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandRemoteSpeed 20kb/s 3 3
접속자(ip)에대해 최대 20kb/s , 초당 3개의 요청, 동시 접속 3개로 제한.
6. CBandClassRemoteSpeed
설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한
문맥 :<Virtualhost>
문법 :CBandClassRemoteSpeed [class_name] [kbps] [rps] [max_conn]
class_name - 이미 정의한 클래스 이름 (IP범위)
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : <CBandClassgooglebot_class>
CBandClassDst 66.249.64/24
CBandClassDst 66.249.65/24
CBandClassDst 66.249.79/24
</CBandClass>
CBandClassRemoteSpeed googlebot_class 20kb/s 2 3
위에서 정의한클래스(googlebot_class)의 요청에는 20kb/s의 전송속도,
초당 3개의 요청, 동시 접속 3개로 제한.
7. CBandRandomPulse
설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
부하가 많을때는 자동 Off 된다.
문맥 : Global
문법 : CBandRandomPulse [On/Off]
8. CBandLimit
설명 : 제한할 전송량을 설정한다.(기간은 CBandPeriod에서 설정)
문맥 :<Virtualhost>
문법 : CBandLimit [limit]
예제 : CBandLimit 10M
전송양을 10M(10*1000*1000 bytes)로 제한한다.
CBandLimit 10Mi
전송양을 10M(10*1024*1024 bytes)로 제한한다.
9. CBandClassLimit
설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.
문맥 :<Virtualhost>
문법 : CBandClassLimit [class_name] [limit]
class_name - 이미 정의한 클래스 이름(ip범위)
limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
10. CBandExceededURL
설명 : 제한을 초과했을 시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 :<Virtualhost>
문법 : CBandExceededURL [URL]
11. CBandExceededSpeed
설명 : 전송양을 초과했을 시 , 전송속도제한 설정.
문맥 :<Virtualhost>
문법 :CBandExceededSpeed [kbps] [rps] [max_conn]
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
12. CBandScoreboard
설명 : 가상호스트의 scoreboard파일 지정. (성능향상을 위해 필요)
문맥 :<Virtualhost>
문법 : CBandScoreboard [/scoreboard/path/file.score]
(path는 아파치(nobody 또는 apache) 권한으로 쓰기 가능해야 함. 파일명까지 기입해야 함.)
13. CBandPeriod
설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 :<Virtualhost>
문법 : CBandPeriod [period]
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandPeriod1 W (1주일)
CBandPeriod 14D (14일)
CBandPeriod 60M (60분)
14. CBandPeriodSlice
설명 : 기간이 길 때는 나눌 기간을 명시한다.
기본값 : slice_len = limit
문맥 :<Virtualhost>
문법 : CBandPeriodSlice [slice_length]
예제 : CBandLimit 100G
CBandPeriod 4W
CBandPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리된다.
15. <CBandUser>
설명 : 새로운 cband 가상 사용자설정
문맥 : Server config
문법 : <CBandUser user_name>... </CBandUser>
16. CBandUserSpeed
설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한
문맥 : <CBandUser>
문법 : CBandUserSpeed [kbps] [rps] [max_conn]
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
예제 : CBandUserSpeed 100kb/s 10 5
17. CBandUserLimit
설명 : cband 가상 사용자의 저 송용량 제한.
문맥 : <CBandUser>
문법 : CBandUserLimit [limit]
limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
예제 : CBandUserLimit 10M
CBandUserLimit 10Mi
18. CBandUserClassLimit
설명 : cband 가상 사용자의 정의 한 class(ip범위)에 대해 제한할 전송량 설정
문맥 : <CBandUser>
문법 :CBandUserClassLimit [class_name] [limit]
class_name - 지정한 class(IP범위) 이름
limit -사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
19. CBandUserExceededURL
설명 : cband 가상 사용자의, 제한을 초과했을 시 보여줄 URL,
지정하지 않으면 503 에러 발생 ( 가상호스트에서 )
문맥 : <CBandUser>
문법 :CBandUserExceededURL [URL]
20. CBandUserExceededSpeed
설명 : cband 가상 사용자의, 전송양을 초과했을 시 , 전송속도 제한 설정.
문맥 : <CBandUser>
문법 :CBandUserExceededSpeed [kbps] [rps] [max_conn]
kbps - 초당 최대 전송속도
rps - 초당 최대 요청수
max_conn - 최대 동시 접속수
21. CBandUserScoreboard
설명 : cband 가상 사용자의, scoreboard 파일 지정.
문맥 : <CBandUser>
문법 :CBandUserScoreboard [path]
(path는 아파치(nobody 또는 apache) 권한으로 쓰기 가능해야 함)
22. CBandUserPeriod
설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
문맥 : <CBandUser>
문법 : CBandUserPeriod [period]
period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
예제 : CBandUserPeriod 1W
CBandUserPeriod 14D
CBandUserPeriod 60M
23. CBandUserPeriodSlice
설명 : cband 가상 사용자의, 기간을 나눌 기간 명시
기본값 : slice_len = limit
문맥 : <CBandUser>
문법 :CBandUserPeriodSlice [slice_length]
예제 : CBandUserLimit100 G
CBandUserPeriod 4W
CBandUserPeriodSlice 1W
4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
1주에 25G, 2주째 50G 이렇게 나눠 처리된다.
이상 cband설정에 대해 알아봤습니다!
출처 - https://blog.naver.com/hanajava/221759924518
'OS > Linux' 카테고리의 다른 글
sendmail로 메일 수신하기 (2) | 2024.04.16 |
---|---|
sendmail로 메일송신 하기 (0) | 2024.04.16 |
apache vhost 설정하기 (0) | 2024.04.15 |
AWStats 설정 및 설치 (1) | 2024.04.12 |
htpasswd로 웹페이지 잠금하기 (2) | 2024.04.11 |