안녕하세요
이전글에서 tlsv1.3 기반의 APM을 설치를 진행했습니다.
이번에는 실제 tlsv1.3이 인증서에서 적용이 되었는지 확인하기 위해서 무료 인증서 letsencrypt를 이용해서 설치를 진행하겠습니다.
기존 letsencrypt는 90일 기간이지만 무료인증서중 180일 보장하는 buypass 인증서가 있어 이것으로 인증서를 설치하겠습니다.

간단한 웹페이지를 만들겠습니다.
디렉토리도 만들겠습니다.

도메인이름은 test.co.kr 으로 하겠습니다.

mkdir -p /home/test.co.kr/public_html
echo "TEST test.co.kr index Page" >> /home/test.co.kr/public_html/index.html



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

<VirtualHost *:80>
ServerAdmin root@localhost
DocumentRoot "/home/test.co.kr/public_html"
ServerName test.co.kr
ServerAlias www.test.co.kr
ErrorLog "logs/test.co.kr-error_log"
CustomLog "logs/test.co.kr-access_log" common

<Directory "/home/test.co.kr/public_html/*">
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>

</VirtualHost>

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

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
-> 주석처리 풀기

#Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-vhosts.conf
-> 주석처리 해제 후 저장

# apachectl -t
Syntax OK

# apachectl -S

VirtualHost configuration:
*:80 test.co.kr (/usr/local/apache/conf/extra/httpd-vhosts.conf:32)
ServerRoot: "/usr/local/apache"
Main DocumentRoot: "/usr/local/apache/htdocs"
Main ErrorLog: "/usr/local/apache/logs/error_log"
Mutex authdigest-client: using_defaults
Mutex ssl-stapling: using_defaults
Mutex ldap-cache: using_defaults
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/usr/local/apache/logs/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex cache-socache: using_defaults
Mutex authdigest-opaque: using_defaults
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex rewrite-map: using_defaults
PidFile: "/usr/local/apache/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="nobody" id=99
Group: name="nobody" id=99

apache 설정파일 적용및 실행
# /etc/init.d/apachectl graceful

SSL 관련 모듈 확인
# apachectl -l
Compiled in modules:
core.c
mod_so.c -> 동적 방식 (DSO)로 설치되어있다. 만약 정적방식일 경우 mod_ssl.c로 설치가 되어있습니다.
http_core.c
prefork.c

mod_ssl.so 모듈이 실제 있는지 확인
ll /usr/local/apache/modules/ | grep ssl
-rwxr-xr-x 1 root root 615936 Jul 26 06:26 mod_ssl.so

# vi /usr/local/apache/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
-> 해당 부분 주석처리 해제 후 저장

무료인증서 툴 certbot 관련 설치

yum install -y certbot* certbot-apache certbot-nginx

무료인증서를 받는 방식중에서 webroot 방식으로 하겠습니다.

90일 인증서 발급 명령어
# certbot certonly --webroot --agree-tos -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

180일 인증서 발급 명령어
# certbot certonly --webroot --agree-tos --server https://api.buypass.com/acme/directory -m [서버관리자이메일] -w [웹루트 디렉토리 위치] -d [도메인 1] -d [도메인 2(보통 www.원도메인)] -d [도메인 3] --rsa-key-size 4096

마지막에 --dry-run 을 붙이면 테스트도 가능합니다.

dry-run 하면 결과값을 알 수 있습니다. 성공을 한다면 저렇게 나옵니다.
IMPORTANT NOTES:
- The dry run was successful.

아래 그림은 인증서를 발급 결과와 발급받은 인증서 위치 입니다.




ssl.conf를 원본을 백업 복사해주자
cp -arp /usr/local/apache/conf/extra/httpd-ssl.conf /usr/local/apache/conf/extra/httpd-ssl.conf_ori

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

Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol all +TLSv1.2 +TLSv1.3
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
<VirtualHost *:443>
ServerAdmin root@localhost
DocumentRoot "/home/test.co.kr/public_html"
ServerName test.co.kr
ServerAlias www.test.co.kr
ErrorLog "logs/ssl-test.co.krr-error_log"
TransferLog "logs/ssl-test.co.kr-access_log"

<Directory "/home/test.co.kr/public_html/*">
AllowOverride All
Options FollowSymLinks
Require all granted
</Directory>

SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/test.co.kr/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/test.co.kr/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.co.kr/fullchain.pem
#SSLCACertificatePath "/usr/local/apache/conf/ssl.crt"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog "/usr/local/apache/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>
ssl.conf 파일 내용 추가 및 변경하고 저장

# apachectl -t
Syntax OK

Apache에 연동된 도메인 목록 확인
# apache -S
VirtualHost configuration:
*:80 test.co.kr (/usr/local/apache/conf/extra/httpd-vhosts.conf:32)
*:443 test.co.kr (/usr/local/apache/conf/extra/httpd-ssl.conf:121)


apache 설정파일 변경후 적용 실행
/etc/init.d/apachectl graceful

https://도메인이름.co.kr


적용된 인증서 180일 인증기간

실제 서버에서 인증서 만료기간 확인 명령어
# openssl x509 -in /etc/letsencrypt/live/test.co.kr/fullchain.pem -noout -dates
notBefore=Jul 26 02:33:30 2022 GMT
notAfter=Jan 21 22:59:00 2023 GMT


TLS 버전 확인 사이트
https://www.ssllabs.com/ssltest/index.html
TLS Checker - Instant Results | CDN77.com


2번째 링크에서 해당 도메인을 TLS 검사를 해봤을때 TLS 1.3 1.2는 enable로 나와있습니다.
그러나 TLS1.1, TLS1.0도 enable로 되어 있디만 앞에 deprecated, 즉 권장하지 않는다고 나와 있습니다.
그렇기 때문에 이것을 변경하고자 합니다.
TLSv1.2, TLSv1.3 을 제외한 나머지를 disabled로 변경해봅니다.


ssl.conf 에서 TLSv1.2, TLSv1.3 을 제외한 나머지를 disabled로 변경하기위해 아래 설정을 변경합니다.
# vi /usr/local/apache/conf/extra/httpd-ssl.conf
SSLProtocol all +TLSv1.2 +TLSv1.3 -> 이 설정은 all 때문에 모두 포함됩니다.
아래와 같이 변경해줍니다.
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

변경 후 apachectl -t 문법검사 후 통과가 된다면 세션때문에 재시작을 해줍니다.
/etc/init.d/apachectl restart

위 그림과 같이 disabled로 변경되어 안전하게 사이트를 운영할 수 있습니다.

실제 타 서버에서 해당 서버가 tls 버전이 어떻게 되는지 확인해봅시다.

openssl 작업을 하지 않은 순정 서버에서 확인해봅시다.

# openssl s_client -connect test.co.kr:443 -tls1

# openssl s_client -connect test.co.kr:443 -tls1_1

# openssl s_client -connect test.co.kr:443 -tls1_2




# openssl s_client -connect test.co.kr:443 -tls1_3
참고로 저 명령어는 애초에 서버에 설치되어 있는 openssl 버전 기반으로 하기 때문에 순정 CentOS 에서는 불가능합니다.
그래서 openssl 소스업그레이드를 한 CentOS7버전에서 저 명령어를 입력해야합니다.

만약 간단하게 소스업그레이드를 안하고 확인하고 싶다면
# yum install -y openssl11*
# openssl11 s_client -connect test.co.kr:443 -tls1_3

이상입니다.
========================================== 끝 ===============================================

'WEB&WAS > Apahce' 카테고리의 다른 글

Apache 기본페이지 설정 및 디렉토리 리스팅 설정  (0) 2022.02.18
Apache mod_url 설정  (0) 2022.01.09
Mod_cband 모듈 추가설치  (0) 2021.05.07
Alma Linux 8 apache 소스설치  (0) 2021.04.22
Oracle Linux8 apache 소스설치  (0) 2021.04.13
Posted by returnrisk
,

웹사이트로 접속할때 기본적으로 보통 index.html, index.php index.jsp 으로 웹사이트를 띄웁니다.

간혹가다 homepage.html homepage.php homepage.jsp 으로 기본파일 이름을 바꿔서 하는경우도 있습니다.

 

그러나 이번 글에서는 해당 기본 페이지가 없을때 파일리스트들을 출력하게 하거나 접근 불가로 설정하는 방법에 알아보겠습니다.

 

- 기본 환경

CentOS 7

Apache Source Install

 

Apache 설정은 Ubuntu 와 다름없는 설정입니다. 동일하다고 보면 됩니다.

 

일단 기본페이지 설정 부분입니다.

저의 Apache 전역설정파일 httpd.conf 입니다.

 

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

 

<IfModule dir_module>

    DirectoryIndex index.html index.php index.jsp

</IfModule>

여기서 만약에 .html 파일이 아닌 .php 파일을 먼저 띄우고 싶다면 

DirectoryIndex index.php index.html index.jsp 

이렇게 순서를 바꾸면 됩니다.

아래에는 사이트 접속시 나오는 내용입니다.

 

 

또는 기본페이지 이름을 바꾸고싶다면

 

<IfModule dir_module>

    DirectoryIndex homepage.html homepage.php homepage.jsp

</IfModule>

 

이렇게 바꾸면 해당 페이지를 먼저 부르게 됩니다. 

 

 

이번에는 index.html index.php index.jsp 로 기본페이지를 설정했을때 index파일이 없을때 경우입니다.

이렇게 접속하면 이전에 작업했던 파일목록 homepage.html 이 나옵니다. 보안상 안좋습니다.

 

현재 어떻게 설정되어 있는지 확인해봅니다.

cat 명령어는 파일 내용확인입니다.

| 는 or 같은 옵션으로 추가 옵션을 쓸수 있습니다.

egrep 는 grep 의 확장버전입니다.

egrep -v '^[[:space:]]*(#.*)?$' 이부분은 정규식이고,

# 으로 시작하는 줄까지 제외 입니다.

 

아무것도 없는 빈줄 제외
cat 파일명 | grep -v ^$
grep -e "^$" -v 파일명

공백문자 있는 줄까지 제외
cat 파일명 | egrep -v ^[[:space:]]*$

#으로 시작하는 줄까지 제외
cat 파일명 | egrep -v '^[[:space:]]*(#.*)?$'

 

여기서 

 <Directory "/home/www/public_html1">
        AllowOverride All
        Options Indexes FollowSymLinks
        Require all granted
 </Directory>

 

<Directory "/home/www/public_html1">

-> 해당설정은 /home/www/public_html 에서 디렉토리 옵션설정을 하겠다는 내용입니다.

 

AllowOverride 지시자는 어떻게 접근을 허락할 것인가에 대한 설정이다.

종류 설명
None 이 값이 설정되면 AccessFileName에 지정된 파일을 액세스 인증파일로 인식하지 않는다.AccessFileName의 값이 대부분 .htaccess 이므로 이를 무시하게 된다. 아주 제한적인 접근만을 허용할때 사용하는 값이다.
All 이전의 인증방식에 대하여 새로운 접근인증방식을 우선적용하도록 Override를 허용한다.
AuthConfig AccessFileName 지시자에 명시한 파일에 대하여 AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require 등과 같은 클라이언트 인증지시자의 사용을 허용한다. htpasswd 유틸리티를 이용하여 특정디렉토리의 접근은 AccessFileName에 명시한 파일(.htaccess)로 제어하고자 할 때에 해당 디렉토리내에 이 값을 주로 사용한다.(디렉토리 인증설정)
FileInfo AccessFileName 지시자에 명시한 파일에 대하여 AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority 등과 같은 문서유형을 제어하는 지시자 사용을 허용한다.
Indexes AccessFileName 지시자에 명시한 파일에 대하여 AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName 등과 같은 디렉토리 Indexing을 제어하는 지시자 사용을 허용한다.
Options AccessFileName 지시자에 명시한 파일에 대하여 Options 그리고 XBitHack등과 같은 특정 디렉토리옵션을 제어하는 지시자 사용을 허용한다.
Limit AccessFileName 지시자에 명시한 파일에 대하여 allow, deny, 그리고 order 등과 같은 호스트 접근을 제어하는 지시자 사요을 허용한다.

 

Options
-> 지정한 디렉토리이하에 모든 파일과 디렉토리들에 적용할 접근제어를 설정합니다. 즉 디렉토리를 보여줄 것인가? CGI를 허용할 것인가? SSI를 허용할 것인가? 등의 설정을 여기서 하게 된다. 특정 옵션만 제거하거나 추가할때는 + / - 를 옵션값 앞에 붙인다.

ex) Options -FollowSymLinks    , Options +Indexes.

종류 설명
None 모든 허용을 하지 않는다. 즉, None 설정으로 이외의 다른 설정들은 모두 무시한다
All MultiViews를 제외한 모든 옵션설정을 허용한다. Options 값이 공백일때도 All과 같다. (Options (없음))
Indexes 웹서버의 디렉토리 접근시에 DirectoryIndex에서 지정한 파일(index.html)이 존재하지 않을 경우에 디렉토리내의 파일목록리스트를 웹브라우저로 보여준다. 서버보안을 위해 사용하지 않는 것이 좋다
Includes SSI 사용을 허용하는 설정이다. mod_include.c 라는 모듈이 필요하며 기본적으로 로드되어 있다.
IncludesNOEXEC SSI 사용은 허용되지만 #exec 사용과 #include는 허용되지 않는다. SSI를 사용하면서 시스템에 위험한 SSI의 실행태그는 허용하지 않겠다는 설정이다.
FollowSymlinks 심볼릭 링크를 허용한다. Rewrite 시 필요 .이 옵션을 지정하면 웹브라우저에서 링크파일의 경로까지도 확인 할 수 있게된다. 보안상 이 값은 설정하지 않는 것이 좋다.
ExecCGI perl등과 같은 CGI 실행을 허용하기 위한 설정이다. 원래 아파치에서 CGI 사용은 ScriptAlias로 지정된 위치에서 사용하는 것이 기본이다. 하지만 ScriptAlias가 지정되지 않은 디렉토리에 이 옵션이 지정되어있다면 지정된 디렉토리내에서는 CGI 사용이 허용된다. 물론 이 경우에도 "AddHandler cgi-script" 지시자에서 정의한 확장자만 유효하다.
MultiViews 웹브라우저의 요청에 따라 적절한 페이지로 보여준다. 웹브라우저의 종류나 웹문서의 종류에 따라서 가장 적합한 페이지를 보여줄 수 있도록하는 설정이다.

 

Require 액세스 권한 설정

 

Apache에서 사용되는 모든 파일을 대상으로 접근 제한을 설정할 수 있다. 접근 제한 구역 컨테이너 등을 사용하여 디렉토리 단위와 파일 단위로 설정할 수 있다.

형식 의미
Require all granted 모든 액세스 허용
Require all denited 모든 액세스 거부
Require ip IP주소 해당 IP 주소 허용
Require not ip IP주소 해당 IP 주소 거부
Require host 호스트 해당 호스트 허용
Require not host 호스트 해당 호스트 거부
 
파일 목록들이 안보이게 설정해줍니다. Indexes 제거합니다.

 <Directory "/home/www/public_html1">
        AllowOverride All
        Options FollowSymLinks
        Require all granted
 </Directory>
</VirtualHost>

 

 

참조 http://www.devkuma.com/books/pages/1376

'WEB&WAS > Apahce' 카테고리의 다른 글

CentOS 7 TLS 1.3 인증서 확인  (0) 2022.07.26
Apache mod_url 설정  (0) 2022.01.09
Mod_cband 모듈 추가설치  (0) 2021.05.07
Alma Linux 8 apache 소스설치  (0) 2021.04.22
Oracle Linux8 apache 소스설치  (0) 2021.04.13
Posted by returnrisk
,

기본적으로 apache는 미국에서 만들어진 기반 웹프로그램으로 US 언어로 만들어진 프로그램입니다.

웹소스파일을 영어파일로 기본적으로 올려야하며, 만약 한글이름으로 된 파일을 올리면 추가적으로 모듈을 설치해야합니다.

 

URL 한글 인식설정

mod_url 소스 설치 시

/usr/local/apache/bin/apachectl -l

mod_so.c → 모듈이 있을 시 dso 방식.

 

※ SO(static object) 방식으로 설정 되어있다면 재컴파일을 진행해야 합니다. (mod_so.c 가 없다면 재컴파일)

-아래 url 로 이동 후, 적합한 버전을 다운받습니다.

 

Apache 소스 설치 시

cd /usr/local/src/APM_Setup

wget https://kldp.net/modurl/release/2188-mod_url-apache2-1.25.tar.bz2 

tar xvf 2188-mod_url-apache2-1.25.tar.bz2

cd mod_url-apache2/

/usr/local/apache/bin/apxs -iac mod_url.c

 

위의 설치가 완료되었다면 httpd.conf 설정파일에 다음과 같은 내용이 자동으로 추가됩니다 .

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

- 소스 설치의 경우

 

LoadModule redurl_module modules/mod_url.so

 

다음과 같은 내용을 httpd.conf 에 추가합니다.

<IfModule mod_url.c>

CheckURL On

</IfModule>

 

 

설정이 끝났습니다. apache 재시작으로 mod_url 을 정상적으로 적용시킵니다.

 

mod_url 작동 테스트

 

 

 

 

 

Posted by returnrisk
,

참고 사이트

blog.naver.com/ncloud24/221598779041

idchowto.com/?p=41533

 

 

Mod_cband란?

 

Apache 사이트 상에서 VirtualHost의 접속량 및 트래픽 량을 체크 및 해당 VirtualHost를 통해

어떤 아이피가 접속하였는지 여부 확인 등을 진행하거나 해당 기록을 통해 사이트에 제한을 주는 용도로 사용되는 Apache의 Module입니다. Apache1에서는 mod_throttle를 사용합니다.

 

기능

* apache2 용 트래픽 제한 모듈

* 사용자별 대역폭 제한

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

* 목적지별 대역폭 제한

* 다운로드 속도 제한

* 아이피대역별 제한

* 초당 요청수 제한

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

 

등 이정도가 있다고 볼수 있습니다.

 

Mod_cband 설치

 

# cd /usr/local/src

# 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 -j 8

 

make를 하면 오류가 나온다.

Make 도중 Error

 

src/mod_cband.c: In function 'mod_cband_get_dst':

src/mod_cband.c:1333:47: error: 'conn_rec' has no member named 'remote_ip'

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

                                               ^

src/mod_cband.c: In function 'mod_cband_get_remote_host':

src/mod_cband.c:1362:10: error: 'struct conn_rec' has no member named 'remote_ip'

     if (c->remote_ip != NULL)

          ^

src/mod_cband.c:1363:20: error: 'struct conn_rec' has no member named 'remote_ip'

  addr = inet_addr(c->remote_ip);    

                    ^

src/mod_cband.c:1365:10: error: 'struct conn_rec' has no member named 'remote_addr'

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

          ^

src/mod_cband.c: In function 'mod_cband_update_speed':

src/mod_cband.c:1905:19: warning: variable 'time_last_request' set but not used [-Wunused-but-set-variable]

     unsigned long time_last_request;

                   ^

src/mod_cband.c: In function 'mod_cband_check_connections_speed':

src/mod_cband.c:2963:19: warning: variable 'time_now' set but not used [-Wunused-but-set-variable]

     unsigned long time_now;

                   ^

apxs:Error: Command failed with rc=65536

make: *** [src/.libs/mod_cband.so] 오류 1

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

-rw------- 1 root root 115749 11월 15  2006 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를 바꿔줘야 한다.

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

# make install

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

 

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

 

LoadModule cband_module modules/mod_cband.so

이렇게 모듈이 추가되어 있습니다.

맨 아래 하단에 설정 값 입력

<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>

 

여기서 Allow from all 로 설정해놓고 확인할려면 #Deny from all를 주석을 풀고  Allow from all 를 주석을 해준다음 접속을 허용할 IP를 설정해준다.

 

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

 

<VirtualHost *>

 ServerAlias 도메인.tk

 ServerName  IP등록

 DocumentRoot /usr/local/apache/htdocs

 CBandLimit 100Mi

 CBandPeriod 1D

 CBandSpeed 1024 10 30

 CBandRemoteSpeed 20kb/s 3 30

 CBandExceededURL http://www.도메인.tk/traffic_exceeded.html

</VirtualHost>

 

위 설정은 도메인.tk에 하루에 100M의 트래픽을 설정, 100M를 초과시 CBandExceededURL에서 지정된 페이지가 뜨며, 지정하지 않았다면, 503 에러 페이지가 뜨게됩니다.

참고로 제한을 하지 않고 보기만 한다면, CBandPeriod 부분만 있으면 됩니다. 

속도를 1024kbps 로 제한, 초당 10번 연결, 동시접속자를 30으로 제한

 

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

# systemctl restart apachectl

 

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

 

cband 단위 & 설정 설명

 

단위

 

전송 속도 단위

kbps, Mbps, Gbps - bits per second, 의미: 1024, 1024*1024, 1024*1024*1024 bps 

kb/s, Mb/s, Gb/s - bytes per second, 의미: 1024, 1024*1024, 1024*1024*1024 b/s 

기본 값 : kbps

 

트래픽 제한 단위

K, M, G - bytes, 의미: 1000, 1000*1000, 1000*1000*1000 bytes 

Ki, Mi, Gi - bytes, 의미: 1024, 1024*1024, 1024*1024*1024 bytes 

기본 값: K

 

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

기본 값 : S

 

설정

 

     * 이름 : CBandDefaultExceededCode

         설명 : 제한을 초과했을시 보여줄 에러 코드

         문맥 : Server config

         문법 : CBandDefaultExceededCode HTTP_CODE

         예제 : CBandDefaultExceededCode 509 

 

     * 이름 : CBandScoreFlushPeriod

         설명 : scoreboard 파일에 기록할 요청수, mod_cband 의 성능에 영향을 준다.

         기본값 : 1

         문맥 : Server config

         문법 : CBandScoreFlushPeriod 요청수

         예제 : CBandScoreFlushPeriod 100  ( 매 100번의 요청에 한번씩 scoreboard 파일에 기록)

 

     * 이름 : CBandSpeed

         설명 : 가상호스트 도메인의 최대 속도, 요청수, 접속수  설정

         문맥 : <Virtualhost>

         문법 : CBandSpeed kbps rps max_conn

                kbps - 초당 최대 전송속도

                rps - 초당 최대 요청수

                max_conn - 최대 동시 접속수 

         예제 : CBandSpeed 1024 10 30

                 최대 1024kbps전송속도로 제한, 초당 10개의 요청 처리, 동시 접속을 30개로 제한.

 

     * 이름 : CBandRemoteSpeed

        설명:  접속자(IP)의 최대속도, 요청수, 동시 접속수 제한 (CBandSpeed와 비슷하지만, 접속자당 설정)

        문맥: <Virtualhost>

        문법: CBandRemoteSpeed [kbps] [rps] [max_connect]

            kbps - 초당 최대 전송속도

            rps - 초당 최대 요청수

            max_conn - 최대 동시 접속수

        예제: CBandRemoteSpeed 20kb/s 3 3

            호스트 접속자(ip)에 대해 1024kbps 전송속도로 제한하며,

            초당 10 개의 요청을 처리하고, 동시 접속을 30 개로 제한

 

      * 이름 : CBandClassRemoteSpeed

         설명 : 정의한 class(ip 범위)에 대해 최대속도, 요청수, 접속수 제한

         문맥 : <Virtualhost>

         문법 : CBandClassRemoteSpeed class_name kbps rps

                  class_name - 이미 정의한 클래스 이름 (IP범위)

                  kbps - 초당 최대 전송속도

                  rps - 초당 최대 요청수

                  max_conn - 최대 동시 접속수

         예제 : <CBandClass googlebot_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개로 제한.

 

     *   이름 : CBandRandomPulse

         설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.

                   부하가 많을때는 자동 Off된다.

         문맥 : Global

         문법 : CBandRandomPulse On/Off

 

     *  이름 : CBandLimit

         설명 : 제한할 전송량을 설정한다. (기간은 CBandPeriod 에서 설정)

         문맥 : <Virtualhost>

         문법 : CBandLimit limit

                  limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

         예제 : CBandLimit 10M

                    전송양을 10M(10*1000*1000bytes)로 제한한다.

                  CBandLimit 10Mi

                    전송양을 10M(10*1024*1024bytes)로 제한한다.

 

     *  이름 : CBandClassLimit

         설명 : 정의한 class(ip범위)에 대해 제한할 전송량 설정.

         문맥 : <Virtualhost>

         문법 : CBandClassLimit class_name limit

                  class_name - 이미 정의한 클래스 이름(ip범위)

                  limit - 전송량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

 

      * 이름 : CBandDefaultExceededURL

         설명 : 트래픽 제한을 초과했을때보여줄 URL (지정하지 않으면, 503 에러 페이지)

         설정시 :CBandDefaultExceededURL URL

 

      * 이름 : CBandExceededURL

         설명 : 제한을 초과했을시 보여줄 URL, 지정하지 않으면 503 에러 발생 ( 가상호스트에서 ) 

         문맥 : <Virtualhost>

         문법 : CBandExceededURL URL

 

      * 이름 : CBandExceededSpeed

         설명 : 전송양을 초과했을시 , 전송속도 제한 설정.

         문맥 : <Virtualhost>

         문법 : CBandExceededSpeed kbps rps max_conn

                  kbps - 초당 최대 전송속도

                  rps - 초당 최대 요청수

                  max_conn - 최대 동시 접속수

 

       * 이름 : CBandScoreboard

         설명 : 가상호스트의 scoreboard 파일 지정. (성능향상을 위해 필요)

         문맥 : <Virtualhost>

         문법 : CBandScoreboard path 

                  (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)

 

      * 이름 : CBandPeriod

         설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 삭제됨)

         문맥 : <Virtualhost>

         문법 : CBandPeriod period

                  period - 사용단위: S (초), M (분), H (시간), D (일), W (주)

         예제 : CBandPeriod 1W  (1주일)

                  CBandPeriod 14D  (14일)

                  CBandPeriod 60M  (60분)

 

      * 이름 : 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 이렇게 나눠 처리 됨.

 

      * 이름 : <CBandUser>

         설명 : 한사용자에 여러 도메인을 쓸 경우 사용함, 새로운 cband 가상 사용자 설정

         문맥 : Server config

         문법 : <CBandUser user_name>

 

설정하는방법

 

<CBandUser 유저이름>

CBandUserLimit 100Mi

CBandUserPeriod 1D

</CBandUser>

 

<VirtualHost *>

ServerName test.com

Document /home/test/public_html

CBandUser 유저이름

</VirtualHost>

 

<VirtualHost *>

ServerName test1.kr

Document /home/test/public_html2

CBandUser 유저이름

</VirtualHost>

 

     * 이름 : CBandUserSpeed

         설명 : cband 가상 사용자의 속도, 요청수, 동시 접속수 제한 

         문맥 : <CBandUser>

         문법 : CBandUserSpeed kbps rps max_conn

                  kbps - 초당 최대 전송속도

                  rps - 초당 최대 요청수

                  max_conn - 최대 동시 접속수

         예제 : CBandUserSpeed 100kb/s 10 5

 

     * 이름 : CBandUserLimit

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

         문맥 : <CBandUser>

         문법 : CBandUserLimit limit

                  limit - 사용용량, 사용단위: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

         예제 : CBandUserLimit 10M

                  CBandUserLimit 10Mi

 

     * 이름 : 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)

 

      * 이름 : CBandUserExceededURL

         설명 : cband 가상 사용자의, 제한을 초과했을시 보여줄 URL,

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

         문맥 : <CBandUser>

         문법 : CBandUserExceededURL URL

 

     * 이름 : CBandUserExceededSpeed

         설명 : cband 가상 사용자의, 전송양을 초과했을시 , 전송속도 제한 설정.

         문맥 : <CBandUser>

         문법 : CBandUserExceededSpeed kbps rps max_conn

                  kbps - 초당 최대 전송속도

                  rps - 초당 최대 요청수

                  max_conn - 최대 동시 접속수

 

     * 이름 : CBandUserScoreboard

         설명 : cband 가상 사용자의, scoreboard 파일 지정.

         문맥 : <CBandUser>

         문법 : CBandUserScoreboard path

                  (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)

 

    *  이름 : CBandUserPeriod

         설명 : cband 가상 사용자의, 용량제한기간(이 기간이 지나면, 측정되었던 용량은 삭제됨.)

         문맥 : <CBandUser>

         문법 : CBandUserPeriod period

                  period - 사용단위: S (초), M (분), H (시간), D (일), W (주)

         예제 : CBandUserPeriod 1W

                  CBandUserPeriod 14D

                  CBandUserPeriod 60M

 

      * 이름 : CBandUserPeriodSlice

         설명 : cband 가상 사용자의, 기간을 나눌 기간 명시

         기본값 : slice_len = limit

         문맥 : <CBandUser>

         문법 : CBandUserPeriodSlice slice_length

         예제 : CBandUserLimit 100G

                  CBandUserPeriod 4W

                  CBandUserPeriodSlice 1W

                   4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G 

                   1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.

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

관리자모드 - https://도메인/cband-status

관리자모드(xml) - http://도메인/cband-status?xml

사용자모드 - http://도메인/cband-me

사용자모드(xml) - http://도메인/cband-status-me?xml

 

http://도메인/cband-status 접속

 

위에 나온 사진 표의 대한 내용

 

Virtual hosts

Virtual host name : 자신이 설정한 VHost 목록

reset all/reset : 모든 vhost에 대한 기록을 리셋/해당 vhost에 대한 기록을 리셋

time to refresh : 해당 시간이 지나면 갱신

Total Limit/Slice/Used : 해당 vhost의 트래픽 제한 / 나눈 기간에 따른 트래픽 / 지정된 기간동안의 트래픽 사용량

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 : 초당 최대 요청수 / 측정된 요청 수

Connections Limit/Current : 최대 동시 접속자 수 / 현재 동시 접속자 수

user : 지정된 유저

 

Remote Client

Remote IP : 접속자 IP 주소

Virtualhost : 접속한 vhost 명

Connections Limit/Current : 해당 IP에 대한 접속자 수 제한 / 해당 IP의 접속자 수

Last speed/conn [kbps] : 마지막 접속자의 속도

 

Server summary

Server uptime : 서버의 가동 시간

Total virtualhosts : 총 vhost의 개수

Total users : 총 user 수

Total connections : 총 커넥션의 수

Total traffic : 총 트래픽

Current speed : 측정된 속도

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

통계화면에 아파치 인증 걸기

 

통계화면의 제한은 IP의 형태로 제한을 하는게 좋습니다

그러나 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.

따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.

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

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

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

<IfModule mod_cband.c>

 

  <Location /cband-status-me>

   SetHandler cband-status-me

   Order deny,allow

   Deny from all

   Allow from all

  </Location>

 

  <Location /~*/cband-status-me>

   SetHandler cband-status-me

   Order deny,allow

   Deny from all

   Allow from all

  </Location>

 

  <Location /cband-status>

   SetHandler cband-status

   AuthName "Traffic Adminstrator Page"

   AuthType Basic

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

   require valid-user

 

   #Order deny,allow

   #Deny from all 

   #Allow from 접속을 허용할 IP

   #Allow from all

  </Location>

 

</IfModule>

 

 

이렇게 변경해준다.

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

 

htaccess 파일생성하기

 

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

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

  AuthName "login"

  AuthType Basic

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

  AuthGroupFile /dev/null

  require valid-user

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

AuthName                  //인증창 이름

AuthType                    //인증타입으로 보통 Basic 입력

AuthUserFile             //인증패스워드를 기록할 파일명

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

                                           예제에서는 /dev/null 을 입력하여 그룹인증을 하지 않는 상태

require                         //valid-user 를 입력하여 인증된 사용자만 접속하도록 설정

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

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

cd /usr/local/apache/htdocs/

htpasswd -c /usr/local/apache/htdocs/.htpasswd [생성할 아이디 입력]

New password: [비밀번호 입력]

Re-type new password: [비밀번호 입력]

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

.htpasswd 파일 생성 (처음 생성이후 새로운 사용자를 추가할 경우)

 

htpasswd -c /usr/local/apache/htdocs/.htpasswd [생성할 아이디 입력]

New password: [비밀번호 입력]

Re-type new password: [비밀번호 입력]

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

'WEB&WAS > Apahce' 카테고리의 다른 글

Apache 기본페이지 설정 및 디렉토리 리스팅 설정  (0) 2022.02.18
Apache mod_url 설정  (0) 2022.01.09
Alma Linux 8 apache 소스설치  (0) 2021.04.22
Oracle Linux8 apache 소스설치  (0) 2021.04.13
buypass_SSL인증서  (0) 2021.01.15
Posted by returnrisk
,