Linux/CentOS2012. 4. 3. 00:21

Gmail for CentOS (http://www.jopenbusiness.com/mediawiki/index.php/CentOS)

CentOS 5.5 버전에서 sendmail을 사용하여 Gmail을 연동하여 보자.

  • sendmail 설치
yum install openssl sendmail sendmail-cf
yum install cyrus-sasl cyrus-sasl-plain
  • sendmail이 TLS 또는 SSL을 지원하는지 확인 한다.
#--- STARTTLS와 SASLv2가 있는지 확인
sendmail -d0.1 -bv root
  • SASL 2.1.21 이상을 지원하는지 확인 한다.
yum list | grep sasl
  • OpenSSL을 사용하여 sendmail에서 사용할 개인키와 공개키를 생성를 생성 한다.
  • sendmail 인증 정보를 생성 한다.
cd /etc/mail
mkdir auth
cd auth
vi /etc/mail/auth/authinfo
    AuthInfo:smtp.gmail.com "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호]"
    ### AuthInfo:smtp.gmail.com "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호]" "M:PLAIN"
    ### AuthInfo:smtp.gmail.com:587 "U:root" "I:[Gmail아이디]@gmail.com" "P:[Gmail비밀번호]" "M:PLAIN"

#---인증 파일의 hashdb(authinfo.db)를 생성 한다.
makemap hash authinfo < authinfo

#--- 인증파일경로의 퍼미션을 설정 한다.
chmod 700 /etc/mail/auth
chmod 600 /etc/mail/auth/*
  • vi /etc/mail/sendmail.mc
include('/etc/mail/sasl/sasl.m4')dnl            #--- Ubuntu Server에서만 추가
FEATURE(authinfo,hash /etc/mail/auth/authinfo)dnl
define('SMART_HOST','smtp.gmail.com')dnl
define('RELAY_MAILER_ARGS', 'TCP $h 587')dnl
define('ESMTP_MAILER_ARGS', 'TCP $h 587')dnl
define('confCACERT_PATH', '/etc/mail/certs')dnl
define('confCACERT', '/etc/mail/certs/CAcert.pem')dnl
define('confSERVER_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confSERVER_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confCLIENT_CERT', '/etc/mail/certs/mycert.pem')dnl
define('confCLIENT_KEY', '/etc/mail/certs/mykey.pem')dnl
define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define('confAUTH_OPTIONS', 'A')dnl
#--- 아래 라인 위에 추가 한다.
MAILER(smtp)dnl
  • sendmail.cf 생성
  • CentOS
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
service sendmail restart
  • Ubuntu Server
cd /etc/mail
make

#--- 필요한 경우 sendmail의 설정을 재 생성 한다. 
sendmailconfig

/etc/init.d/sendmail start
  • 최종 확인
echo '/map authinfo AuthInfo:smtp.gmail.com' | /usr/sbin/sendmail -bt
echo "this is a test" | sendmail -s ghkim@daou.co.kr
#--- ghkim@daou.co.kr 메일함에서 메일을 확인 한다.
  • 방화벽에서 587, 465 port를 개방 한다.
system-config-securitylevel
  • 기타 sendmail 설정
  • Access 설정
makemap hash /etc/mail/access.db < /etc/mail/access
  • Mail host 설정
vi /etc/mail/local-host-names
  • showinfo_sendmail.bash
#!/bin/bash
echo 'sendmail 버전  : sendmail 8.13.8'
echo '환경 파일      : vi /etc/mail/sendmail.mc'
echo '기동 종료      : service sendmail restart'
echo '서비스 확인    : ps -ef | grep sendmail | grep -v grep'
  • php.ini 설정
sendmail_path = /usr/sbin/sendmail -t

서비스 업체별 POP3, SMTP 주소

  • gmail.com (환경설정 - 전달 및 POP/IMAP - POP 다운로드 항목에서 사용설정을 해야 이용 가능)
  • IMAP: imap.gmail.com (SSL 사용, 포트: 993)
  • POP3: pop.gmail.com (SSL 사용, 포트: 995)
  • SMTP: smtp.gmail.com (SSL 사용, 포트: 465)
  • hanmail.net
  • POP3: pop.hanmail.net (SSL 사용, 포트: 995)
  • SMTP: smtp.hanmail.net (SSL 사용, 포트: 465)
  • nate.com
  • POP3: nate.com (포트: 110)
  • SMTP: 지원 안함 (다른 업체의 SMTP를 이용하는 수 밖에 없음)
  • naver.com (으뜸사용자만 이용 가능)
  • POP3: pop.naver.com (포트: 110)
  • SMTP: smtp.naver.com (포트: 25)
  • yahoo.co.kr
  • POP3: pop.mail.yahoo.co.kr (SSL 사용, 포트: 995)
  • SMTP: smtp.mail.yahoo.co.kr (SSL 사용, 포트: 465, 인증 사용)
  • yahoo.com
  • POP3: pop.mail.yahoo.com (SSL 사용, 포트: 995)
  • SMTP: smtp.mail.yahoo.com (SSL 사용, 포트: 465, 인증 사용)

참고 문헌

  • Ubuntu Server
  • CentOS

Outlook 설정

  • Microsoft Outlook를 실행하여 "도구 -> 계정 설정 -> 새로 만들기" 메뉴를 선택 합니다.
  • "Microsoft Exchange, POP3, IMAP 또는 HTTP"을 선택 합니다.

그림:GoogleOutlook001.png

  • "수동으로 서버 설정 또는 추가 서버 유형 구성"을 선택 합니다.

그림:GoogleOutlook002.png

  • "인터넷 전자 메일"을 선택 합니다.

그림:GoogleOutlook003.png

  • 필요한 정보를 입력하고 "기타 설정" 버튼을 선택 합니다.
  • 사용자 이름 : 사용자 이름
  • 전자 메일 주소 : 이메일 주소
  • 계정 유형 : IMAP
  • 받는 메일 서버 : imap.gmail.com
  • 보내는 메일 서버 : smtp.gmail.com
  • 사용자 이름 : 이메일 주소
  • 암호 : 비밀번호
  • 암호 저장 체크

그림:GoogleOutlook004.png

  • "고급" 탭을 선택하여 아래와 같이 설정 합니다.
  • 받는 메일 서버 : 993
  • 암호화된 다음 연결 방식 사용 : SSL
  • 보내는 메일 서버 : 25
  • 암호화된 다음 연결 방식 사용 : TLS

그림:GoogleOutlook005.png

  • "보내는 메일 서버" 탭을 선택하여 아래와 같이 설정 합니다.
  • "보내는 메일 서버 인증 필요" 체크
  • "받는 메일 서버와 동일한 설정 사용" 선택

그림:GoogleOutlook006.png

 

 

CentOS sendmail 메일 서버 설치, 설정 (http://blog.leadus.co.kr/119)

1) 메일 서버 설치 여부를 확인한다.

[root@localhost ~]# yum list |grep sendmail
sendmail.x86_64                       8.13.8-8.el5              installed
sendmail-cf.x86_64                    8.13.8-8.el5              installed
sendmail-devel.x86_64                 8.13.8-8.el5              installed

2) dovecot 설치한다.

[root@localhost ~]# yum list |grep dovecot
dovecot.x86_64                        1.0.7-7.el5               base
[root@localhost ~]# yum install dovecot.x86_64

dovecot의 개요
RHEL 4부터 사용되는 imap, pop3 서비스 제공 프로그램으로 기존의 imap
패키지에 비해 TLS/SSL을 지원하여 보안이 강화되었다. 또한 기존에는 imap, pop3
서비스가 inetd(xinetd)에 의해 작동하였지만, dovecot는 단독 데몬으로 작동한다.
참고로 관련정보는 http://www.dovecot.org(새 창으로 열기)에서 확인할 수 있다.

3) sendmail.mc 파일을 수정한다.
vi /etc/mail/sendmail.mc

아래의 부분을 확인한다. 주석처리되어 있으면 제거한다.
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

아래의 부분은 주석처리한다.
DAEMON_OPTIONS(`Port=smtp,Addr=112.169.173.161, Name=MTA')dnl
==> dnl DAEMON_OPTIONS(`Port=smtp,Addr=112.169.173.161, Name=MTA')dnl

4) sendmail.mc 적용
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

변경후 결과
-rw-r--r-- 1 root root 58368  6월 13 22:33 sendmail.cf
==> -rw-r--r-- 1 root root 58338  8월 31 16:33 sendmail.cf

5) 최종수신지 도메인 설정  
vi /etc/mail/local-host-names
leadus.co.kr  RELAY

test :
linkus.kr  RELAY

*** 스팸방지
Spam 방지 ( /etc/mail/access )
  linkus.kr  RELAY
 
  makemap hash /etc/mail/virtualusertable.db < /etc/mail/access  <- access 적용 access.db 파일 생성
  또는 /etc/mail 디렉토리에서 간단히 make

가상 메일 ( /etc/mail/virtualusertable )
  webmaster@linkus.kr root
   webmaster@linkus.kr 으로 오는 메일은 root 라는 실제계정이 받게 함

  makemap hash /etc/mail/virtualusertable.db < /etc/mail/virtualusertable
  또는 /etc/mail 디렉토리에서 간단히 make


6) Dovecot 설정
vi /etc/dovecot.conf
  protocols = pop3 <- imap 제외 pop3 만 사용
  listen = *  <- ipv6 사용 안 하고 ipv4 만 사용 ==> php3_listen = * 버전업되면서 바뀌었다.

7) 서비스 시작
 /etc/init.d/sendmail start
 /etc/init.d/saslauthd start <- smtp 인증을 위해 필요
 /etc/init.d/dovecot start

 

Posted by iWithJoy
Linux/CentOS2012. 3. 30. 00:17

[이 문서에 기술된 내용은 CentOS 4.1이 아닌 다른 linux 서버에서는 정상적으로 동작하지 않을 수 있으며 이해를 위해서 카테고리의 다른 문서부터 순서대로 읽는 것이 좋습니다.]

 

 

 

만일 설치부터 필자를 계속 따라오신 분이라면 현재의 서버엔 BIND 9가 설치되어 있을 것이다.

확인해 보도록 하자.

 

# rpm -qa | grep bind
bind-libs-9.2.4-2
bind-utils-9.2.4-2
ypbind-1.17.2-3
bind-9.2.4-2
bind-chroot-9.2.4-2

 

네임서버도 설치되어 있나 확인해 보자.

# rpm -qa | grep name
caching-nameserver-7.3-3

 

이젠 서버에선 DNS를 설정할 준비가 끝났다.

 

아래 점섬내의 글은 BIND가 설치되지 않으신 분들만 보도록 하자~~

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

1. 설치

네임서버를 구축하기에 앞서 설치에 필요한 주요 패키지 목록을 확인해 보자.

bind-9.3.4-10.pl.el5       :   bind의 기본 패키지.
bind-libs-9.3.4-10.pl.el5      :  bind 서버패키지와 utils패키지에 의해 사용되는 라이브러리.
bind-utils-9.3.4-10.pl.el5     :  dns 네임 서버를 질의하고 인터넷 호스트에 대한 정보를 찾는 유틸 모음이다. 이를 사용하여 주어진 호스트명에 ip주소를 결정할 수 있으며 등록된 도메인과 네트워크 주소에 관한 정보를 찾을 수 있다.
caching-nameserver-9.3.4-10.pl.el5    :  bind운영에 필요한 환경설정파일 모음 패키지.

이외에 bind 개발관련 패키지나 zone파일을 db화 할 수 있는 패키지등 많은 관련 패키지들이 있으나 dns 설치,운영에 필요한 주요 피키지는 위의 네가지라 할 수 있겠다.

설치가 되어 있지 않다면 패키지 설치에 유용한 도구인 yum을 이용하여 설치해 주자.
#yum install bind
#yum install caching-nameserver


이렇게 설치가 끝났다면, dns 실행 준비가 된 것 입니다.

- CentOS 4.1 설치시 패키지선택에서 DNS 이름서버를 선택하면 위의 내용이 모두 설치됨.
  (위와 같은 설치과정을 거칠 필요가 없음)

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

 

이해를 돕기위해 사용되는 예제에서 필자는 test.net 이란 가상의 도메인과 192.168.1.100 이란 공인IP를 사용하것으로 하겠다. (참고로 192.168.~ 로 시작되는 IP는 99% 공유기 IP이다.)

설마 아래의 내용을 보고 실제로 test.net으로 따라하시는 분은 없을거라 믿는다..

 

우선 도메인을 구입하기 위해서 whois.co.kr 에 접속했다.

test.net이란 도메인을 검색했더니 다행스럽게도 소유자가 없는 도메인으로 나와서

바로 회원으로 가입하고 1년 사용료 2만얼마를 내고 도메인을 구입했다.

 

네임서버를 지정하기 위해서 [내 도메인 관리]의 [호스트 관리] 메뉴로 들어가서...

ns.test.net 이란 호스트을 만들고 IP입력란에 192.168.1.100 라고 입력한후 호스트명 생성을 클릭.

 

[내 도메인 관리] - [네임서버 변경]으로 들어가서 1차 네임서버에 ns.test.net , 2차 네임서버는 whois에서 제공하는 네임서버명을 입력하고 저장했다.

(참고로 com 이나 .net은 외국도메인이라 적용되는데 평균 24시간정도가 소요된다.)

 

이제 다시 CentOS로 들어와서...

 

1.서버에서 도메인을 제일 먼저 찾는 곳

# vi /etc/hosts
=======================================================================================
127.0.0.1        test.net      localhost
192.168.1.100  ns.test.net  ns
=======================================================================================
위와 같이 바꾸도록 하자

 

2.서버에서 쓸 dns

# vi /etc/resolv.conf
=======================================================================================
domain test.net
search test.net
nameserver 192.168.1.100
nameserver 168.126.63.1
nameserver 168.126.63.2
=======================================================================================

 

3.도메인에 대한 ip를 찾을 때 참조할 순서
# vi /etc/host.conf
=======================================================================================
order hosts,bind

==> 초기 설치시 이렇게 되어 있으며, 의미는 /etc/hosts파일부터 찾고, bind에서 찾는다는의미
=======================================================================================

 

4.Zone 파일 및 케시 DNS서버에 대한 설정

# vi /etc/named.conf
=======================================================================================
options {
        directory "/var/named";        // zone 파일을 저장할 디렉토리
        // query-source address * port 53;  // DNS 서버의 ip와 포트 설정 (기본)
controls { //==> 127.0.0.1 에서 rndc로 접속시 컨트롤 가능하다는 의미
        inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
// 캐시 네임 서버 설정
zone "." IN {
        type hint;
        file "named.ca";
};
// localhost 에 대한 설정
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //다이나믹 하게 업데이트를 허용할것인지 설정한다. 대부분 none
};
// 127.0.0.X 에 대한 역 도메인
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
include "/etc/rndc.key";
=======================================================================================

아래는 CentOS 6.2에서 실제 정상으로 시작이 수행된 파일의 내용이다.
=======================================================================================
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        query-source      port 53;
        query-source-v6   port 53;
        allow-query     { any; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

//include "/etc/named.rfc1912.zones";


// localhost
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none; };  //    .  none
};
// 127.0.0.X
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
        allow-update { none; };
};
//include "/etc/rndc.key";


zone "test.net" IN {
type master;
file "test.net.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" { //reverse domain - IP     ~!!
type master;
file "test.net.rev";
allow-update { none; };
};
=======================================================================================

위 파일 내용들은 caching-nameserver에서 기본적으로 생성되는 것들이다. 대부분의 서버에서 별다른 설정하지 않고 사용하면 되고, 중요한 것은 다음 줄부터이다. test.net 이라는 도메인을 셋팅하도록 하겠다.

 

named.conf파일의 맨 아랫 줄에 아래의 내용을 추가한다.

=======================================================================================
zone "test.net" IN {
type master;
file "test.net.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" { //reverse domain - IP가 역으로 입력되어 있는 것에 주목~!!
type master;
file "test.net.rev";
allow-update { none; };
}; 
=======================================================================================

 

zone 파일명은 test.net.zone으로 하였다.

위에서 추가한 도메인에 대한 zone 파일을 만들도록 하자..

 

# vi /var/named/chroot/var/named/test.net.zone
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2005101311 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
                IN      MX  0   mail.test.net.
;
localhost       IN      A       127.0.0.1
@                 IN      A       192.168.1.100
www            IN      A       192.168.1.100

mail              IN      A       192.168.1.100
*                  IN      A       192.168.1.100
=======================================================================================
# ln -s /var/named/chroot/var/named/test.net.zone /var/named/test.net.zone

(반드시 심볼릭 링크를 걸어야 한다~~!!!)


# vi /var/named/chroot/var/named/test.net.rev
=======================================================================================
$TTL    86400
@       IN      SOA     ns.test.net. root.ns.test.net.  (
                2005101312 ; Serial
                28800      ; Refresh
                14400      ; Retry
                3600000    ; Expire
                86400 )    ; Minimum
                IN      NS      ns.test.net.
;
100             IN      PTR     ns.test.net.
100             IN      PTR     www.test.net.
100             IN      PTR     test.net.
=======================================================================================
위에서 100이란 숫자는 IP의 제일 마지막에 해당하는 숫자이다.

# ln -s /var/named/chroot/var/named/test.net.rev /var/named/test.net.rev

 

자.. 이제 모든 설정은 끝났다.. 사실 이제부턴 네임서버를 변경한 후 하루정도가 지나야 확실한 결과를 얻을 수 있다. 또한 방화벽을 설치했다면 외부에서 네임서버로 접근할 수 없으니 주의한다. 네임서버의 포트는 42로 방화벽에서 이 포트를 풀어야 한다.

설치와 설정이 끝났다면, DNS 서버를 시작하도록 한다.

(1) 시작
# /etc/rc.d/init.d/named start

*** 시작 시에 오류가 발생하는 경우,
/var/log/messages 를 살펴보고, /etc/named.conf 에서 설정한 파일명이 없는 경우,
/var/named/chroot/var/named/ 아래에 생성하여 주고,
/var/named/ 아래에 ln 명령으로 심볼릭 링크를 생성한다.

local에 관련된 오류는 아래의 파일내역을 참고해서 생성 후에 반드시, 심볼릭 링크를 생성하여 주고,
특히, local.ca 파일은 /var/named/chroot/var/named/ 아래로 mv 를 수행시켜 놓고,
동일한 방법으로 심볼릭 링크를 생성한 후, start를 수행하면 [ OK ]로 시작된다.

/var/named/chroot/var/named/named.local
=======================================================================================
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
;
1       IN      PTR      localhost
=======================================================================================

/var/named/chroot/var/named/named.local
=======================================================================================
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
;
localhost       IN    A    127.0.0.1
=======================================================================================

(2) 재시작
# /etc/rc.d/init.d/named reload

 

(3) 정지
# /etc/rc.d/init.d/named stop

 

(4) 서버시작시 자동으로 실행

# ntsysv

named 라는 서비스에 체크하고 OK로 저장하고 나오도록 한다.

 

(5) 호스트 네임 검사
# grep named /var/log/messages

 

(6) 설정한 도메인 확인하기

# nslookup

> test.net
Server:  168.126.63.1
Address: 168.126.63.1#53

Non-authoritative answer:
Name: test.net
Address: 192.168.1.100

> server 168.126.63.1

> set type=any

> test.net

--------------------------------------------------------------------------
/etc/vhosts 또는 resolv.conf를 수정 해 줘야 하는데 현재 웹서버를 호스트로 등록 하시면 되요.

다음에 /etc/named.caching-nameserver.conf를 수정하는데 처음 한 번만 수정 하면 다음에 수정 할일이 없습니다.

다음으로 zone 설정 파일에 도메인을 추가 합니다.
/etc/named.rfc1912.zones 도메인 추가 할 때마다 레코드를 추가 해 줘야 합니다.
zone "sir.co.kr" IN { type master; file "sir.co.kr.zone"; allow-update { none; };
sir.co.kr.zone이라는 파일에 도메인 정보를 넣게 되는데 새로 생성하시면 됩니다.
; 세미콜론 뒤에는 주석입니다. serial : 일련 번호 입니다. 존 파일이 수정 될 때마다 숫자가 커져야 합니다.
존 파일을 수정 했는데 이 숫자가 수정 전과 같거나 작으면 다른 네임서버들이 바뀐 내용을 읽어가지 않아요.
refresh : 이건 네임서버들이 이 존파일을 다시 읽어가는 시간입니다. 1H라고 하면 하시간에 한 번씩 이 존 파일을 참조합니다.
내용을 수정 하고 serial을 변경하지 않으면 refresh 시간 만큼 기다려야 합니다. 뒤에 M이나 H가 없으면 초단위입니다.

/var/named/chroot/var/named안에 존 파일을 생성하시고 /var/named에 sl로 심볼링크를 하세요.

존파일 권한이 root:named로 됐는지 꼭 확인 하셔야 합니다.
root로 존파일을 생성하면 root:root로 권한이 되는데 named를 아무리 실행해도 권한이 없어서 존파일을 열지 못하더라구요.

service named resstart 또는 service named start 이렇게 네임서버 실행하시고,
조금 있다가 nslookup으로 제대로 설정 됐는지 확인 해보세요.

나중에 화이트도메인 등록 할 때는 존파일 마지막에 한 줄 추가하는게 있는데 그건 kisa사이트에서 알려줍니다.

Posted by iWithJoy
Linux/CentOS2012. 3. 9. 13:13
CentOS에서 가끔 yum을 사용하다가 갑지가 yum이 이상하게 사용중에 에러가 발생할 때가 있다. yum은 rpm 패키지를 관리하는데 이 때 rpm 패키지에 관련된 정보를 사용하는 데이터베이스에 이상이 생겨서 발생하는 문제라는 것을 CentOS 커뮤니티에서 찾아볼 수 있었다. 다음 링크에가면 이 문제애 대한 thread를 확인할 수 있다. http://www.centos.org/modules/newbb/viewtopic.php?topic_id=20237


Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 229, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 145, in main
    (result, resultmsgs) = base.buildTransaction() 
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 647, in buildTransaction
    (rescode, restring) = self.resolveDeps()
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 704, in resolveDeps
    for po, dep in self._checkFileRequires():
  File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 939, in _checkFileRequires
    if not self.tsInfo.getOldProvides(filename) and not self.tsInfo.getNewProvides(filename):
  File "/usr/lib/python2.4/site-packages/yum/transactioninfo.py", line 414, in getNewProvides
    for pkg, hits in self.pkgSack.getProvides(name, flag, version).iteritems():
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 300, in getProvides
    return self._computeAggregateDictResult("getProvides", name, flags, version)
  File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 470, in _computeAggregateDictResult
    sackResult = apply(method, args)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 861, in getProvides
    return self._search("provides", name, flags, version)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
    return func(*args, **kwargs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 837, in _search
    for pkg in self.searchFiles(name, strict=True):
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 43, in newFunc
    return func(*args, **kwargs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 586, in searchFiles
    self._sql_pkgKey2po(rep, cur, pkgs)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 470, in _sql_pkgKey2po
    pkg = self._packageByKey(repo, ob['pkgKey'])
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 413, in _packageByKey
    po = self.pc(repo, cur.fetchone())
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 68, in __init__
    self._read_db_obj(db_obj)
  File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 94, in _read_db_obj
    setattr(self, item, _share_data(db_obj[item]))
TypeError: unsubscriptable object


해결 방법은 기존의 rpm 데이터베이스를 삭제하고 다시 rebuild 해주면 되는 것이다. 아래 순서대로 yum clean을 하고 rpm 데이터베이스 삭제후 rpm 데이터베이스를 리빌드하고 마지막으로 yum update를 해주면 다시 yum을 이용해서 정상적으로 패키지 관리를 할 수 있게 된다.

yum clean all

rm -rf /var/lib/rpm/__db*

rpm --rebuilddb

yum update


'Linux > CentOS' 카테고리의 다른 글

Gmail for CentOS  (0) 2012.04.03
DNS 설정  (0) 2012.03.30
Install Clam AntiVirus to protect from virus  (0) 2012.03.09
Linux용 백신관리자  (0) 2012.03.09
웹 DDOS 공격 방어(mod_evasive)  (0) 2012.03.09
Posted by iWithJoy
Linux/CentOS2012. 3. 9. 10:37
[1] Install Clamav  
[root@mail ~]# yum --enablerepo=rpmforge -y install clamav   # install from RPMforge
[root@mail ~]# vi /etc/freshclam.conf 
# line 122: make it comment
#NotifyClamd /etc/clamd.conf 
[root@mail ~]# freshclam# update pattern files
ClamAV update process started at Sun Jul 10 22:10:08 2011
main.cvd is up to date (version: 53, sigs: 846214, f-level: 53, builder: sven)
daily.cvd is up to date (version: 13304, sigs: 144473, f-level: 60, builder: guitar)
bytecode.cvd is up to date (version: 143, sigs: 40, f-level: 60, builder: edwin)
 
[2] Try to scan  
# try to scan
[root@mail ~]# clamscan --infected --remove --recursive /home
----------- SCAN SUMMARY -----------
Known viruses: 989350
Engine version: 0.97.1
Scanned directories: 3
Scanned files: 3
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 2.060 sec (0 m 2 s) 
# try to download trial virus

[root@mail ~]# wget http://www.eicar.org/download/eicar.com
[root@mail ~]# clamscan --infected --remove --recursive .

./eicar.com: Eicar-Test-Signature FOUND
./eicar.com: Removed. # just detected----------- SCAN SUMMARY -----------
nown viruses: 989350
Engine version: 0.97.1
Scanned directories: 1
Scanned files: 13
Infected files: 1
Data scanned: 0.02 MB
Data read: 0.01 MB (ratio 2.00:1)
Time: 2.079 sec (0 m 2 s)
Posted by iWithJoy
Linux/CentOS2012. 3. 9. 10:20
출처 : http://blog.naver.com/jabusunin

Open Antivirus Project
http://www.openantivirus.org/
(자유소프트웨어 진영의 대표적 안티바이러스)


Clam Antivirus
http://www.clamav.net/
(GPL 라이센스를 따르며 C로 쓰여진 OpenAntivirus database 기반의 빠른 스캐너)


QtFprot
http://www.kde-apps.org/content/show.php?content=10381
(QtFprot is a frontend for FPROT 4.x, a free (for personal use) Linux virus-scanner. It's similar to XFprot, but written in Qt. It allows you to set all FPROT paramters with a comfortable GUI.)


Firewall Builder
http://www.fwbuilder.org/
(GPL 라이센스를 따르는 멋진 멀티플래폼 방화벽 설정도구)

참고: http://firewall-jay.sourceforge.net/ (TUI 모드의 방화벽 설정 도구)

http://www.simonzone.com/software/guarddog/#introduction


Kmyfirewall
http://kmyfirewall.sourceforge.net/
(GPL 라이센스의 KDE용 IPtables 설정 도구)

 

File::Scan
http://freshmeat.net/projects/filescan/
(File::Scan allows users to make multiplataform virus scanners which can detect Windows/DOS/Mac viruses. It include a virus scanner and signatures database
텍스트 기반의 펠로 쓰여진 바이러스 스캔너)


Aegis Virus Scanner
http://jodrell.net/projects/aegis
(그래픽 인터페이스의 단순하고 직관적인 바이러스 스캔너)

 

BitDefender Linux Edition
http://www.bitdefender.com/
(텍스트 모드의 강력한 바이러스 스캐너로 개인사용자는 무료다운로드 가능-자유소프트웨어 아님)


Panda Antivirus for Linux
http://www.pandasoftware.com/com/linux/
(무료소프트웨어-자유소프트웨어 아님. 텍스트 기반으로 사용자 프로필 작성후 다운로드 가능)

 

F-Prot
http://www.f-prot.com/
(서버 사용자 유료 개인사용자는 프로필 작성 후 무료사용)


McAfee
http://www.mcafee.com/us/default.asp
(사용자 프로필 작성후 평가판을 다운로드 받을 수 있음)


Kapersky Anti-Virus
http://www.kaspersky.com
(상용 http://www.kaspersky.com/trials 에서 개인 프로필 작성후 30 평가판 다운로드 가능)


NOD32
http://www.nod32.com/home/home.htm
(상용 윈도우 버젼만 평가판 제공 리눅스용으로는 서버용 판매)


Sophos Antivirus
http://www.sophos.com/
(상용 워크스테이션용 $40 서버용 $400 -1사용자 기준)


ServerProtect
http://www.trendmicro.com/kr/products/fileserver/spl/evaluate/overview.htm
(상용 서버용)


RAV Antivirus
http://www.ravantivirus.com
(현재 평가판 버젼 다운로드 중단 구매 가능)


InterScan
http://www.trendmicro.com/en/products/linux/overview.htm
(상용)


Vexira Antivirus for Linux
http://www.centralcommand.com/downloads.html
(텍스트 기반 상용 평가판 다운로드 가능 


Posted by iWithJoy
Linux/CentOS2012. 3. 9. 09:37

웹 DDOS 공격 방어(mod_evasive)

먼저, http://www.zdziarski.com/blog/ 에 접속하여 오른쪽 Pages > Projects > mod_evasive 에 들어가면,
Downloads: Stable 의 파일 다운로드 경로를 오른쪽 마우스를 눌러 속성의 내역으로 알아내서 아래와 같이 다운로드를 수행한다.
# wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
# tar xvzpf mod_evasive_1.10.1.tar.gz
# cd mod_evasive_1.10.1
# yum install httpd-devel
# apxs -iac mod_evasive20.c
# vi /etc/httpd/conf/httpd.conf 로 아래의 내역을 검색하여 내용을 추가한다.
 LoadModule evasive20_module   /usr/lib/httpd/modules/mod_evasive20.so

 <IfModule mod_evasive20.c>
 DOSHashTableSize        3097
 DOSPageCount            3
 DOSSiteCount            50
 DOSPageInterval         1
 DOSSiteInterval         1
 DOSBlockingPeriod       30
 </IfModule>
# /etc/rc.d/init.d/httpd restart 수행 시에 실패한 경우,
시스템 > 관리 > 서비스의 httpd 를 찾아서 사용안함을 눌러 중지하고, 다시 사용을 눌러 서비스를 활성화한다.
제대로 수행되지 않는 경우, reboot를 수행한다.

*  모듈 사용 중지 하기
 DOSPageCount  0
 DOSSiteCount    0
* 차단 테스트: perl test.pl
* DOS공격한 IP는 /tmp/dos-127.0.0.1 과 같이 해당 IP의 파일이 생성된다
* DOS 인가된 IP 주소 할당(스크립트, 로컬서치로봇등 해당 서버로 부터의 많은 접속요청이 필요할때)
 DOSWhitlist 127.0.0.1
 DOSWhitlist 127.*.*.*

Posted by iWithJoy
Linux/CentOS2012. 3. 8. 14:26
Apache 1.x 버전에서는 아래와 같이 mod_throttle 모듈과 mod_bandwidth 모듈을 통해 트래픽 제어를 할 수 있었다.

Apache + Throttle(mod_throttle) 을 이용해서 트래픽정보를 구합니다.

[Throttle Status]
http://자신의도메인/throttle-me
실시간으로 볼 수 있으며 자신의 일일 트래픽량이 증가시 웹서버에서 Throttle 연동해 있기 때문에 초과시 자동적으
로 트래픽량 초과 안내 페이지가 나오면 일일 트래픽량으로 제한이므로 하루가 지나면 다시 초기화로 다시 계산해서
그 정보가 계산됩니다.

% - 허용된 트래픽에서 몇퍼센트를 사용
Hits - 도메인의 히트수
Refused - 트래픽이 초과하였을때 접속하여 요청거부된 횟수
KBytes Sents - 회원님의 도메인 트래픽량
KBytes Per Hits - 한 히트당 트래픽량의 평균치
Polocy - Volume 트래픽 제한을 양으로 계산
Limits - 트래픽 제한양 제한선 입니다.
Period - 1d 하루 24시간을 기준으로 트래픽을 계산한다는 뜻입니다.
Period Elapsed - 24시간중 소요된 시간
Idle time - 최종 히트후 요청 대기시간

참조 사이트 : 
http://www.snert.com/Software/mod_throttle/

##############
## 설치하기 ##
##############

일반적으로 아파치에서 mod_throttle 을 연동하기 위해서는 2가지 방식의 컴파일을 지원하지만 여기서는
DSO 방식으로 설치하도록 한다.

---------------------------------------------------------------------
STATIC 방식 (APACHE mod_throttle 부분)

./configure --disable-shared=throttle
--add-module=/usr/local/mod_throttle-3.1/mod_throttle.c

---------------------------------------------------------------------
DSO 방식

cd /usr/local/mod_throttle-3.1
make install
mod_throttle.so를 apache디렉토리 libexec안에 복사해줍니다.
그런후 httpd.conf에 mod_throttle부분을 수정.
(compile시 apxs에 위치를 Makefile안에 전체경로로 변경후 make하세요.)
LoadModule throttle_module libexec/mod_throttle.so
AddModule mod_throttle.c
---------------------------------------------------------------------

아파치에서 mod_throttle 을 설치하기 위한 순서

1. 다운로드
2. 컴파일 / 설치
3. apache 설정파일 내부에서의 mod_throttle 부분을 인식
4. 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어
5. 트래픽확인

■ 다운로드
[root@www download]# wget
http://www.snert.com/Software/mod_throttle/mod_throttle312.tgz
[root@www download]# tar xzf mod_throttle312.tgz
[root@www download]# cd mod_throttle-3.1.2/
[root@www mod_throttle-3.1.2]# ll
total 188
-rw-r--r--  1 111 users  7233 Dec  3  2000 CHANGES.txt
drwxr-xr-x  2 111 users  4096 Dec  2  2000 Img
-rw-r--r--  1 111 users  1525 Dec  2  2000 LICENSE.txt
-rw-r--r--  1 111 users  1009 Dec  2  2000 Makefile
-rw-r--r--  1 111 users 26492 Dec  3  2000 index.shtml
-rw-r--r--  1 111 users 97711 Dec  3  2000 mod_throttle.c
-rw-r--r--  1 111 users   277 Dec  2  2000 patch.proxy_util.c
-rw-r--r--  1 111 users     4 Dec  3  2000 version3.cnt

■ 컴파일 / 설치
[root@www mod_throttle-3.1.2]# make install
apxs -c    mod_throttle.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -DUSE_HSREGEX -fpic -DSHARED_MODULE -
I/usr/local/apache2/include  -c mod_throttle.c
gcc -shared -o mod_throttle.so mod_throttle.o
apxs -i -a -n 'throttle' mod_throttle.so
[activating module `throttle' in /usr/local/apache2/conf/httpd.conf]
cp mod_throttle.so /usr/local/apache2/libexec/mod_throttle.so
chmod 755 /usr/local/apache2/libexec/mod_throttle.so
cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.bak
cp /usr/local/apache2/conf/httpd.conf.new /usr/local/apache2/conf/httpd.conf
rm /usr/local/apache2/conf/httpd.conf.new
root@www mod_throttle-3.1.2]# apachectl restart


■ apache 설정파일 내부에서의 mod_throttle 부분을 인식

<IfModule mod_throttle.c>
# 트래픽이 초과되면 나오는 에러페이지
ErrorDocument 503
http://192.168.1.1/error/error.html
ThrottlePolicy none

<Location /throttle-status>
SetHandler throttle-status
Deny from all
# 다른접근을 모두 거부하고 특정 아이피에서만 throttle-status 를 확인 하도록 설정
# 여기서는 192.168.1.1 과 192.168.1.2 의 IP 주소만 접근할 수 있다.
Allow from 192.168.1.1
Allow from 192.168.1.2
</Location>

<Location /throttle-me>
SetHandler throttle-me
</Location>
<Location /~*/throttle-me>
Order deny,allow
Deny from all
Allow from all
SetHandler throttle-me
</Location>
</IfModule>

■ 버츄얼 호스팅 부분의 각 사용자마다 각각 트래픽 제어

  트래픽을 걸때의 여러가지 방법이 존재한다.
  ThrottlePolicy Volume 100M 1d //하루 100M
  ThrottlePolicy Request 1000 1d //하루 천번
  ThrottleClientIP 1100 volume 2 10   //로그 1100k

<VirtualHost 192.168.1.1>
    ServerName test1.com
    DocumentRoot /home/test1/pubic_html
   
    # 전송량 1일 300M
    ThrottlePolicy Volume 300M 1d 
</VirtualHost>
<VirtualHost 192.168.1.1>
    ServerAdmin
webmaster at test2.com
    DocumentRoot /home/test2/public_html
    ServerName  test2.com
   
    # 전송량 1일 400M
    ThrottlePolicy Volume 400M 1d
</VirtualHost>
<VirtualHost 192.168.1.1>
    ServerAdmin
webmaster at test3.org
    DocumentRoot /home/test3/public_html
    ServerName  test3.org
   
    # 전송량 1일 500M
    ThrottlePolicy Volume 500M 1d
</VirtualHost>

■ 트래픽확인

1. 첫번째방법은 자신의 트래픽만 보는 방법 ( 일반 사용자인 경우 )

http://자신의도메인/throttle-me

2. 두번째방법은 모든 가상호스트를 보는 방법 ( 관리자인 경우 )
( ※ 중요!!! 이때는 아무나 접근할 수 없도록 접근 IP 막는 조치를 취해야 한다. 그렇지 않으면 모든 사용자의
     정보를 다른 사용자가 볼 수도 있고 트래픽을 초기화 할 수도 있다. )

http://자신의도메인/throttle-status


하지만, Apache2로 넘어오면서 mod_throttle 모듈이나 mod_bandwidth 모듈을 더 이상 사용할 수 없게 된다.

대신 mod_cband 모듈이라는 걸출한 녀석을 사용할 수 있다. mod_cband 모듈을 통해 트래픽 제한과 대역폭 제한, 그리고 트래픽 제한 결과 등을 웹을 통해 확인할 수 있게 된다.

Debian에서는 libapache2-mod-cband 패키지가 있으므로, 소스 컴파일할 필요 없이 패키지를 설치하면 된다. 현재 libapache2-mod-cband 패키지의 mod_cband 모듈 버전은 0.9.7.4 이다.

# apt-get install libapache2-mod-cband


만약 최신 버전을 설치하고 싶다면, 소스 파일을 구해 컴파일하면 된다.

출처:
http://linux.tini4u.net

os: centos4.6

아파치 2.x에서는 cband 모듈을 이용함으로써 두가지의 기능을 모두 사용할 수 있습니다.
또한 xml 형태로의 데이터까지 얻을 수 있기 때문에 관리자 입장에서 매우 반가울 수 밖에 없습니다.

1. mod_cband 설치 (최신버전:
http://cband.linux.pl/)
http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz/


[root@manage src]# wget http://www.sfr-fresh.com/unix/privat/mod-cband-0.9.7.5.tgz
[root@manage src]# tar xvzfp mod-cband-0.9.7.5.tgz
[root@manage src]# cd mod-cband-0.9.7.5
[root@manage mod-cband-0.9.7.5]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@manage mod-cband-0.9.7.5]# make
[root@manage mod-cband-0.9.7.5]# make install 수행 시에 아래와 같은 오류가 발생하는 경우,
...
src/mod_cband.c:1365: error: 'struct conn_rec' has no member named 'remote_addr'
apxs:Error: Command failed with rc=65536
.
make: *** [src/.libs/mod_cband.so] \uc624\ub958 1
apache 버전이 2.2 버전대가 아닌, httpd-2.4.1 버전인 관계로 발생하므로
아래와 같이 - 부분을 + 부분으로 수정 후, 저장하여, configure, make, make install을 재수행하면, 정상처리된다. 
# vi ./src/mod_cband.c
이때,  ./src/.libs/mod_cband.c 라는 파일이 존재하지 않는 상태에서 수행해야 한다.
  1. --- mod-cband-0.9.6.1/src/mod_cband.c   2006-01-21 20:23:27.000000000 -0500
  2. +++ mod-cband-0.9.6.1-cov//src/mod_cband.c      2012-02-22 19:23:04.162307962 -0500
  3. @@ -1278,7 +1278,7 @@
  4.      p.bitlen = 32;
  5.      p.ref_count = 0;
  6.      p.family = AF_INET;
  7. -    p.add.sin.s_addr = inet_addr(r->connection->remote_ip);
  8. +    p.add.sin.s_addr = inet_addr(r->connection->client_ip);
  9.                     
  10.      node = patricia_search_best(config->tree, &p);
  11.                                 
  12. @@ -1287,7 +1287,7 @@
  13.                                                
  14.          if (leaf) {
  15.  #ifdef DEBUG
  16. -            fprintf(stderr,"%s leaf %s\n",r->connection->remote_ip,leaf);
  17. +            fprintf(stderr,"%s leaf %s\n",r->connection->client_ip,leaf);
  18.              fflush(stderr);
  19.  #endif
  20.             return atoi(leaf);
  21. @@ -1307,10 +1307,10 @@
  22.      if (entry == NULL)
  23.         return -1;
  24.      
  25. -    if (c->remote_ip != NULL)
  26. -       addr = inet_addr(c->remote_ip);   
  27. +    if (c->client_ip != NULL)
  28. +       addr = inet_addr(c->client_ip);   
  29.      else
  30. -       addr = c->remote_addr->sa.sin.sin_addr.s_addr;
  31. +       addr = c->client_addr->sa.sin.sin_addr.s_addr;
  32.         
  33.      time_now = apr_time_now();     
  34.      hosts = config->remote_hosts.hosts;
#make
...
write "make install" to install module
#make install
...
chmod 755 /usr/local/apache/modules/mod_cband.so
#


2. 아파치 환경설정에서의 cband 설정
cband 모듈 또한 throttle와 마찬가지로 3rd-party 모듈이기 때문에 아파치에서 설정을 합니다.
  1. [root@localhost]# vi /usr/local/apache/conf/httpd.conf
  2. <IfModule mod_cband.c>
  3.     <Location /cband-status>
  4.         SetHandler cband-status
  5.         Order Deny,Allow
  6.         Deny from All
  7.         Allow from 127.0.0.1 100.100.100.100
  8.     </Location>

  9.     <Location /cband-me>
  10.         SetHandler cband-status-me
  11.         Order deny,allow
  12.         Deny from all
  13.         Allow from all
  14.     </Location>
  15. </IfModule>

※ SetHandler 설명
cband-status -> 관리자 페이지 입니다. 따라서 접근을 허용할 IP를 입력해주셔야 됩니다.
cband-me -> 사용자 페이지 입니다.

3. cband 적용
cband는 각 호스트에 대해서 여러가지 지시자를 사용하여 설정 할 수 있습니다.
아래는 여러가지 지시자중 하나인 가장 많이 사용되는 CbandLimit을 사용한 예제 입니다.
  1. ※ 각각의 호스트에 따로따로 설정해줄 때
  2. <VirtualHost 192.168.0.1>
  3.     ServerName foobar.com
  4.     ServerAlias www.foobar.com
  5.     DocumentRoot /home/foobar/public_html
  6.     ErrorLog logs/foobar-err
  7.     CustomLog logs/foobar-acc combined
  8.     CBandLimit 100Mi
  9.     CBandPeriod 1D
  10. </VirtualHost>

※ 위 설정은 1Day 동안 100M의 트래픽을 허용하겠다는 설정입니다.

  1. ※ 하나의 유저(foobar)가 여러개의 호스트를 사용하고 있는 경우 (트래픽 공유)
  2. <CBandUser foobar>
  3.     CBandUserLimit 100Mi
  4.     CBandUserPeriod 1D
  5. </CBandUser>

  6. <VirtualHost 192.168.0.1>
  7.     ServerName foobar.com
  8.     ServerAlias www.foobar.com
  9.     DocumentRoot /home/foobar/public_html
  10.     ErrorLog logs/foobar-err
  11.     CustomLog logs/foobar-acc combined
  12.     CBandUser foobar
  13. </VirtualHost>

  14. <VirtualHost 192.168.0.1>
  15.     ServerName foobar2.com
  16.     ServerAlias www.foobar2.com
  17.     DocumentRoot /home/foobar2/public_html
  18.     ErrorLog logs/foobar2-err
  19.     CustomLog logs/foobar2-acc combined
  20.     CBandUser foobar
  21. </VirtualHost>

※ 위 설정은 foobar 유저에게 1Day 동안 100M의 트래픽을 허용하겠다는 설정이며,
foobar.com과 foobar2.com에서 foobar 유저의 트래픽을 공유해서 사용하겠다는 것입니다.

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


5. cband 지시자
이름: CBandDefaultExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: Server config
문법: CBandDefaultExceededURL [URL]
예제: CBandDefaultExceededURL
http://foobar.com/503.html

이름: CBandDefaultExceededCode
설명: 제한을 초과했을시 보여줄 에러 코드
문맥: Server config
문법: CBandDefaultExceededCode [HTTP_CODE]
예제: CBandDefaultExceededCode 509

이름: CBandScoreFlushPeriod
설명: scoreboard 파일에 기록할 요청수를 정하나, 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
설명: 호스트 접속자의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandRemoteSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수
예제: CBandRemoteSpeed 20kb/s 3 3
    호스트 접속자에 대해 1024kbps 전송속도로 제한하며,
    초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandClassRemoteSpeed
설명: IP class의 최대속도, 요청수, 접속수 제한
문맥: <Virtualhost>
문법: CBandClassRemoteSpeed [class_name] [kbps] [rps]
    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 전송속도로 제한하며,
초당 10개의 요청을 처리하고, 동시 접속을 30개로 제한합니다.

이름: CBandRandomPulse
설명: 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 방법입니다.
문맥: Global
문법: CBandRandomPulse [On/Off]
예제: CBandRandomPulse On

이름: CBandLimit
설명: 제한할 전송량을 설정한다.
문맥: <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
설명: IP class에 대해 제한할 전송량 설정
문맥: <Virtualhost>
문법: CBandClassLimit [class_name limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름: CBandExceededURL
설명: 제한을 초과했을때 보여줄 URL
문맥: <Virtualhost>
문법: CBandExceededURL [URL]
예제: CBandExceededURL
http://foobar.com/503.html

이름 : CBandExceededSpeed
설명: 전송량을 초과했을때의 전송속도 제한 설정
문맥: <Virtualhost>
문법: CBandExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandScoreboard
설명: 가상호스트의 scoreboard 파일 지정
문맥: <Virtualhost>
문법: CBandScoreboard [path]

이름: CBandPeriod
설명: 제한기간
문맥: <Virtualhost>
문법: CBandPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름 : CBandPeriodSlice
설명: 기간을 나눌 기간 명시
기본값: slice_len = limit
문법: CBandPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.

이름: <CBandUser>
설명: 새로운 cband 가상 사용자 설정
문맥: Server config
문법: <CBandUser user_name>

이름: 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
    전송량을 10M(10*1000*1000bytes)로 제한한다.
    CBandUserLimit 10Mi
    전송량을 10M(10*1024*1024bytes)로 제한한다.

이름: CBandUserClassLimit
설명: cband 가상 사용자의 IP class에 대해 제한할 전송량 설정
문맥: <CBandUser>
문법: CBandUserClassLimit [class_name] [limit]
    class_name - 클래스 이름
    limit - 전송량, 사용단위: K(kilo), M(mega), G(giga), Ki(kibi), Mi(mebi), Gi(gibi)

이름 : CBandUserExceededURL
설명: cband 가상 사용자의 제한을 초과했을때 보여줄 URL
문맥: <CBandUser>
문법: CBandUserExceededURL URL
예제: CBandDefaultExceededURL
http://foobar.com/503.html

이름: CBandUserExceededSpeed
설명: cband 가상 사용자의 전송량을 초과했을때의 전송속도 제한 설정
문맥: <CBandUser>
문법: CBandUserExceededSpeed [kbps] [rps] [max_conn]
    kbps - 초당 최대 전송속도
    rps - 초당 최대 요청수
    max_conn - 최대 동시 접속수

이름: CBandUserScoreboard
설명: cband 가상 사용자의 scoreboard 파일 지정
문맥: <CBandUser>
문법: CBandUserScoreboard [path]

이름: CBandUserPeriod
설명: cband 가상 사용자의 제한기간
문맥: <CBandUser>
문법: CBandUserPeriod [period]
    period - 사용단위: S(초), M(분), H(시간), D(일), W(주)
예제: CBandPeriod 1D

이름: CBandUserPeriodSlice
설명: cband 가상 사용자의 기간을 나눌 기간 명시
기본값: slice_len = limit
문맥: <CBandUser>
문법: CBandUserPeriodSlice [slice_length]
예제: CBandLimit 100G
    CBandPeriod 4W
    CBandPeriodSlice 1W
지정된 제한값을 1주일 단위로 나누어 사용 합니다.
위 설정을 해석하면 4주는 1주일 단위로 나누며, 용량은 100G/4주=25G로 사용 합니다.


6. 통계화면 보기
관리자모드 -
http://foobar.com/cband-status
관리자모드(xml) - http://foobar.com/cband-status?xml
사용자모드 - http://foobar.com/cband-me
사용자모드(xml) - http://foobar.com/cband-me?xml

7. 통계화면에 아파치 인증 걸기
throttle 강좌에서도 말씀드렸지만 통계화면의 제한은 IP의 형태로 제한을 하는게 정설입니다.
그렇지만 IP가 자주 변경되는 분들은 매번 IP를 변경해주는것도 하나의 일이 될 수 있습니다.
따라서 이런 경우에는 아파치 인증을 걸어서 사용하시면 편리할 것입니다.
  1. [root@localhost]# vi /etc/httpd/conf/httpd.conf
  2. <IfModule mod_cband.c>
  3.     <Location /cband-status>
  4.         SetHandler cband-status
  5.         AuthName "트래픽관리 페이지"
  6.         AuthType Basic
  7.         AuthUserFile /home/foobar/.htpasswd
  8.         require valid-user
  9.     </Location>

  10.     <Location /cband-me>
  11.         SetHandler cband-status-me
  12.         Order deny,allow
  13.         Deny from all
  14.         Allow from all
  15.     </Location>
  16. </IfModule>
  17. [root@localhost]# htpasswd -c /home/foobar/.htpasswd ID


mod_cband(아파치2의 트래픽 제어모듈 like mod_throttle&mod_bandwidth)


0. 내가 원한는 것?
  예전에 apache 1은 mod_throttle으 로 가상호스트별 트래픽 측정 및 제한이 가능했습니다.
이 트래픽 제한 기능은 호스팅을 하기위해서는 필수입니다. 어떤 도메인에서 많이 사용하는지
아는 것은 아주 중요한 일이기 때문입니다. 하지만,
 apache2를 쓰면 이놈을 포기할 수 밖에 없었습니다. 검색하다 .. cband를 찾았습니다.
 mod_throttle과 기능및 구조 거의 흡사하며, mod_bandwidth의 기능까지 포함했고,
최근에 개발되어 계속 성능 향상이 되어 가고 있었습니다.
보다 좋은건, ?xml 이라고 붙여주면, 데이터를 xml형태로 얻을 수 있어,
호스팅 하기에 정말 좋은 모듈입니다.
 [주의] cband는 apache 2 모듈이다. apache 1.3.XX용이 아니며 1.3.XX는 mod_throttle을 사용하세요!!

 [주요기능]
    * Apache2용 가볍운 트래픽제한 모듈
    * 사용자별 대역폭제한 기능
    * 가상호스트별 대역폭 제한 기능
    * 목적지별 대역폭 제한 기능
    * 제한기능:
          o 모든사용자 대역폭 제한
          o 다운로드 속제 제한
          o 초당요청수 제한
          o 아이피대역별 제한
    * Support for virtualhosts
    * Support for defined users
    * 제한결과 웹을 통한 확인 (/cband-status)
    * 각 사용자별 제한 결과 확인(/cband-status-me)



1. 설치방법
  cd /usr/local
  wget http://cband.linux.pl/download/mod-cband-0.9.7.4.tgz
  tar xvfpz mod-cband-0.9.7.4.tgz
  cd mod-cband-0.9.7.4
  ./configure --with-apxs=/usr/local/apache/bin/apxs
  ## 옵션설명
  ## --with-apxs=/usr/local/apache/bin/apxs : 아파치 apxs경로를 지정합니다.
  make
  make install



2. 설치확인
  - httpd.conf 파일에
     LoadModule cband_module       modules/mod_cband.so
   줄이 추가된것을 볼 수 있습니다.
  - 아파치/modules 디렉토리에
      mod_cband.so
    파일이 추가 된 것을 볼수 있습니다.


3. 기본 설정

====================================
  <Location /cband-status>
     SetHandler cband-status
     Order deny,allow
     Deny from all
     Allow from 열어줄아이피
  </Location>

  <Location /cband-status-me>
    SetHandler cband-status-me
  </Location>

<VirtualHost *>
   ServerName gnux.co.kr    
   Document /home/gnux/www
    CBandLimit 300Mi
   CBandPeriod 1D
   CBandExceededURL http://manager.gnux.co.kr/traffic_exceeded.html
</VirtualHost>
======================================
위 설정파일은 gnux.co.kr 도메인에
하루에 300M(300*1024*1024byte)의 트래픽을 제공하는 설정입니다.
bit로 따지면, 2.4Gbit/일 트래픽을 제공하는 것입니다.
만약 하루에 300M를 초과했다면, "http://manager.gnux.co.kr/traffic_exceeded.html"
페이지가 뜨며, 지정하지 않았다면, 503 에러 페이지가 뜨게됩니다.
 만약!. 제한을 하지 않고 관찰만 하려 한다면, CBandPeriod 부분만 남기고 삭제합니다.




4. 상황별 설정
 1) 자료실 속도 제한
==============================
<VirtualHost *>
   ServerName file.gnux.co.kr    
   Document /home/gnux/file
   CBandSpeed 1024 10 30
   CBandRemoteSpeed 20kb/s 3 30
</VirtualHost>
==============================
위 설정은  file.gnux.co.kr 도메인에 대해서
속도를 1024kbps 로 제한하며, 초당 10번의 연결,
동시접속자를 30으로 제한하는 예제입니다.



 2) 사용자 일트래픽 제공 및 초과시 연결수 제한.
==============================
<VirtualHost *>
   ServerName doly.gnux.co.kr    
   Document /home/gnux/doly
   CBandLimit 100Mi
   CBandExceededSpeed 128 5 15
   CBandPeriod 1D
</VirtualHost>
==============================
위 설정은 doly.gnux.co.kr도메인에 대해
하루에 100Mbyte의 트레픽을 제공하며,
100M를 초가했다면,
속도를 128bps로 제한, 초당 5번의 연결,
동시접속자를 15로 제한하는 예제입니다.



 3) 한 사용자에 여러 도메인이 있다면?
==============================
<CBandUser host_user1>
    CBandUserLimit 100Mi
    CBandUserPeriod 1D
</CBandUser>
<VirtualHost *>
   ServerName aaa.co.kr    
   Document /home/host_user1/aaa
   CBandUser host_user1
</VirtualHost>
<VirtualHost *>
   ServerName bbb.co.kr    
   Document /home/host_user1/bbb
   CBandUser host_user1
</VirtualHost>
==============================
위 설정은 host_user1이라는 가상 사용자를 지정한다음.
그 사용자는 하루에 100Mbyte를 사용할수 있게합니다.
그런다음, aaa.co.kr, bbb.co.kr 모두 host_user1의
트래픽을 사용하게 설정하였습니다.



4) IP대역에 따라 속도를 제한하고 싶다면?
==============================================
<CBandClass class_1>
    CBandClassDst 192.168.0.0/24
</CBandClass>
<CBandClass class_2>
    CBandClassDst 222.97.189.0/24
</CBandClass>

<VirtualHost *>
   ServerName intranet.gnux.co.kr    
   Document /home/gnux/intranet
   CBandClassRemoteSpeed class_1 50Mbps 10 30
   CBandClassRemoteSpeed class_2 300kbps 10 30
</VirtualHost>
==============================================
위 설정은, 내부아이피 192.168.0.XXX 에서,
50Mbps의 대역폭과, 초당 10번의 요청, 동시접속자 30을 설정하며,
다른 ip대역 222.97.189.XXX에서는
300kpbs, 초당 10번의 요청, 동시접속자 30을 설정합니다.


5. 사용량 확인.
   http://도메인/cband-status
   http://도메인/cband-status-me
status

 ** xml 형태로 데이터를 얻고 싶다면?
   http://도메인/cband-status?xml
   http://도메인/cband-status-me?xml
xml



6. 지시자 및 단위 설명 (필요시 찾아보세요!!)
  1) 단위.
    * 전송속도 단위
          o kbps, Mbps, Gbps - bits per second: 1024, 1024*1024 , 1024*1024*1024 bps
          o kb/s, Mb/s, Gb/s - bytes per second:  1024, 1024*1024, 1024*1024*1024 b/s
          o 기본 : kbps

    * 트래픽 쿼터 단위
          o K, M, G - bytes: 1000, 1000*1000 ,1000*1000*1000 bytes
          o Ki, Mi, Gi - bytes: 1024, 1024*1024, 1024*1024*1024 bytes
          o 기본 : K

    * 시간(기간) 단위
          o S, M, H, D, W - 초, 분, 시간, 일, 주
          o 기본 : S

  2) 지시자들
     (1) 이름 : CBandDefaultExceededURL
          설명 : 제한을 초과했을때 보여줄 URL  (지정하지 않으면, 503 에러 페이지)
            문맥 : Server config
          문법 : 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
                  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개로 제한.

     (7)이름 : CBandRandomPulse
         설명 : 속도 제한을 위해서 임의의 파형을 생성한 다음 처리하는 mod_cband의 처리 방법이다.
                   부하가 많을때는 자동 Off된다.
         문맥 : Global
         문법 : CBandRandomPulse On/Off

     (8)이름 : 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)로 제한한다.

     (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 path
                  (path는 아파치(nobody또는 apache)권한으로 쓰기가능해야 함)

    (13)이름 : CBandPeriod
         설명 : 용량제한기간(이 기간이 지나면, 측정되었던 용량은 지워진다.)
         문맥 : <Virtualhost>
         문법 : CBandPeriod period
                  period - 사용단위: S (초), M (분), H (시간), D (일), W (주)
         예제 : CBandPeriod 1W  (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>

   (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
         예제 : CBandUserLimit 100G
                  CBandUserPeriod 4W
                  CBandUserPeriodSlice 1W
                   4주는 1주일 단위로 나뉜다(4W/1W = 4). 용량은 100G/4=25G
                   1주에 25G, 2주째 50G 이렇게 나눠 처리 된다.


7. 마치며..
 이것으로 현재 최신버전의 mod_cband 설치 및 운영, 상세 지시자 설명 하는 강좌를 마치겠습니다.
처음 이 모듈을 발견했을때 너무 너무 기뻣고, 바로 적용해 테스트 하였습니다.
특히 xml로 데이터를 추출할 수 있어 가공함에 있어 아주 아주 편리했습니다.
국내에는 아직 mod_cband에 과한 강좌가 없어 많은 사람들에게
도움을 주기 위해서 이렇게 강좌를 작성합니다.
  본 강좌에 대해서 오타 및 문제가 있다면, doly골뱅이superuser.co.kr으로 메일
한통 바랍니다.

2006년 6월 ... 모기들이 태어나는 계절에... 도리...



## 참고문서
http://cband.linux.pl
http://www.howtoforge.com/mod_cband_apache2_bandwidth_quota_throttling

-- 출처 : 리눅스포털(원문 : http://www.superuser.co.kr/home/lecture/index.php?leccode=10588)


참고 자료
Posted by iWithJoy
Linux/CentOS2012. 3. 8. 10:22
Adding Modules to httpd.conf With Apache 2
Topic:
Web    Posted:2005-03-01 19:53:39
Printer Friendly:

We recently converted from a source version of Apache 2 to an RPM version. We wanted all of the PHP/MySQL stuff compiled in and working quickly. Yes, we were very lazy. Now, we tried to use our old httpd.conf file; however, since the compiled version had many of the options built in, our httpd.conf file failed repeatedly when we tried to start Apache. This is on a Fedora box. One place where you can add modules is after these lines in httpd.conf:

# Example:
# LoadModule foo_module modules/mod_foo.so

Below, you will see the error that happened when we tried to start Apache, and the line(s) we added that appeared to fix the problem. Not all of the module names were intuitive. We had to search around for some of them:


[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 358 of /etc/httpd/conf/httpd.conf:
Invalid command 'Order', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule access_module /etc/httpd/modules/mod_access.so
LoadModule auth_module /etc/httpd/modules/mod_auth.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 368 of /etc/httpd/conf/httpd.conf:
Invalid command 'UserDir', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 396 of /etc/httpd/conf/httpd.conf:
Invalid command 'DirectoryIndex', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule dir_module /etc/httpd/modules/mod_dir.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 419 of /etc/httpd/conf/httpd.conf:
Invalid command 'TypesConfig', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule mime_module /etc/httpd/modules/mod_mime.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 491 of /etc/httpd/conf/httpd.conf:
Invalid command 'LogFormat', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule log_config_module /etc/httpd/modules/mod_log_config.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 555 of /etc/httpd/conf/httpd.conf:
Invalid command 'Alias', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule alias_module /etc/httpd/modules/mod_alias.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 582 of /etc/httpd/conf/httpd.conf:
Invalid command 'SetEnvIf', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule setenvif_module /etc/httpd/modules/mod_setenvif.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 636 of /etc/httpd/conf/httpd.conf:
Invalid command 'IndexOptions', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule autoindex_module /etc/httpd/modules/mod_autoindex.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd: Syntax error on line 784 of /etc/httpd/conf/httpd.conf:
Invalid command 'LanguagePriority', perhaps mis-spelled or defined by a module not included in the server configuration
                                                           [FAILED]
LoadModule negotiation_module /etc/httpd/modules/mod_negotiation.so

[root@srv-2 modules]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@srv-2 modules]#

http://www.netadmintools.com/art398.html
Posted by iWithJoy
Linux/CentOS2012. 3. 7. 15:13

 
@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql

@ 서버운영에 필요한 소스 및 라이브러리 추가

# yum -y install ORBit2 PyXML a2ps acpid alsa-lib amtu aspell at atk audiofile audit-libs-python autoconf autofs automake avahi avahi-glib bc bind bind-chroot bind-libs bind-utils cairo ccid compat-libstdc++-33 conman cpp cpuspeed crash createrepo crypto-utils cryptsetup-luks cups-libs cvs cyrus-sasl-md5 cyrus-sasl-plain db4-devel dbus-python device-mapper-multipath dhcp dhcp-devel dialog dmraid dos2unix dosfstools dump e2fsprogs-devel ed eject elfutils elfutils-libs enscript expat-devel expect expect-devel expectk fetchmail file finger flex fontconfig fontconfig-devel foomatic freetype freetype-devel ftp gcc gcc-c++ gd gd-devel gd-progs gdb gdbm-devel gettext gfs2-utils glib2-devel glibc-devel glibc-headers gmp-devel gnutls gpm gtk2 hal hdparm hesiod hicolor-icon-theme imake iptraf iptstate ipvsadm irqbalance jwhois kernel-devel kernel-headers keyutils-libs-devel kpartx krb5-devel krb5-workstation ksh lcms lftp libICE libSM libX11 libX11-devel libXau libXau-devel libXcursor libXdmcp libXdmcp-devel libXext libXfixes libXft libXi libXinerama libXpm libXpm-devel libXrandr libXrender libXt libXxf86vm libaio libaio-devel libart_lgpl libbonobo libc-client libcurl-devel libdaemon libevent libfontenc libgomp libgssglue libhugetlbfs libhugetlbfs-devel libidn-devel libjpeg libjpeg-devel libmng libnl libnl-devel libpcap libpng libpng-devel libselinux-devel libselinux-python libsepol-devel libsmi libstdc++-devel libsysfs libtiff libtool libtool-ltdl libwvstreams libxml2-devel libxml2-python libxslt libxslt-python lksctp-tools logwatch lrzsz lsof m2crypto mailcap mailx make man man-pages man-pages-ko mc mcstrans mdadm memtest86+ mesa-libGL mesa-libGL-devel mgetty microcode_ctl mkbootdisk mlocate mrtg mt-st mtools mtr mutt nc ncurses-devel net-snmp-libs netpbm nfs-utils nfs-utils-lib nmap nscd nss_db ntp ntsysv numactl oddjob openssh-clients openssl-devel pam-devel pam_krb5 pam_passwdqc pam_pkcs11 pango parted parted-devel patch pax pciutils pcsc-lite perl perl-Archive-Tar perl-BSD-Resource perl-Compress-Zlib perl-DBI perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-IO-Socket-INET6 perl-IO-Socket-SSL perl-IO-Zlib perl-Net-IP perl-Net-SSLeay perl-Newt perl-Socket6 perl-String-CRC32 perl-URI perl-libwww-perl pkgconfig pm-utils postgresql-libs prelink procmail psacct psutils pulseaudio-esound-compat pyOpenSSL pykickstart pyorbit pyparted python-pyblock pyxf86config quota rdate rdist readahead rmt rpcbind rpm-build rsh rsync rusers rwho samba samba-client samba-common samba-swat sendmail sendmail-cf setools setserial setuptool shared-mime-info sip sos spamassassin squashfs-tools strace stunnel symlinks sysfsutils syslinux sysstat system-config-date system-config-firewall talk tcl tcp_wrappers tcpdump tcsh telnet telnet-server time tk tmpwatch traceroute tree ttmkfdir unix2dos unixODBC unzip usbutils usermode vconfig vim-common vim-enhanced vsftpd wget wireless-tools words xfsprogs xfsprogs-devel xinetd xorg-x11-proto-devel yp-tools ypbind ypserv zip zlib-devel GConf2 ImageMagick ImageMagick-perl avahi-libs bwidget cloog-ppl crda cryptsetup-luks-libs cups db4-cxx deltarpm desktop-file-utils device-mapper-multipath-libs dmidecode dmraid-events docbook-dtds flac foomatic-db foomatic-db-filesystem foomatic-db-ppds ghostscript ghostscript-fonts gnome-doc-utils-stylesheets gnome-python2 gnome-python2-canvas gnome-user-docs gnome-vfs2 gpm-libs groff-perl gstreamer gstreamer-tools hal-info hal-libs html2ps hunspell iw jasper-libs kpathsea lcms-libs libIDL libX11-common libXcomposite libXdamage libXdamage-devel libXext-devel libXfixes-devel libXfont libXres libXtst libXxf86vm-devel libasyncns libcanberra libcanberra-gtk2 libcom_err-devel libcroco libdrm-devel libedit libglade2 libgnomecanvas libgsf libnetfilter_conntrack libnfnetlink libnotify libogg libpaper librsvg2 libsamplerate libsndfile libtalloc libtasn1 libtdb libthai libtirpc libusb1 libvorbis libwmf-lite libwnck libxcb libxcb-devel lm_sensors-libs mesa-dri-drivers mozilla-filesystem mpfr mrtg-libs netpbm-progs notification-daemon ntpdate openjpeg-libs pcsc-lite-libs perl-Compress-Raw-Zlib perl-Crypt-OpenSSL-Bignum perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random perl-Date-Manip perl-Digest-SHA perl-Encode-Detect perl-ExtUtils-MakeMaker perl-ExtUtils-ParseXS perl-IO-Compress-Base perl-IO-Compress-Zlib perl-Mail-DKIM perl-MailTools perl-Module-Pluggable perl-Net-DNS perl-Net-LibIDN perl-NetAddr-IP perl-Package-Constants perl-Pod-Escapes perl-Pod-Simple perl-SNMP_Session perl-Test-Harness perl-Time-HiRes perl-TimeDate perl-YAML-Syck perl-devel perl-libs perl-version pixman poppler poppler-data poppler-utils portreserve ppl psutils-perl pulseaudio pulseaudio-libs pycairo pygobject2 pygtk2 pygtk2-libglade python-decorator python-deltarpm python-slip python-slip-dbus rarian rarian-compat rtkit samba-winbind-clients setools-console setools-gui setools-libs setools-libs-tcl sgml-common sgpio sound-theme-freedesktop speex startup-notification system-config-date-docs system-config-firewall-tui tex-preview texinfo texinfo-tex texlive texlive-dvips texlive-latex texlive-texmf texlive-texmf-dvips texlive-texmf-errata texlive-texmf-errata-dvips texlive-texmf-errata-fonts texlive-texmf-errata-latex texlive-texmf-fonts texlive-texmf-latex texlive-utils tokyocabinet urlview urw-fonts usermode-gtk xcb-util xml-common xorg-x11-font-utils xulrunner xz xz-lzma-compat yelp lksctp-tools-devel apr-util apr-util-devel libtool-ltdl-devel libmcrypt libmcrypt-devel gmp mhash mhash-devel gdbm zlib curl g++ openssl bzip2-devel libc-client-devel bison system-config-securitylevel

@ cmake 설치
# cd /usr/local/src
# wget http://www.cmake.org/files/v2.8/cmake-2.8.7.tar.gz
# tar zxvf cmake-2.8.7.tar.gz
# cd cmake-2.8.7
# ./bootstrap
# make; make install

@ mysql 최신버전 설치
# yum remove mysql*
# cd /usr/local/src
# wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz/from/http://mirror.khlug.org/mysql/
http://www.mysql.com/downloads/mysql/ 에서 Source Code 중,
Generic Linux (Architecture Independent), Compressed TAR Archive 최신버전을 Download 수행한다.
# tar zxvf mysql-5.5.27.tar.gz (최신버전) 
# cd mysql-5.5.27  (최신버전) 
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLED_LOCAL_INIFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_ZLIB=system -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_VALGRIND=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_DATADIR=/usr/local/mysql/data
# make; make install
# groupadd mysql
# useradd -M -o -r -d /usr/local/mysql -s /sbin/nologin -c "Mysql Server" -u 27 -g mysql mysql >/dev/null 2>&1 || :
# chown -R root:mysql /usr/local/mysql; chown -R mysql:mysql /usr/local/mysql/data
# cd /usr/local/mysql; ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
@ 비밀번호 설정
# cp support-files/mysql.server /etc/init.d/mysqld
# cp support-files/my-huge.cnf /etc/my.cnf --> 메모리 1G 이상
# cp support-files/my-medium.cnf /etc/my.cnf
# vi /etc/init.d/mysqld ##### datadir 찾아서 datadir=/usr/local/mysql/data 라고 입력
# service mysqld start
# chkconfig --add mysqld
# chkconfig --level 35 mysqld on (런레벨 35일때 자동 실행 된다)
# chkconfig --list | grep mysqld
@ 리부팅시 서비스 실행하지 않으려면 - chkconfig mysqld off
# /usr/local/mysql/bin/mysqladmin -u root password
설치 작업이 끝났다면 익명접근권한을 삭제하자. ( mysql 콘솔에 그냥 접근을 못하게 해야 함.)
# /usr/local/mysql/bin/mysql -u root -p
# Enter password:
# mysql> USE mysql;
# mysql> delete from user where password = "";
# mysql> exit
# /usr/local/mysql/bin/mysqladmin -u root -p reload
# Enter password:


@ cronolog 설치(apache log 분할)
# cd /usr/local/src
# wget http://www.youtu.kr/mirror/cronolog-1.6.2.tar.gz
# tar xvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make;make install 

 

APACHE


Apache 설치

1. 라이브러리 설치(설치 되어 있음 안 깔아도 됨)
yum -y install gcc
yum -y install openssl-devel
yum -y install apr-devel
yum -y install apr-util-devel
yum -y install pcre-devel
yum -y install zlib-devel

홈페이지를 운영 중, 해당 도메인 접속 시에 갑자기 홈페이지가 나타나지 않고, 아파치 기본화면이 나타나면,
아래의 2번과 3번을 재수행하여, configure의 아파치 설치위치를 재정의해주어야 한다. 

2. 아파치 다운로드 & 컴파일 
# cd /usr/local/src 
# wget http://linux-files.com/httpd/httpd-2.4.1.tar.gz  (http://linux-files.com/httpd/ 에서 최신버전 검색하여 버전 수정 후에 수행)
# tar zxvf httpd-2.4.1.tar.gz (<--- 호환을 위해 2.4.1 버전 사용)
# cd httpd-2.4.1

./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-ssl --with-ssl=/usr/local/openssl --enable-modules=ssl --enable-rewrite --with-included-apr --with-included-apr-util --enable-deflate --enable-expires --enable-headers --enable-proxy --enable-mpms-shared=all./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-ssl --with-ssl=/usr/local/openssl --enable-modules=ssl --enable-rewrite --with-included-apr --with-included-apr-util --enable-deflate --enable-expires --enable-headers --enable-proxy --enable-mpms-shared=all 

# make && make install

 
3. 데몬등록
# /usr/local/apache/bin/apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
@ chkconfig를 이용해서 자동실행 등록해야 하지만 이전에 실행 스크립트 파일에 아래 내용 추가가 선행되어야 한다.
# vi /etc/init.d/httpd
-httpd 파일의 맨 끝에 아래의 내용... 
-----------------------------------------------  

chkconfig: 2345 90 90
description: init file for Apache server daemon
processname: /usr/local/apache/bin/apachectl
config: /usr/local/apache/conf/httpd.conf
pidfile: /usr/local/apache/logs/httpd.pid 
-----------------------------------------------  
여기까지를 추가한다.

# chkconfig --add httpd
# chkconfig --list | grep httpd
 
4. apache 설정 변경
# vi /usr/local/apache/conf/httpd.conf
KeepAlive ON
주석을 해제하고 서버이름이나 IP주소를 설정합니다.
ServerName localshot:80
서버관리자 메일주소 설정
ServerAdmin webmaster@localhost
인터넷주소 rewrite 모드 사용을 위한 설정
AllowOverride None –> AllowOverride All
웹 페이지 접속시 기본적으로 읽어 들일 파일명 설정
DirectoryIndex index.html 를 찾아 DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp 로 수정
아래와 같이 추가 합니다.
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc -->추가
AddType application/x-httpd-php-source .phps -->추가

주석제거
# AddHandler cgi-script .cgi
몇가지 주석 및 제거 - 필요에 따라 더 적용해도 무방함
Include conf/extra/httpd-mpm.conf <-- 주석제거
Include conf/extra/httpd-userdir.conf <-- 주석제거
Include conf/extra/httpd-vhosts.conf <-- 주석제거
Include conf/extra/httpd-default.conf <-- 주석제거
<Directory />
Options FollowSymLinks
AllowOverride All <-- 수정
Order deny,allow
#Deny from all <-- 주석처리
</Directory>
#vi /usr/local/apache/conf/extra/httpd-userdir.conf
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 를
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec 로
Indexes 를 삭제 한다.
#vi /usr/local/apache/conf/extra/httpd-vhosts.conf
내용을 모두 삭제하고 구문만 적용후 저장 - 저장방법은 :wq 인 것은 아시죠...^^
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/
ServerName *
</VirtualHost>

#NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot /usr/local/apache/htdocs/
    ServerName www.도메인주소
    ErrorLog logs/도메인주소.error_log
    #CustomLog logs/dummy-host2.example.com-access_log common
</VirtualHost>

# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00526: Syntax error on line 10 of /usr/local/apache/conf/extra/httpd-userdir.conf:
Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so 부분의 주석을 제거

# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00534: httpd: Configuration error: No MPM loaded.
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule mpm_event_module modules/mod_mpm_event.so 부분의 주석을 제거
(특정 LoadModule에 대한 오류가 발생한 경우, 해당 부분의 주석을 제거하여 재실행)
 
# /etc/init.d/httpd start 를 실행했을 때,

httpd: Syntax error on line 144 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_mpm_event.so into server: /usr/local/apache/modules/mod_mpm_event.so: cannot open shared object file: No such file or directory
와 같은 오류가 발생하는 경우, 해당 라인으로 이동(:144)하여 주석처리 후 재실행 하되,
AH00557: httpd: apr_sockaddr_info_get() failed for 도메인명
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
와 같은 오류가 추가로 발생하는 경우,
# cd /etc
# cp hosts hosts.old 를 수행하여 백업하고,
# vi hosts 를 수행하여,
127.0.0.1   localhost.localdomain localhost 도메인명
서버에할당된주소 도메인주소
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
로 수정하고 저장한 후,
# /etc/init.d/httpd start 를 실행하면 정상 수행되어야 한다.


@ 접속이 안될경우 80포트 열어 주어야 한다.
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT =>추가
# /etc/init.d/iptables restart 또는 service iptables restart
# service iptables restart 를 재수행해준다.

@ 기타 모듈 설치 (아래 PHP 설치 시에 라이브러리로 사용될 모듈)
# cd /usr/local/src
# mkdir etc
# cd etc
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.8.tar.gz
# wget http://www.peregrinehw.com/downloads/gd/gd-2.0.33.tar.gz
# wget http://www.youtu.kr/mirror/jpegsrc.v6b.tar.gz
# wget http://sourceforge.net/projects/libpng/files/libpng15/1.5.12/libpng-1.5.12.tar.gz
# wget http://www.youtu.kr/mirror/imap-2004g.tar.bz2
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
# wget http://heanet.dl.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxvf freetype-2.4.8.tar.gz; tar zxvf gd-2.0.33.tar.gz; tar zxvf jpegsrc.v6b.tar.gz; tar zxvf libpng-1.5.12.tar.gz; tar jxvf imap-2004g.tar.bz2; tar zxvf pcre-8.30.tar.gz; tar zxvf libmcrypt-2.5.8.tar.gz; tar zxvf libiconv-1.14.tar.gz
# cd /usr/local/src/etc/jpeg-6b; mkdir -p /usr/local/libjpeg/bin; mkdir -p /usr/local/libjpeg/man/man1; make clean;make -j4; make install; cp -f libjpeg.a /usr/local/lib; cp -f *.h /usr/include
# cd /usr/local/src/etc/libpng-1.5.12
# cp scripts/makefile.linux Makefile
# make clean;make -j4;make install
# cd /usr/local/src/etc/freetype-2.4.8
# make clean;./configure --prefix=/usr/local/freetype;make -j4;make install
# cd /usr/local/src/etc/gd-2.0.33
# make clean;./configure --prefix=/usr/local/gd;make -j4;make install
# cd /usr/local/src/etc/imap-2004g
# make clean;make slx SPECIALS="SSLDIR=/usr SSLINCLUDE=/usr/include SSLLIB=/usr/lib"
# cd /usr/local/src/etc/imap-2004g/c-client
# cp -f c-client.a /usr/lib; cp -f rfc822.h mail.h linkage.h /usr/include
# cd /usr/local/src/etc/pcre-8.30
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libmcrypt-2.5.8
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libiconv-1.14
# make clean;./configure --prefix=/usr/local;make -j4;make install
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2


PHP 설치
 
1.php 다운로드 & 라이브러리 컴파일
yum -y install zlib curl
yum -y install openssl openssl-devel
yum -y install libtermcap-devel ncurses-devel libc-client-devel bzip2-devel
yum -y install bison
yum -y install libpng

yum install net-snmp net-snmp-devel
yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel libtermcap-devel ncurses-devel libxml2-devel libc-client-devel bzip2-devel
rpm -qa gcc* cpp* compat-gcc* flex* openssl*
rpm -qa libjpeg* libpng* freetype* gd-*
 
cd /usr/local/src
wget http://graphics.cs.uni-sb.de/NMM/Download/external/jpegsrc.v6b.tar.gz
tar xvfz jpegsrc.v6b.tar.gz
cd jpeg-6b/
mkdir -p /usr/local/man/man1
./configure --enable-shared --enable-static
make && make install
 
cd /usr/local/src
wet http://cdnetworks-kr-1.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar xvfz libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make && make install

# cd /usr/local/src
# wget http://kr2.php.net/get/php-5.3.10.tar.gz/from/kr.php.net/mirror
# tar zxvf php-5.3.10.tar.gz
# cd php-5.3.10
# make clean
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir=/usr/local/freetype --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --enable-sigchild --enable-magic-quotes --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv=/usr/local --enable-mbregex --with-imap --with-imap-ssl --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt=/usr/local/libmcrypt --with-kerberos --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --enable-mod-charset --enable-safe-mode --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-snmp --with-zlib-dir --with-ttf --enable-exif --with-xpm-dir --with-libxml-dir --with-pcre-dir --with-ncurses --enable-sqlite-utf8 --with-regex=php --with-bz2
...
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+
Thank you for using PHP.
Notice: Following unknown configure options were used:
--with-ttf
--with-ncurses
Check './configure --help' for available options
[root@ns php-5.3.10]#
위와 같이 표시되어야 정상수행된 것입니다. 확인하시기 바랍니다. 
# make -j4; make install
# cp php.ini-production /usr/local/lib/php.ini --> 5.3.0 이후 버전 
도메인주소 부분에는 xxx.com과 같이 입력하면 된다.

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin 를
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/php/bin 로 수정

@ php.ini 설정
# vi /usr/local/lib/php.ini
post_max_size = 100M (Default: 8M)
file_uploads = On
upload_max_filesize = 100M (Default: 2M)
allow_url_fopen = Off (Default: On)
allow_url_include = Off
short_open_tag = On (Default: Off)
disable_functions = exec,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
(Default: disable_functions =)

# ntsysv <--- 서비스 상태확인

# reboot <-- 설정을 마치면 한번쯤 리부팅 해 주세요...^^
 
 
서비스 시작
# service mysqld start
# service httpd start


새로운 도메인을 추가하는 경우, 아래의 처리들을 다시한번 확인해본다.
--------------------------------------------------------------------------------
[root@ns user]# vi /etc/resolv.conf
[root@ns user]# vi /etc/hosts <--- 신규 추가 시에 추가 필요
[root@ns user]# vi /etc/named.conf <--- 신규 추가 시에 추가 필요
[root@ns user]# vi /var/named/chroot/var/named/도메인주소.zone <--- 신규 추가 시에 생성 필요
[root@ns user]# ln -s /var/named/chroot/var/named/도메인주소.zone /var/named/도메인주소.zone
[root@ns user]# vi /usr/local/apache/conf/httpd.conf <--- 신규 추가 시에 추가 필요

[root@ns user]# /etc/rc.d/init.d/named reload
[root@ns user]# service named restart  (# chkconfig --level 35 named on (부팅 시에 런레벨 35일때 자동 실행))
[root@ns user]# service httpd restart

이제, 도메인을 등록한 사이트의 네임 호스트 관리에서 네임 호스트 및 IP주소를 추가하고,
네임서버를 네임 호스트 관리에서 입력한 네임 호스트로 입력하여 변경을 수행(보통, 등록한 사이트의 네임서버로 초기설정된 상태)

등록을 완료한 후에 ISP의 네임서버에 등록 및 변경이 수행되기까지는 약간의 시간이 필요하다.
잠시 후에 아래의 명령으로 정상 등록 및 변경여부를 확인한다.

[root@ns user]# nslookup 도메인주소
[root@ns user]# dig 도메인주소

시스템 > 관리 > 사용자 및 그룹에서 사용자를 추가 후에 권한을 변경한다. 

[root@ns user]# chmod 711 /home/사용자
[root@ns user]# chmod 755 /home/사용자/www
[root@ns user]# chgrp -R 사용자 /home/사용자
[root@ns user]# chown -R 사용자 /home/사용자


 
 
번외 Apache 계정별 사용 설정
vi /usr/local/apache/conf/httpd.conf
 
Include conf/extra/httpd-userdir.conf
LoadModule userdir_module modules/mod_userdir.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
주석 제거
 
/home/계정디렉토리 권한 711
/home/계정/public_html 권한 755 필요
 

 
참고 URL 
http://vogel.tistory.com/143


openSSL 설치를 위해서는 5.2 버젼에서는 5.2.11 , 5.2.12 버젼을 설치한다.
Zend Optimizer 설치를 위해서는 5.2 version을 설치 해야 한다.
Posted by iWithJoy
Linux/CentOS2012. 3. 7. 15:11
CentOS 6.2 minimal 설치 상태에서
http 2.2.22, mysql 5.5.20, php 5.3.10 소스 컴파일 설치를 해보았습니다.

@ 설치경로는 아래와 같으니 참조 하시길....
mysql = /usr/local/mysql/
apache = /usr/local/apache/
php = /usr/local/php/
apache-log = /logs/
db = /usr/local/mysql/data


@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql

@ 서버운영에 필요한 소스 및 라이브러리 추가

# yum -y install ORBit2 PyXML a2ps acpid alsa-lib amtu aspell at atk audiofile audit-libs-python autoconf autofs automake avahi avahi-glib bc bind bind-chroot bind-libs bind-utils cairo ccid compat-libstdc++-33 conman cpp cpuspeed crash createrepo crypto-utils cryptsetup-luks cups-libs cvs cyrus-sasl-md5 cyrus-sasl-plain db4-devel dbus-python device-mapper-multipath dhcp dhcp-devel dialog dmraid dos2unix dosfstools dump e2fsprogs-devel ed eject elfutils elfutils-libs enscript expat-devel expect expect-devel expectk fetchmail file finger flex fontconfig fontconfig-devel foomatic freetype freetype-devel ftp gcc gcc-c++ gd gd-devel gd-progs gdb gdbm-devel gettext gfs2-utils glib2-devel glibc-devel glibc-headers gmp-devel gnutls gpm gtk2 hal hdparm hesiod hicolor-icon-theme imake iptraf iptstate ipvsadm irqbalance jwhois kernel-devel kernel-headers keyutils-libs-devel kpartx krb5-devel krb5-workstation ksh lcms lftp libICE libSM libX11 libX11-devel libXau libXau-devel libXcursor libXdmcp libXdmcp-devel libXext libXfixes libXft libXi libXinerama libXpm libXpm-devel libXrandr libXrender libXt libXxf86vm libaio libaio-devel libart_lgpl libbonobo libc-client libcurl-devel libdaemon libevent libfontenc libgomp libgssglue libhugetlbfs libhugetlbfs-devel libidn-devel libjpeg libjpeg-devel libmng libnl libnl-devel libpcap libpng libpng-devel libselinux-devel libselinux-python libsepol-devel libsmi libstdc++-devel libsysfs libtiff libtool libtool-ltdl libwvstreams libxml2-devel libxml2-python libxslt libxslt-python lksctp-tools logwatch lrzsz lsof m2crypto mailcap mailx make man man-pages man-pages-ko mc mcstrans mdadm memtest86+ mesa-libGL mesa-libGL-devel mgetty microcode_ctl mkbootdisk mlocate mrtg mt-st mtools mtr mutt nc ncurses-devel net-snmp-libs netpbm nfs-utils nfs-utils-lib nmap nscd nss_db ntp ntsysv numactl oddjob openssh-clients openssl-devel pam-devel pam_krb5 pam_passwdqc pam_pkcs11 pango parted parted-devel patch pax pciutils pcsc-lite perl perl-Archive-Tar perl-BSD-Resource perl-Compress-Zlib perl-DBI perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-IO-Socket-INET6 perl-IO-Socket-SSL perl-IO-Zlib perl-Net-IP perl-Net-SSLeay perl-Newt perl-Socket6 perl-String-CRC32 perl-URI perl-libwww-perl pkgconfig pm-utils postgresql-libs prelink procmail psacct psutils pulseaudio-esound-compat pyOpenSSL pykickstart pyorbit pyparted python-pyblock pyxf86config quota rdate rdist readahead rmt rpcbind rpm-build rsh rsync rusers rwho samba samba-client samba-common samba-swat sendmail sendmail-cf setools setserial setuptool shared-mime-info sip sos spamassassin squashfs-tools strace stunnel symlinks sysfsutils syslinux sysstat system-config-date system-config-firewall talk tcl tcp_wrappers tcpdump tcsh telnet telnet-server time tk tmpwatch traceroute tree ttmkfdir unix2dos unixODBC unzip usbutils usermode vconfig vim-common vim-enhanced vsftpd wget wireless-tools words xfsprogs xfsprogs-devel xinetd xorg-x11-proto-devel yp-tools ypbind ypserv zip zlib-devel GConf2 ImageMagick ImageMagick-perl avahi-libs bwidget cloog-ppl crda cryptsetup-luks-libs cups db4-cxx deltarpm desktop-file-utils device-mapper-multipath-libs dmidecode dmraid-events docbook-dtds flac foomatic-db foomatic-db-filesystem foomatic-db-ppds ghostscript ghostscript-fonts gnome-doc-utils-stylesheets gnome-python2 gnome-python2-canvas gnome-user-docs gnome-vfs2 gpm-libs groff-perl gstreamer gstreamer-tools hal-info hal-libs html2ps hunspell iw jasper-libs kpathsea lcms-libs libIDL libX11-common libXcomposite libXdamage libXdamage-devel libXext-devel libXfixes-devel libXfont libXres libXtst libXxf86vm-devel libasyncns libcanberra libcanberra-gtk2 libcom_err-devel libcroco libdrm-devel libedit libglade2 libgnomecanvas libgsf libnetfilter_conntrack libnfnetlink libnotify libogg libpaper librsvg2 libsamplerate libsndfile libtalloc libtasn1 libtdb libthai libtirpc libusb1 libvorbis libwmf-lite libwnck libxcb libxcb-devel lm_sensors-libs mesa-dri-drivers mozilla-filesystem mpfr mrtg-libs netpbm-progs notification-daemon ntpdate openjpeg-libs pcsc-lite-libs perl-Compress-Raw-Zlib perl-Crypt-OpenSSL-Bignum perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random perl-Date-Manip perl-Digest-SHA perl-Encode-Detect perl-ExtUtils-MakeMaker perl-ExtUtils-ParseXS perl-IO-Compress-Base perl-IO-Compress-Zlib perl-Mail-DKIM perl-MailTools perl-Module-Pluggable perl-Net-DNS perl-Net-LibIDN perl-NetAddr-IP perl-Package-Constants perl-Pod-Escapes perl-Pod-Simple perl-SNMP_Session perl-Test-Harness perl-Time-HiRes perl-TimeDate perl-YAML-Syck perl-devel perl-libs perl-version pixman poppler poppler-data poppler-utils portreserve ppl psutils-perl pulseaudio pulseaudio-libs pycairo pygobject2 pygtk2 pygtk2-libglade python-decorator python-deltarpm python-slip python-slip-dbus rarian rarian-compat rtkit samba-winbind-clients setools-console setools-gui setools-libs setools-libs-tcl sgml-common sgpio sound-theme-freedesktop speex startup-notification system-config-date-docs system-config-firewall-tui tex-preview texinfo texinfo-tex texlive texlive-dvips texlive-latex texlive-texmf texlive-texmf-dvips texlive-texmf-errata texlive-texmf-errata-dvips texlive-texmf-errata-fonts texlive-texmf-errata-latex texlive-texmf-fonts texlive-texmf-latex texlive-utils tokyocabinet urlview urw-fonts usermode-gtk xcb-util xml-common xorg-x11-font-utils xulrunner xz xz-lzma-compat yelp lksctp-tools-devel apr-util apr-util-devel libtool-ltdl-devel libmcrypt libmcrypt-devel gmp mhash mhash-devel gdbm zlib curl g++ openssl bzip2-devel libc-client-devel bison system-config-securitylevel

@ cmake 설치
# cd /usr/local/src
# wget http://www.cmake.org/files/v2.8/cmake-2.8.7.tar.gz
# tar zxvf cmake-2.8.7.tar.gz
# cd cmake-2.8.7
# ./bootstrap
# make; make install

@ mysql 설치 5.5.20
# yum remove mysql
# cd /usr/local/src
# wget http://www.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz/from/http://mirror.khlug.org/mysql/
http://www.mysql.com/downloads/mysql/ 에서 Source Code 중,
Generic Linux (Architecture Independent), Compressed TAR Archive 최신버전을 Download 수행한다.
# tar zxvf mysql-5.5.27.tar.gz (최신버전) 
# cd mysql-5.5.27  (최신버전) 
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DENABLED_LOCAL_INIFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_SSL=system -DWITH_ZLIB=system -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_VALGRIND=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_DATADIR=/usr/local/mysql/data
# make; make install
# groupadd mysql
# useradd -M -o -r -d /usr/local/mysql -s /sbin/nologin -c "Mysql Server" -u 27 -g mysql mysql >/dev/null 2>&1 || :
# chown -R root:mysql /usr/local/mysql; chown -R mysql:mysql /usr/local/mysql/data
# cd /usr/local/mysql; ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
@ 비밀번호 설정
# cp support-files/mysql.server /etc/init.d/mysqld
# cp support-files/my-huge.cnf /etc/my.cnf --> 메모리 1G 이상
# cp support-files/my-medium.cnf /etc/my.cnf
# vi /etc/init.d/mysqld ##### datadir 찾아서 datadir=/usr/local/mysql/data 라고 입력
# service mysqld start
# chkconfig --add mysqld
# chkconfig --level 35 mysqld on (런레벨 35일때 자동 실행 된다)
# chkconfig --list | grep mysqld
@ 리부팅시 서비스 실행하지 않으려면 - chkconfig mysqld off
# /usr/local/mysql/bin/mysqladmin -u root password
설치 작업이 끝났다면 익명접근권한을 삭제하자. ( mysql 콘솔에 그냥 접근을 못하게 해야 함.)
# /usr/local/mysql/bin/mysql -u root -p
# Enter password:
# mysql> USE mysql;
# mysql> delete from user where password = "";
# mysql> exit
# /usr/local/mysql/bin/mysqladmin -u root -p reload
# Enter password:

root 비밀번호를 잊어버린 경우,

$ mysql -u root

Error 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


위와 같은 에러가 난다면, mysql password를 재설정 해야한다.

(RHEL 5.6 환경)


# killall mysqld





# service mysqld stop

# cd /usr/bin
# mysqld_safe --skip-grant-tables

실행 후에 다른 터미널에서 아래를 수행한다.

# mysql
mysql> use mysql;

mysql> UPDATE user SET password=PASSWORD('newpassword') WHERE user = 'root';

 

mysql> FLUSH PRIVILEGES;

mysql> exit;

 

기존 터미널로 돌아와서 [Ctrl]+z를 누른 후에

# ps -ef | grep mysql

수행하여 수행되고 있는 모든 프로세스를

# kill -9 프로세스번호

수행하여 강제종료 시킨 후에 아래와 같이 mysql을 다시 시작한다.


# service mysqld start
# /usr/local/mysql/bin/mysql -u root -p

지정한 password를 phpMyAdmin 등을 사용하여 (사용을 위해 지정한 도메인명 등으로) 로그인하면 정상 접근된다.
참고로, user에 대한 정보는 /usr/local/mysql/data/mysql 디렉토리의 아래의 같은 3개의 파일에 저장되는데,

user.frm

user.MYD

user.MYI

정상처리된 파일을 백업하여 두었다가 문제가 발생할 경우, 덮어쓰기를 수행하여 복구하는 것도 한가지 방법일 것이다.

만약, 위와 같은 처리 후에도 정상 start 시에 로그인이 불가하여, mysql을 완전히 제거 후에 재설치를 원할 경우,

# yum remove mysql 을 수행 후에

반드시, /usr/local의 mysql 디렉토리를 통째로 삭제 후에 재설치를 수행해야 한다.


@ cronolog 설치(apache log 분할)
# cd /usr/local/src
# wget http://www.youtu.kr/mirror/cronolog-1.6.2.tar.gz
# tar xvf cronolog-1.6.2.tar.gz
# cd cronolog-1.6.2
# ./configure
# make;make install


@ 아파치 설치 2.2.21
# cd /usr/local/src
# wget http://mirror.khlug.org/apache//httpd/httpd-2.2.22.tar.gz
# wget
http://linux-files.com/httpd/httpd-2.2.22.tar.gz
# tar zxvf httpd-2.2.22.tar.gz
# cd httpd-2.2.22
# make clean
# vi server/mpm/prefork/prefork.c
@ #define DEFAULT_SERVER_LIMIT 256 부분을 :sh 명령으로 잠시 나가서
# ulimit -a max user processes 를 수행하여
위의 해당 값을 확인하여 설정된 값을 넘지 않도록 256의 배수만큼 수정 후, 저장해준다. Ex) 1024

<주의> 2.4부터 변경된 부분은 apr과 apr-util을 별도로 다운 받아야 함. 그전에는 apr과 apr-util이 포함되어 있었음.

   - Apache HTTP Server : http://httpd.apache.org/download.cgi

   - APR & APR-util : http://apr.apache.org/download.cgi

apr & apr-util copy

 prompt> cp -R ./apr-1.4.6 ./httpd-2.4.1/srclib/apr
 prompt> cp -R ./apr-util-1.4.1 ./httpd-2.4.1/srclib/apr-util

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-so --enable-rewrite --enable-ssl --enable-proxy --enable-modules=all 

configure

    - apr & apr-util을 별도로 설치해서 사용할 경우,

      옵션으로 "--with-apr=apr 설치 디렉토리 --with-apr-util=apr-util 설치 디렉토리" 사용

 prompt> cd httpd-2.4.1
 prompt> ./configure --prefix=설치할 디렉토리 \
             --enable-module=so \
             --enable-so \
             --enable-ssl \
             --enable-rewrite \
             --enable-mpms-shared=all \
             --with-included-apr

# ./configure --prefix=/usr/local/apache --enable-shared=max --enable-rule=SHARED_CORE --enable-so --enable-rewrite --enable-ssl --enable-proxy --enable-modules=so --enable-mpms-shared=all --with-included-apr
# make; make install
# /usr/local/apache/bin/apachectl -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
@ chkconfig를 이용해서 자동실행 등록해야 하지만 이전에 실행 스크립트 파일에 아래 내용 추가가 선행되어야 한다.
# vi /etc/init.d/httpd
-httpd 파일의 맨 끝에 아래의 내용... 
# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/apache/bin/apachectl
# config: /usr/local/apache/conf/httpd.conf
# pidfile: /usr/local/apache/logs/httpd.pid 
여기까지를 추가한다.
# chkconfig --add httpd
# chkconfig --list | grep httpd
# /etc/init.d/httpd start 를 실행했을 때,
httpd: Syntax error on line 144 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/mod_mpm_event.so into server: /usr/local/apache/modules/mod_mpm_event.so: cannot open shared object file: No such file or directory
와 같은 오류가 발생하는 경우, 해당 라인으로 이동(:144)하여 주석처리 후 재실행 하되,
AH00557: httpd: apr_sockaddr_info_get() failed for 도메인명
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
와 같은 오류가 추가로 발생하는 경우,
# cd /etc
# cp hosts hosts.old 를 수행하여 백업하고,
# vi hosts 를 수행하여,
127.0.0.1   localhost.localdomain localhost 도메인명
서버에할당된주소 도메인주소
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
로 수정하고 저장한 후,
# /etc/init.d/httpd start 를 실행하면 정상 수행되어야 한다.


@ 접속이 안될경우 80포트 열어 주어야 한다.
#vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT =>추가
# /etc/init.d/iptables restart 또는 service iptables restart


@ 기타 모듈 설치
# cd /usr/local/src
# mkdir etc
# cd etc
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.8.tar.gz
# wget http://www.peregrinehw.com/downloads/gd/gd-2.0.33.tar.gz
# wget http://www.youtu.kr/mirror/jpegsrc.v6b.tar.gz
# wget http://sourceforge.net/projects/libpng/files/libpng15/1.5.9/libpng-1.5.9.tar.gz
# wget http://www.youtu.kr/mirror/imap-2004g.tar.bz2
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
# wget http://heanet.dl.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxvf freetype-2.4.8.tar.gz; tar zxvf gd-2.0.33.tar.gz; tar zxvf jpegsrc.v6b.tar.gz; tar zxvf libpng-1.5.9.tar.gz; tar jxvf imap-2004g.tar.bz2; tar zxvf pcre-8.30.tar.gz; tar zxvf libmcrypt-2.5.8.tar.gz; tar zxvf libiconv-1.14.tar.gz
# cd /usr/local/src/etc/jpeg-6b; mkdir -p /usr/local/libjpeg/bin; mkdir -p /usr/local/libjpeg/man/man1; make clean;make -j4; make install; cp -f libjpeg.a /usr/local/lib; cp -f *.h /usr/include
# cd /usr/local/src/etc/libpng-1.5.9
# cp scripts/makefile.linux Makefile
# make clean;make -j4;make install
# cd /usr/local/src/etc/freetype-2.4.8
# make clean;./configure --prefix=/usr/local/freetype;make -j4;make install
# cd /usr/local/src/etc/gd-2.0.33
# make clean;./configure --prefix=/usr/local/gd;make -j4;make install
# cd /usr/local/src/etc/imap-2004g
# make clean;make slx SPECIALS="SSLDIR=/usr SSLINCLUDE=/usr/include SSLLIB=/usr/lib"
# cd /usr/local/src/etc/imap-2004g/c-client
# cp -f c-client.a /usr/lib; cp -f rfc822.h mail.h linkage.h /usr/include
# cd /usr/local/src/etc/pcre-8.30
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libmcrypt-2.5.8
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libiconv-1.14
# make clean;./configure --prefix=/usr/local;make -j4;make install
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

@ PHP 설치
# yum install net-snmp net-snmp-devel
# yum -y install libjpeg-devel libpng-devel freetype-devel gd-devel libtermcap-devel ncurses-devel libxml2-devel libc-client-devel bzip2-devel
# rpm -qa gcc* cpp* compat-gcc* flex* openssl*
# rpm -qa libjpeg* libpng* freetype* gd-*
 
# cd /usr/local/src
# wget http://kr2.php.net/get/php-5.3.10.tar.gz/from/kr.php.net/mirror
# tar zxvf php-5.3.10.tar.gz
# cd php-5.3.10
# make clean
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir=/usr/local/freetype --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --enable-sigchild --enable-magic-quotes --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv=/usr/local --enable-mbregex --with-imap --with-imap-ssl --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt=/usr/local/libmcrypt --with-kerberos --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --enable-mod-charset --enable-safe-mode --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-snmp --with-zlib-dir --with-ttf --enable-exif --with-xpm-dir --with-libxml-dir --with-pcre-dir --with-ncurses --enable-sqlite-utf8 --with-regex=php --with-bz2
...
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.
Notice: Following unknown configure options were used:
--with-ttf
--with-ncurses
Check './configure --help' for available options
[root@ns php-5.3.10]#
위와 같이 표시되어야 정상수행된 것입니다. 확인하시기 바랍니다. 
# make -j4; make install
# cp php.ini-production /usr/local/lib/php.ini --> 5.3.0 이후 버전

@ 아파치 설정
# vi /usr/local/apache/conf/httpd.conf
KeepAlive ON
주석을 해제하고 서버이름이나 IP주소를 설정합니다.
ServerName localshot:80
서버관리자 메일주소 설정
ServerAdmin webmaster@localhost
인터넷주소 rewrite 모드 사용을 위한 설정
AllowOverride None –> AllowOverride All
웹 페이지 접속시 기본적으로 읽어 들일 파일명 설정
DirectoryIndex index.html 를 찾아 DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp 로 수정
아래와 같이 추가 합니다.
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc -->추가
AddType application/x-httpd-php-source .phps -->추가

주석제거
# AddHandler cgi-script .cgi
몇가지 주석 및 제거 - 필요에 따라 더 적용해도 무방함
Include conf/extra/httpd-mpm.conf <-- 주석제거
Include conf/extra/httpd-userdir.conf <-- 주석제거
Include conf/extra/httpd-vhosts.conf <-- 주석제거
Include conf/extra/httpd-default.conf <-- 주석제거
<Directory />
Options FollowSymLinks
AllowOverride All <-- 수정
Order deny,allow
#Deny from all <-- 주석처리
</Directory>
#vi /usr/local/apache/conf/extra/httpd-userdir.conf
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 를
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec 로
Indexes 를 삭제 한다.
#vi /usr/local/apache/conf/extra/httpd-vhosts.conf
내용을 모두 삭제하고 구문만 적용후 저장 - 저장방법은 :wq 인 것은 아시죠...^^
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /usr/local/apache/htdocs/
ServerName *
</VirtualHost>

#NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host2.example.com
    DocumentRoot /usr/local/apache/htdocs/
    ServerName www.도메인주소
    ErrorLog logs/도메인주소.error_log
    #CustomLog logs/dummy-host2.example.com-access_log common
</VirtualHost>

도메인주소 부분에는 xxx.com과 같이 입력하면 된다.

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin 를
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/php/bin 로 수정

@ php.ini 설정
# vi /usr/local/lib/php.ini
post_max_size = 100M (Default: 8M)
file_uploads = On
upload_max_filesize = 100M (Default: 2M)
allow_url_fopen = Off (Default: On)
allow_url_include = Off
short_open_tag = On (Default: Off)
disable_functions = exec,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
(Default: disable_functions =)


# /etc/init.d/httpd start 수행 시에 아래와 같은 오류가 발생하는 경우,
AH00526: Syntax error on line 10 of /usr/local/apache/conf/extra/httpd-userdir.conf:
Invalid command 'UserDir', perhaps misspelled or defined by a module not included in the server configuration
# vi /etc/httpd/conf/httpd.conf 로 들어가서
LoadModule userdir_module /etc/httpd/modules/mod_userdir.so 부분의 주석을 제거

# ntsysv <--- 서비스 상태확인

# reboot <-- 설정을 마치면 한번쯤 리부팅 해 주세요...^^

'Linux > CentOS' 카테고리의 다른 글

Adding Modules to httpd.conf With Apache 2  (0) 2012.03.08
CentOS 6.3 APM 설치  (0) 2012.03.07
웹서버 세팅에 관한 문서2  (0) 2012.03.06
웹서버 세팅에 관한 문서1  (0) 2012.03.06
CentOS phpMyAdmin 설치  (0) 2012.03.05
Posted by iWithJoy