Apache mod_cband 모듈

mod_cband란 무엇입니까?

Apache 사이트 및 해당 VirtualHost를 통한 VirtualHost 액세스 및 트래픽 양 확인

어떤 IP가 호출되었는지 확인하거나 레코드로 사이트를 제한하는 데 사용되는 Apache 모듈입니다.

Apache1은 mod_throttle을 사용합니다.

기능

* Apache2용 트래픽 제한 모듈

* 사용자당 대역폭 제한

* 가상 호스트당 대역폭 제한

* 목적지별 대역폭 제한

* 다운로드 속도 제한

* IP 대역에 의해 제한됨

* 초당 요청 수 제한

* 모니터링 또는 결과는 홈페이지에서 확인 가능

그런 것이 있다고 볼 수 있습니다.

mod_cband 설치

# mkdir /usr/local/src/APM_Setup

# cd /usr/local/src/APM_Setup

#wget https://fossies.org/linux/www/apache_httpd_modules/old/mod-cband-0.9.7.5.tgz

# tar zxvf 모드-cband-0.9.7.5.tgz

# cd 모드-cband-0.9.7.5

# ./configure –with-apxs=/usr/local/apache/bin/apxs

# 확인 -j 8

make를 시작하면 오류 메시지가 나타납니다.

생성 오류

src/mod_cband.c: ‘mod_cband_get_dst’ 함수에서:

src/mod_cband.c:1333:47: 오류: “conn_rec”에는 “remote_ip”라는 구성원이 없습니다.

p.add.sin.s_addr = inet_addr(r->connection->remote_ip);

^^

src/mod_cband.c: ‘mod_cband_get_remote_host’ 함수에서:

src/mod_cband.c:1362:10: 오류: ‘struct conn_rec’에 ‘remote_ip’라는 멤버가 없습니다.

if (c->remote_ip !
= NULL)

^^

src/mod_cband.c:1363:20: 오류: ‘struct conn_rec’에 ‘remote_ip’라는 멤버가 없습니다.

addr = inet_addr(c->remote_ip);

^^

src/mod_cband.c:1365:10: 오류: ‘struct conn_rec’에 ‘remote_addr’이라는 멤버가 없습니다.

addr = c->remote_addr->sa.sin.sin_addr.s_addr;

^^

src/mod_cband.c: ‘mod_cband_update_speed’ 함수에서:

src/mod_cband.c:1905:19: 경고: 변수 ‘time_last_request’가 설정되었지만 사용되지 않음(-Wunused-but-set-variable)

서명되지 않은 긴 time_last_request;

^^

src/mod_cband.c: ‘mod_cband_check_connections_speed’ 함수에서:

src/mod_cband.c:2963:19: 경고: 변수 “time_now”가 설정되었지만 사용되지 않음(-Wunused-but-set-variable)

서명되지 않은 긴 time_now;

^^

apxs:오류: 명령 실패(rc=65536)

확인: *** (src/.libs/mod_cband.so) 오류 1


# ll /usr/local/src/mod-cband-0.9.7.5/src/

================================================== =====================

-rw——- 1 루트 루트 115749 2006년 11월 15일 mod_cband.c

================================================== =====================

.

# vi /usr/local/src/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

remote 를 쓰는 부분을 client 로 변경해야 합니다.

================================================== =====================

# 설치하다

# chmod 755 /usr/local/apache/modules/mod_cband.so

# vi /usr/local/apache/conf/httpd.conf

================================================== =====================

LoadModule cband_module 모듈/mod_cband.so


이 모듈이 추가되었습니다.

아래에 설정 값을 입력하세요.

SetHandler cband-status-me

SetHandler cband-status-me

SetHandler cband 상태

거부 명령, 허용

# 모두에게 거절당했다

#접근을 허용하려면 IP에서 허용

모든 사람이 허용

================================================== =====================

.

여기서 Allow from all을 체크하면 #Deny from all의 주석을 해제하고 Allow from all의 주석을 해제한 후 접속을 허용할 IP를 설정합니다.

# vi /usr/local/apache/conf/extra/httpd-vhosts.conf

================================================== =====================

서버 별칭 domain.tk

ServerName IP 등록

문서 루트 /usr/local/apache/htdocs

C 대역 제한 100Mi

CBandPeriod 1D

C대역속도1024 10 30

CBandRemoteSpeed ​​20kb/s 3 30

CBandExceededURL http://www.domain.tk/traffic_exceeded.html

================================================== =====================

.

위의 설정은 domain.tk에 대해 하루에 100M 트래픽을 설정하고 100M을 초과하면 CBandExceededURL에 지정된 페이지가 표시되고 지정되지 않은 경우 503 오류 페이지가 표시됩니다.

참고로 구속하지 않고 그냥 보고 있다면 CBandPeriod 부분만 있으면 됩니다.

속도를 1024kbps로 제한, 초당 10개 연결, 동시 연결을 30개로 제한

# /usr/local/apache/bin/apachectl -t

# systemctl apachectl 재시작

# vi /usr/local/apache/conf/extra/httpd-vhosts.conf

================================================== =====================

cband 단위 및 설정에 대한 설명

단위

전송 속도 단위

kbps, Mbps, Gbps – 초당 비트, 즉 1024, 1024*1024, 1024*1024*1024bps

kb/s, Mb/s, Gb/s – 초당 바이트, 즉 1024, 1024*1024, 1024*1024*1024 b/s

기본값: kbps

트래픽 제한 장치

K, M, G – 바이트, 의미: 1000, 1000*1000, 1000*1000*1000 바이트

Ki, Mi, Gi – 바이트, 의미: 1024, 1024*1024, 1024*1024*1024 바이트

기본값: K

시간 단위 S, M, H, D, W – 초, 분, 시간, 일, 주. 의미: 1, 60, 3600, 86400, 604800초

기본값

================================================== =====================

.

태도

* 이름: CBandDefaultExceededCode

설명: 한도 초과 시 표시할 오류 코드

컨텍스트: 서버 구성

구문: CBandDefaultExceededCode HTTP_CODE

예: CBandDefaultExceededCode 509

* 이름: CBandScoreFlushPeriod

설명: mod_cband의 성능에 영향을 미치는 스코어보드 파일에 대한 쓰기 요청 수입니다.

기본값: 1

컨텍스트: 서버 구성

구문: CBandScoreFlushPeriod 요청 수

예: CBandScoreFlushPeriod 100(스코어보드 파일에 대한 100개의 요청마다 한 번씩 쓰기)

* 이름: CBandSpeed

설명: 가상 호스트 도메인에 대한 최대 속도, 요청 수 및 연결 수를 설정합니다.

문맥:

구문: CBandSpeed ​​kbps rps max_conn

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

예: CBandSpeed ​​1024 10 30

최대 전송 속도는 1024kbps로 제한되며 초당 10개의 요청을 처리하고 동시 액세스를 30개로 제한합니다.

* 이름: CBandRemoteSpeed

설명: 방문자의 최대 속도, 요청 수 및 동시 연결(IP) 수를 제한합니다(CBandSpeed와 유사하지만 방문자별로 설정됨).

문맥:

구문: CBandRemoteSpeed ​​(kbps) (rps) (max_connect)

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

예: CBandRemoteSpeed ​​20kb/s 3 3

호스트 접근자(ip)에 대한 전송 속도를 1024kbps로 제한합니다.

초당 10개의 요청을 처리하고 동시 연결을 30개로 제한

* 이름: CBandClassRemoteSpeed

설명: 정의된 클래스(IP 범위)에 대한 최대 속도, 요청 수 및 연결 수를 제한합니다.

문맥:

구문: CBandClassRemoteSpeed ​​클래스 이름 kbps rps

class_name – 이미 정의된 클래스 이름(IP 범위)

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

예:

CBandClassDst 66.249.64/24

CBandClassDst 66.249.65/24

CBandClassDst 66.249.79/24

CBandClassRemoteSpeed ​​googlebot_class 20kb/s 2 3

위에 정의된 클래스(googlebot_class)의 요청에 대해 20kb/s의 전송 속도,

초당 3개의 요청, 동시 연결은 3개로 제한됩니다.

* 이름: CBandRandomPulse

설명: 임의의 속도 제한 파형을 생성하여 처리하는 Mod_cband 처리 기법.

부하가 많으면 자동으로 꺼집니다.

컨텍스트: 글로벌

구문: CBandRandomPulse 켜기/끄기

* 이름: CBandLimit

설명: 이체 금액을 한도로 설정합니다.

(주기는 CBandPeriod에서 설정)

문맥:

구문: CBandLimit 제한

Limit – 이체 금액, 사용 단위: K(Kilo), M(Mega), G(Giga), Ki(Kibi), Mi(Mebi), Gi(Gibi)

예: CBandLimit 10M

전송량은 10MB(10 * 1000 * 1000바이트)로 제한됩니다.

C 대역 제한 10Mi

전송량은 10MB(10 * 1024 * 1024바이트)로 제한됩니다.

* 이름: CBandClassLimit

설명: 정의된 클래스(IP 범위)에 대해 제한할 전송량을 지정합니다.

문맥:

구문: CBandClassLimit 클래스 이름 제한

class_name – 이미 정의된 클래스 이름(IP 범위)

Limit – 이체 금액, 사용 단위: K(Kilo), M(Mega), G(Giga), Ki(Kibi), Mi(Mebi), Gi(Gibi)

* 이름: CBandDefaultExceededURL

설명: 트래픽 제한 초과 시 표시할 URL(지정하지 않으면 503 오류 페이지)

설정된 경우: CBandDefaultExceededURL URL

* 이름: CBandExceededURL

설명: 제한 초과 시 표시할 URL, 지정하지 않으면 503 오류 발생(가상호스트에서)

문맥:

구문: CBandExceededURL URL

*이름: CBandExceededSpeed

설명: 이체량 초과 시 이체 속도 제한을 설정합니다.

문맥:

구문: CBandExceededSpeed ​​kbps rps max_conn

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

* 이름: CBandScoreboard

설명: 가상 호스트 스코어보드 파일을 지정합니다.

(성능 향상을 위해 필요)

문맥:

문법: CBandScoreboard 경로

(경로는 Apache 권한(nobody 또는 Apache)으로 쓰기 가능해야 함)

* 이름: CBandPeriod

내용: 용량 제한 기간(이 기간이 지나면 측정된 용량은 삭제됨)

문맥:

구문: CBandPeriod 기간

주기 – 단위: S(초), M(분), H(시), D(일), W(주)

예: CBandPeriod 1W(1주)

CBandPeriod 14D(14일)

CBandPeriod 60M(60분)

* 이름: CBandPeriodSlice

설명: 기간이 긴 경우 분할할 기간을 지정합니다.

기본값: slice_len = 제한

문맥:

구문: CBandPeriodSlice 슬라이스 길이

예: CBandLimit 100G

CBandPeriod 4W

CBandPeriodSlice 1W

4주는 1주 단위로 나뉩니다(4w/1w = 4). 용량은 100G/4=25G

1주차에 25G, 2주차에 50G.

* 성:

설명: 한 명의 사용자가 여러 도메인을 사용할 때 사용, 새로운 가상 cband 사용자 설정

컨텍스트: 서버 구성

통사론:

조정 방법

CBandUserLimit 100Mi

CBandUserPeriod 1D

서버 이름 test.com

문서 /home/test/public_html

CBandUser 사용자 이름

서버명 test1.kr

문서 /home/test/public_html2

CBandUser 사용자 이름

* 이름: CBandUserSpeed

설명 : 가상 cband 사용자의 속도, 요청 수 및 동시 연결 수를 제한합니다.

문맥:

구문: CBandUserSpeed ​​kbps rps max_conn

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

예: CBandUserSpeed ​​100kb/s 10 5

* 이름: CBandUserLimit

설명: 가상 cband 사용자의 전송 용량 제한.

문맥:

구문: CBandUserLimit 제한

한도 – 사용량, 사용량 단위 : K(Kilo), M(Mega), G(Giga), Ki(Kibi), Mi(Mebi), Gi(Gibi)

예: CBandUserLimit 10M

CBandUserLimit 10Mi

* 이름: CBandUserClassLimit

설명: 가상 cband 사용자의 정의된 클래스(IP 범위)에 대해 전송량을 제한하도록 설정합니다.

문맥:

구문: CBandUserClassLimit 클래스 이름 제한

class_name – 지정된 클래스의 이름(IP 범위)

제한 – 소비량, 사용 단위: K(Kilo), M(Mega), G(Giga), Ki(Kibi), Mi(Mebi), Gi(Gibi)

* 이름: CBandUserExceededURL

설명: cband 가상 사용자 제한이 초과될 때 표시할 URL,

지정하지 않으면 503 에러 발생(가상호스트에서)

문맥:

구문: CBandUserExceededURL URL

* 이름: CBandUserExceededSpeed

설명: 가상 cband 사용자의 전송량 초과 시 전송 속도 제한을 설정합니다.

문맥:

구문: CBandUserExceededSpeed ​​kbps rps max_conn

kbps – 초당 최대 전송 속도

rps – 초당 최대 요청 수

max_conn – 최대 동시 연결 수

* 이름: CBandUserScoreboard

설명: cband 가상 사용자에 대한 스코어보드 파일을 지정합니다.

문맥:

구문: CBandUserScoreboard 경로

(경로는 Apache 권한(nobody 또는 Apache)으로 쓰기 가능해야 함)

* 이름: CBandUserPeriod

설명: 가상 cband 사용자 용량 제한 기간(이 기간이 지나면 측정된 용량이 삭제됩니다.

)

문맥:

구문: CBandUserPeriod 기간

주기 – 단위: S(초), M(분), H(시), D(일), W(주)

예: CBandUserPeriod 1W

CBandUserPeriod 14D

CBandUserPeriod 60M

* 이름: CBandUserPeriodSlice

설명: cband 가상 사용자의 기간을 분할할 기간을 지정합니다.

기본값: slice_len = 제한

문맥:

구문: CBandUserPeriodSlice slice_length

예: CBandUserLimit 100G

CBandUserPeriod 4W

CBandUserPeriodSlice 1W

4주는 1주 단위로 나뉩니다(4w/1w = 4). 용량은 100G/4=25G

첫 주에 25G, 두 번째 주에 50G 등등.

================================================== =====================

관리자 모드 – https://domain/cband-status

관리자 모드(xml) – http://domain/cband-status?xml

사용자 모드 – http://domain/cband-me

사용자 모드(xml) – http://domain/cband-status-me?xml

액세스 http://domain/cband-status


위의 사진 표 내용

가상 호스트

가상 호스트 이름: 설정한 VHost 목록

reset all/reset : 모든 가상 호스트에 대한 레코드 재설정/이 가상 호스트에 대한 레코드 재설정

새로 고침 시간: 지정된 시간이 경과하면 새로 고침

Total Limit/Slice/Used: 스플릿 기간에 따른 가상호스트 트래픽/트래픽/지정된 기간 동안 트래픽 사용량 제한

Class 0 Limit/Slice/Used: 해당 IP 범위에 대한 트래픽 제한 / 스플릿 기간별 트래픽 / 해당 IP 범위에서 사용되는 트래픽

Class 1 Limit/Slice/Used: 해당 IP 범위에 대한 트래픽 제한 / 스플릿 기간별 트래픽 / 해당 IP 범위에서 사용되는 트래픽

Class 2 Limit/Slice/Used: 해당 IP 범위에 대한 트래픽 제한 / 스플릿 기간별 트래픽 / 해당 IP 범위에서 사용되는 트래픽

kbps Limit/Current: 초당 최대 전송 속도 / 측정된 전송 속도

rps Limit/Current: 초당 최대 요청 수 / 측정된 요청 수

연결 제한/현재: 최대 동시 연결 수 / 현재 동시 연결 수

user : 지정된 사용자

원격 클라이언트

원격 IP: 인증된 사용자의 IP 주소

가상 호스트: 연결된 가상 호스트의 이름

연결 제한/현재: 해당 IP에 대한 방문자 수 / 해당 IP에 대한 사용자 수를 제한합니다.

마지막 속도/연결(kbps): 마지막 연결 속도

서버 요약

서버 가동 시간 : 서버 가동 시간

총 가상 호스트: 총 가상 호스트 수

총 사용자: 총 사용자 수

총 연결 수: 총 연결 수

총 트래픽: 총 트래픽

현재 속도: 측정된 속도

================================================== =====================

.

통계 화면의 Apache 인증

통계 화면은 IP 형태로 제한하는 것을 권장합니다.

그러나 IP가 자주 변경되는 사용자에게는 매번 IP를 변경하는 것이 번거로울 수 있습니다.

따라서 이 경우 Apache 인증을 사용하는 것이 편리합니다.

================================================== =====================

# vi /etc/httpd/conf/httpd.conf

================================================== =====================

SetHandler cband-status-me

거부 명령, 허용

모두에게 거부됨

모든 사람이 허용

SetHandler cband-status-me

거부 명령, 허용

모두에게 거부됨

모든 사람이 허용

SetHandler cband 상태

AuthName “트래픽 관리자 페이지”

인증 유형 기본

AuthUserFile /usr/local/apache/htdocs/.htpasswd

유효한 사용자가 필요합니다

#Deny 명령, 허용

# 모두에게 거절당했다

#접근을 허용하려면 IP에서 허용

#모두 허용

이렇게 변경

================================================== =====================

htaccess 파일 생성

# vi /usr/local/apache/htdocs/.htaccess

================================================== =====================

AuthName “로그인”

인증 유형 기본

AuthUserFile /usr/local/apache/htdocs/.htpasswd

AuthGroupFile /dev/null

유효한 사용자가 필요합니다

================================================== =====================

AuthName //인증 창의 이름

AuthType // 인증 유형으로 Basic을 입력합니다.

AuthUserFile //인증 비밀번호를 기록할 파일명

AuthGroupFile //그룹 인증을 위한 파일명

예에서 /dev/null을 입력하여 그룹 인증을 비활성화합니다.

인증된 사용자만 액세스할 수 있도록 하려면 require //valid-user를 입력하십시오.

================================================== =====================

.htpasswd 파일 생성(처음 계정 생성 시)

cd /usr/local/아파치/htdocs/

htpasswd -c /usr/local/apache/htdocs/.htpasswd(생성할 ID 입력)

새 비밀번호: (비밀번호 입력)

새 비밀번호 재입력: (비밀번호 입력)

================================================== =====================

.htpasswd 파일 생성(초기 생성 후 신규 사용자 추가 시)

htpasswd -c /usr/local/apache/htdocs/.htpasswd(생성할 ID 입력)

새 비밀번호: (비밀번호 입력)

새 비밀번호 재입력: (비밀번호 입력)

================================================== =====================