본문 바로가기

OS/Linux

apache mod_cband 설치 및 설정

 

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는 아래와 같은 에러가 출력됩니다.

make 에러

 

에러는 명시되어있는 문구에서 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 모듈 확인

 

모듈이 적용되었다면 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 에서 확인이 가능합니다. 

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