레이블이 Apache인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Apache인 게시물을 표시합니다. 모든 게시물 표시

2009년 7월 21일 화요일

Trac 설치 및 기본 플러그인 설치와 설정

Trac은 미국항공우주국의 분사추진 연구소에서 사용할 정도로 전 세계적으로 널리 사용되고 있다. Trac은 아래와 같은 특점이 있음으로 하여 많은 프로젝트를 진행하는 개발자들이 애용한다.

  1. 오픈 소스로 작성되었기 때문에 언제든지 사용자가 소스를 수정하여 사용할 수있다. 참고로 Trac은 Python이라고 불리우는 언어로 만들어졌다.
  2. Trac은 문서, SVN, WBS 등 모든것을 웹 기반으로 관리할 수 있다. 웹 브라우저로 프로젝트 정보에 언제 어디서든 접근할 수 있으며, 누구라도 수정할 수 있다. 히스토리 관리가 가능하기 때문에 변경사항을 추적하기 쉽다.
  3. SVN, VSS, CVS 등 여러 버전 관리 시스템과 연동할 수 있다.

Trac의 설치
Trac은 Python으로 만들어져 있기 때문에 Python언어를 잘 모르는 개발자들한테는 아주 생소한 존재일지도 모른다. Trac을 설치하려면 Apache, Python, mod_python, pysqlite 와 같이 여러 개의 소프트웨어를 함께 설치해야 하기에 좀 번거롭다.

1. 아파치 서버 설치
Apache 웹 서버 설치는 가장 무난하므로 여기서는 생략 하겠다. 단 집고 넘어갈 점이라면 Apache 서버 설치경로 인데 나의 경우 D 드라이버로 정했다.

2. Python 설치
Trac은 Python으로 개발했으므로 Python을 설치해야 한다.
  • 사이트: http://www.python.org
  • 다운로드: http://www.python.org/download/
  • 다운로드 할 파일: Python 2.5.4 Windows installer (Windows binary -- does not include source)
  • 설치 파일: python-2.5.4.msi
Python 설치 파일을 클릭하면 Python 프로그램의 사용자를 지정하는 화면이 나타난다. 모든 사용자가 사용할 수 있게 Install for all users를 선택한 다음 'Next' 버튼을 눌러 다음 화면으로 이동한다.



Python을 설치할 디렉토리를 지정하는 화면에서 C:\Python25를 선택한 다음 'Next'버튼을 누른다.



설치 할 Python의 구성 요소를 선택하는 화면이다. 기본 설정을 그대로 사용한다. 기본값으로 Register Extensions, Tcl/Tk, Documentation, Utility Scripts, Test suite 등을 그대로 설치한다. 'Next' 버튼을 누르면 Python설치가 진행된다. 몇초간 걸리므로 내심하게 기다려주면 되겠다.



오케이, 아래와 같은 창이 뜨면 설치가 성공한것이다. 잊지 말것은 이것은 Windows, DOS용 Python이다. Linux용은 다른 방식으로 설치가 될것이다.(시간나면 Linux용 설치방법까지 업데이트 할 계획이다.) 'Finish'를 기분좋게 클릭하고 설치를 완료하자.



3. mod_python 설치
Apache에서 Python코드를 실행하는 방법은 CGI방식과 Apache 모듈 방식이 있다. (이점은 PHP와 흡사하다, PHP와 Apache를 연동하였던 분이라면 쉽게 무난하게 이해가 가능할 것이다.) 그러나 CGI방식은 속도가 느리므로 크게 권장하지 않고 일반적으로 mod_python Apache모듈을 설치해 모듈 방식으로 Python 코드를 실행한다. 그러기 위헤서는 mod_python을 설치하는 과정이 필요하다. 결국 이 과정자체가 설치이면서 Python과 Apache를 연동하는 과정이기도 하다.
  • 사이트: http://www.modpython.org
  • 다운로드: http://httpd.apache.org/modules/python-download.cgi
  • 설치 파일: mod_python-3.3.1.win32-py2.5-Apache2.2.exe
위에 링크에는 Apache 2.2.용 mod python을 명시했는데 사실상 Apache버전에 마추어 적당한 mod python을 다운로드 받어야 한다.

mod_python 설치 파일을 실행하면 설치 화면이 나타난다. 다음을 눌러 이동한다.



Python이 설치되어 있다면 Python이 설치된 디렉토리 경로를 확인할 수 있다. 레지스터리에 Python설치관련 정보가 남아있으므로 무난히 찾을수가 있겠다. 모듈이 설치 될 기본 경로는 Python Installation Path/Lib/site-packages 이다.



설치 준비 화면이다. 다음을 누르면 설치가 진행된다.



mod_python을 설치하는 중 Apache가 설치된 경로를 지정하는 다이얼로그박스가 뜰것이다. 앞에서 Apache를 설치한 디렉토리를 정해주고 '마침' 버튼을 누르면 모든 설치가 무난히 완료 될것이다.
mod_python을 설치한 후 Apache 설정 파일에 mod_python.so 모듈을 추가해야 한다. Apache를 동적 모듈 로드 모드로 설치를 했으면 이 부분도 무난히 진행이 될것이다. 아파치 설치 디렉토리/conf/httpd.conf 파일을 메모장을 열고 다음과 같이 mod_python.so 파일을 설정한다. httpd.conf 파일을 보면 이미 Dynamic Shared Object(DSO)파일이 설정이 되어진것을 확인 할 수가 있겠다. 그 아래에 우리가 넣은 라이브러리만 추가해주면 된다.



Apache 서비스를 재시작해주고 Apache 서비스가 정상적으로 시작되면 mod_python이 성공적으로 설치가 되었음을 의미한다.

4. Genshi 설치
Genshi는 PHP진영에서 사용되는 smarty나 JAVA진영에서 사용되는 Velocity와 같은 템플릿 엔진이다. 단 Genshi는 Python언어 용이라는 점이다. 우리가 설치할 Trac의 버전(0.11) Genshi는 디자인 템플릿 엔진으로 사용함으로 Trac을 돌리기 위해서는 필수로 설치를 해줘야만 한다.
  • 사이트: http://genshi.edgewall.org/
  • 다운로드: http://genshi.edgewall.org/wiki/Download
  • 설치 파일: Genshi-0.5.1.win32-py2.5.exe
Genshi 설치 파일을 클릭하면 Genshi 설치 화면이 나타난다. '다음' 버튼을 눌러 이동한다.



mod python을 설치했을 때 처럼 python경로를 설정해주는 창이 뜰것인데 기본으로 설정된 사항을 묵인하고 '다음' 버튼을 누른다. 그다음도 몇몇 창이 뜰것인데 모두 묵인으로 '다음' 버튼을 클릭하여 설치를 진행한다.



5. pysqlite 설치
Trac은 sqlite DBMS를 사용한다. pysqlite는 Python언어환경에서 sqlite DBMS접근을 지원하도록 만들어진 라이브러리이다. JAVA에서 놓고보면 sqlite용 jdbc driver인 셈이다. Trac을 사용하려면 필수적으로 pysqlite를 설치해야만 한다. (참 필요로 하는 라이브러리가 참 많네...)
  • 사이트: http://trac.edgewall.org/wiki/PySqlite
  • 다운로드: http://oss.itsystementwicklung.de/trac/pysqlite/wiki#Downloads
  • 설치 파일: pysqlite-2.5.5.win32-py2.5.exe
pysqlite 설치 파일을 클릭하면 pysqlite 설치 화면이 나타난다. '다음' 버튼을 눌러 이동한다.



mod python을 설치했을 때 처럼 python경로를 설정해주는 창이 뜰것인데 기본으로 설정된 사항을 묵인하고 '다음' 버튼을 누른다. 그다음도 몇몇 창이 뜰것인데 모두 묵인으로 '다음' 버튼을 클릭하여 설치를 진행한다.



6. setuptools 설치
setuptools는 Python언어로 만들어진 툴인데 Python으로 만들어진 프로그램들을 자동으로 다운로드 + 설치 해준다. setuptools는 Trac관련 plugins를 설치할 때 "아주" 유용함으로 필히 설치를 해두도록 하자.
  • 사이트: http://peak.telecommunity.com/DevCenter/setuptools
  • 다운로드: http://peak.telecommunity.com/dist/ez_setup.py
  • 설치 파일: ez_setup.py
다운로드 받은 파일에서부터 알수 있다 싶이 이 프로그램은 python으로 만들어진 프로그램이라 확장자가 py로 되어있다. 이렇게 py확장자를 가진 파일들은 python 을 이용하여 실행해야 한다. Python설치 디렉토리의 bin폴더에 가서
python.exe ez_setup.py
하면 되겠다. 만약 python 기본디렉토리를 path에 잡아 놓은 상태라면 구지 python설치경로/bin까지 가지 않아도 되겠다. 아래 그림에서처럼 메시지가 뜨면 설치가 성공한것이다.



7. Trac 설치
지금까지 설치한것은 이번에 설치하게 될 Trac을 설치하기 위하 초기작업이라고 보면 되겠다.(Trac이라는 녀석 참 까탈스럽기도 하다.ㅡㅡ;) 본격적으로 Trac 설치를 해보자~
  • 사이트: http://trac.edgewall.org
  • 다운로드: http://trac.edgewall.org/wiki/TracDownload
  • 설치 파일: Trac-0.11.4.win32.exe
Trac 설치 파일을 실행하면 Trac 설치 화면이 나타난다. '다음' 버튼을 눌러 설치를 진행한다.



mod python을 설치했을 때 처럼 python경로를 설정해주는 창이 뜰것인데 기본으로 설정된 사항을 묵인하고 '다음' 버튼을 누른다. 그다음도 몇몇 창이 뜰것인데 모두 묵인으로 '다음' 버튼을 클릭하여 설치를 진행한다.



8. 새 프로젝트 생성
샘플용으로 새 프로젝트를 생성해 보자. 새로 생성할 프로젝트명을 sample로 정하고 생성을 시도하겠다. Trac에서 새로운 프로젝트를 생성하려면 PYTHON_설치디렉토리\Scripts\trac-admin.exe 프로제트_REPOSITORY initenv 명령어를 실행한다. 우선 먼저 Trac 프로젝트를 관리하는 디렉토리를 생성한다. 나의 경우는 sample이라는 이름으로 E:\Trac\sample 이라는 경로에 빈 폴더를 만들고 Trac 프로젝트를 관리하겠다. 디렉토리를 생성한 후 sample 프로젝트는 trac-admin.exe의 initenv 명령을 실행하여 생성한다. 명령 프롬프트에서 아래 명령을 실행하여 sample 프로젝트를 생성한다.
PYTHON_설치디렉토리\Scripts\trac-admin.exe E:\Tracsample initenv
위 명령어를 실행하면 다음과 같은 과정으로 sample프로젝트가 생성된다.



연결할 데이터베이스를 설정한다. 기본 설정을 사용하므로 엔터를 누른다.



사용할 버전 관리 시스템의 종류를 설정한다. 나의 경우는 SVN을 사용할 것이기 때문에 그냥 엔터를 치고 넘어간다.



버전 관리 시스템의 저장소를 설정한다. sample 프로젝트의 저장소는 E:\Repository\sample로 설정한다. 버전 관리 시스템의 저장소로 설정한 E:\Repository\sample 디렉토리는 자동으로 생성되지 않는다. 이 디렉토리는 SVN 저장소를 다룰 때 생성한다.



위 네가지 설정을 완료하면 Trac에서 사용할 sample 프로젝트가 생성된다. sample 프로젝트가 정상적으로 생성되면 E:\Trac\sample 디렉토리 아래에 여러가지 Trac에 관련된 디렉토리와 파일들이 생성되겠다.

Apache에 VirtualHost 추가하기
sample 프로젝트를 생성한 다음에 설정할 부분은 Apache에서 sample 프로젝트를 인식할 수 있게 VirtualHost를 추가하는 것이다. Trac으로 생성하는 모든 프로젝트를 관리하려면 VirtualHost를 추가해야 한다. Apache 서버의 httpd-vhosts.conf 파일에 다음 설정을 추가한다.

<VirtualHost *:80>
    <Location /trac>
        SetHandler mod_python
        PythonHandler trac.web.modpython_frontend
        PythonOption TracEnvParentDir E:\Trac
        PythonOption TracUriRoot /trac
    </Location>
    <LocationMatch "/trac/[^/]+/login">
        AuthType Basic
        AuthName "Trac"
        AuthUserFile E:\Repository\htpasswd
        Require valid-user
    </LocationMatch>
</VirtualHost>

위 Apache 설정을 보면 첫 번째 <Location /trac> 엘리먼트는 /trac URL로 접근할 때 앞에서 설치한 mod_python 모듈을 사용했으며, E:\Trac 디렉토리를 기본 디렉토리로 설정하였다.

두번째 <LocationMatch "/trac/[^/]+/login"> 엘리먼트는 /trac/sample/login 과 같은 URL에 대한 요청은 인증이 필요하다고 설정한다. E:\Repository\htpasswd 파일은 인증할 때 사용할 파일로 설정하였다. htpasswd를 생성하는 방법은 아래에 언급할것이니 내심하게 쭉 내려보기 바란다.

그리고 httpd.conf파일중에서 httpd-vhosts.conf 파일 로드 해주는 라인중 앞 주석문을 제거한다. 제거후 형태는 아래와 같이 되겠다.

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Apache 설정을 완료한 다음 Apache Service를 다시 시작한다.

참고문헌: 자바 프로젝트 필수 유틸리티

2009년 4월 27일 월요일

DoS 공격 방어 모듈 mod_evasive 설치기

1. mod_evasive이란 무엇인가?

이것은 HTTP Dos 또는 DDos 스택 또는 저돌적인 공격으로부터 아파치를 보호하는데 있다. 또한 ipchains, 방화벽, 라우터등으로 쉽게 구성될 수 있도록 디자인 되었다.
탐지는 주소, URI의 IP 내부 동적 해쉬테이블을 생성함으로 수행되고, 각 아이피별로 거부된다.
- 초당 몇번 이상의 같은 페이지를 요청하는 경우
- 초당 같은 자식노드를 동시에 50번 이상 생성하는 경우
- 일시적으로 블러킹되는 동안 어떠한 요청을 생성하는 경우

2.  mod_evasive의 설치

# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

# 압축해제
# tar xvzf mod_evasive_1.10.1.tar.gz

# 디렉토리 이동
# cd mod_evasive

# 모듈 추가
# /usr/local/apache2/bin/apxs -iac mod_evasive.c -> Apache.1.x
# /usr/local/apache2/bin/apxs -iac mod_evasive20.c -> Apache.2.x

# 환경설정
# vi /usr/local/apache2/conf/httpd.conf

# 아파치 1.X와 2.X에서의 모듈명칭이 약간 차이가 있으므로 주의할 것!
# 아래에 해당하는 내용이 존재하는지 확인 한다. 없으면 추가.

LoadModule evasive_module    modules/mod_evasive.so -> Apache.1.x
LoadModule evasive20_module    modules/mod_evasive20.so -> Apache.2.x

<IfModule mod_evasive.c>
        DOSHashTableSize        3097
        DOSPageCount              3
        DOSSiteCount                50
        DOSPageInterval            1
        DOSSiteInterval              1
        DOSBlockingPeriod        30

        DOSEmailNotify            webmaster@yoursite.com
        DOSLogDir                   "/usr/local/apache2/logs/mod_evasive.log"
        DOSSystemCommand      "su - someuser -c '/sbin/... %s ...'"
</IfModule>

# 환경설정 검사
# apachectl configtest
# 재시작
# apachectl -k restart

3. 각 지시자에 대한 설명

- DOSHashTableSize
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다, 접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간. 이때 클라이언트는 403 (Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.

- DOSLogDir
로그 파일 경로

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.

- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist    127.0.0.1
DOSWhitelist    127.0.0.* - (와일드카드는(*) 필요하다면 최대 8진수(xxx.*.*.*)까지 사용할 수 있다.)


4. 테스트하기

# perl test.pl <- 다운받은 파일 안에 포함되어 있다.
   HTTP/1.1 200 OK
   HTTP/1.1 403 Forbidden
   HTTP/1.1 200 OK
   HTTP/1.1 403 Forbidden
   HTTP/1.1 403 Forbidden

5. 같이쓰면 좋은 iptables

흔히 DOS 공격방어라고 하면 mod_evasive 모듈을 사용한다고 알려져 있다.
특히, 과도한 DOS 공격이 들어올 경우 아파치가 부하를 견디지 못하고 죽어버리는 경우도 생긴다. 따라서 과다 접속 차단에 대해서는 iptables를 이용하시는것이 근본적이고 효과적 이다.
iptables를 보게되면 connlimit 기능이 있는데 이 설정을 잘 이용하시면
매우 효과적이고 안정적인 서버 운영이 가능하다.

# 1초에 10번 이상의 HTTP 접근을 할경우 (DOS공격) 접근을 차단한다. 단 여기서 지정하는 아이피 Range는 C클래스에만 해당하다. 여기서 mask 24를 이용하여 이를 지정했다.
# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

# 매 아이피당 최대 5개의 동시 연결 갯수만 허용. 80포트에 한해서...
# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

# 포트스캔을 차단한다.
# psd match를 사용하기 위하여 커널에 p-o-m패치를 적용시켜 놓아야 한다.
# 상세한 사항은 여기를 클릭하여 확인하기 바란다.
# iptables -A INPUT -m psd -j DROP

# 만약서버가 해킹당해 DOS공격지로 사용될때 적용시킴.
# DNS 쿼리이외에 UDP 패킷이 나가는 것을 방지
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP

이렇게 설정한 iptable룰들을 iptables를 재 시작하면 먹히지 않습니다. 삭제 되는거죠.
이를 유지시키려면 iptables 설정에 저장 시켜야 합니다.
/etc/init.d/iptables save를 통하여 저장 하면 되겠죠?!

공개 웹방화벽 ModSecurity 모듈 설치기

인젠 웹에도 방화벽을 씌울 시기가 왔다~

리눅스에 기본으로 깔린 iptables을 제외하고도 여러가지 방화벽이 많다.
이번엔 Apache 보안 모듈인 웹방화벽 ModSecurity를 설치하여 보겠다.
ModSecurity는 Ivan Ristic이 개발한 Apache 웹서버용 공개 웹방화벽으로 PHP Injection 공격 등 Apache 웹서버의 주요 공격 차단 가능하다.

1. ModSecurity 다운로드 및 설치
ModSecurity공식 웹사이트에 접속하여 최신 버젼으로 다운로드 받는다.
다운로드 받을 파일을 모두 두개인데 하나는 ModSecurity 소스파일이고 다른 하나는 Core Rule파일이다.

다운로드: http://www.modsecurity.org/download/index.html

설치과정은 무난하다.

단지 설치하기 전에 mod_unique_id 모듈이 Apache에 설정이 되어져야 한다.
또한 libxml2 라이브러리가 설치된 상태여야 한다.

# tar xvfz modsecurity-apache_2.5.9.tar.gz -C /usr/local/src
# cd /usr/local/src/modsecurity-apache_2.5.9/apache2
# vi modsecurity_config.sh
./configure \
--with-apxs=/usr/local/apache2/bin/apxs \
--with-httpd-src=/usr/local/src/httpd-2.2.11 \
--with-libxml=/usr

# chmod 700 ./modsecurity_config.sh
# ./modsecurity_config.sh
# make
# make install

이러게 되면 /usr/local/apache2/modules/mod_security2.so 모듈 파일이 생긴다.

httpd.conf 파일을 vi로 열고

LoadModule security2_module modules/mod_security2.so

Apache를 재시동 한다.

2. ModSecurity 설정
ModSecurity 기본 설정 Core Rule을 받고 압축을 풀어서 Apache2가 설치된 경로의 conf/modsecurity에 넣는다.

tar xvfz modsecurity-core-rules_2.5-1.6.1.tar.gz -C /usr/local/apache2/conf/modsecurity

httpd.conf파일을 열고 Include conf/modsecurity/*.conf 을 추가한다.
최소 Rule을 적용할려면 modsecurity.minimal.conf파일을 복사하여 conf/modsecurity에 넣고 저 파일을 인클루드 하면 되겠다.
각 Sample Rules에 대한 설정 파일들의 용도는 다음과 같다.

modsecurity_crs_20_protocol_violations.conf
정상적인 http protocol 위반접속요구(request header)
modsecurity_crs_21_protocol_anomalies.conf
정상적인 http protocol 위반접속요구(request header)
modsecurity_crs_30_http_policy.conf

http 정책에 대한 룰
modsecurity_crs_35_bad_robots.conf
User-Agent에 대한 룰 : 고급화된 공격차단보다는 스캐너등 차단목적
modsecurity_crs_40_generic_attacks.conf
SQL injection / PHP injection / Command access 에 대한 룰
modsecurity_crs_45_trojans.conf
trojan이나 백도어에 대한 접근 룰
modsecurity_crs_50_outbound.conf
에러등 특정 결과값을 통해 정보를 취득하려는 시도 차단

구체적인 Rule설정을 볼려면 첨부한 문서를 참조하면 되겠다.

2009년 4월 24일 금요일

Webalizer 설치기

Apache 로그 분석 툴 - Webalizer

새로 리눅스 서버를 설치하게 되었다. 일단은 APM 셋업이 끝났고, iptables을 좀 끄적대다가 서버를 모니터링할 수 있는 툴이 있었으면 참 좋겠다는 생각이 머리속에서 스치게 되었다.

당연 생각에서만 그치면 안되겠다 싶어서 직접 현존하는 서버 모니터링툴을 찾아보게 되었다. 트랙픽 모니터링툴로는 SNMP기반 MRTG와 RRD가 있었다. 허나 가장 마음에 드는 툴은 그래도 Apache서버 전문 모니터링 툴인 Webalizer였다.

일단은 webalizer 공식 배포사이트에 접속하여 최신 버젼 webalizer을 받아온다. 사실 yum으로 직접 rpm버젼을 설치할 수 도 있었으나 좀 더 고급(?)스러운 설정을 적용할 수 있지 않을가 하는 기대감으로 소스버젼을 찾아서 설치하기로 결정했다.

webalizer 배포 공식 사이트 주소
http://www.mrunix.net/webalizer/

1. Webalizer 설치

# cd /usr/local/src/

소스를 풀고 컴파일 후 설치 한다.

# tar xvfz webalizer-xxx-src.tgz -C /usr/local/src
# cd ./webalizer-xxx
# vi webalizer_config.sh


configure 옵션들을 파일에 쓴 후 실행시키는 방식으로 진행한다.
나중에 다시 configure 할 때 일일이 옵션을 적지 않아도 되므로 매우 편리하다.
webalizer_config.sh 에 들어갈 내용은 다음과 같다.

./configure \
--prefix=/usr/local/webalizer \
--with-language=korean


저장하고 vi에서 빠져나간다.

# chmod 700 webalizer_config.sh
# ./webalizer_config.sh
# make
# make install


2. Webalizer 설정
환경 설정 파일 수정
환경설정 sample 파일이 /usr/local/webalizer/etc/webalizer.conf.sample에 위치한다.
이 파일을 복사하여 webalizer.conf라는 파일을 만든다.

# cp /usr/local/webalizer/etc/webalizer.conf.sample /usr/local/webalizer/etc/webalizer.conf

/usr/local/webalizer/etc/webalizer.conf 파일의 다음 부분의 주석을 해제 후 수정한다.

LogFile   /아파치가 설치된 경로/logs/access_log
OutputDir  /아파치 기본 웹 디렉토리 경로/webalizer
HostName  호스트명

3. Webalizer 실행
설치 과정을 마치고 직접 Webalizer를 실행한다.
Webalizer 실행 파일는 /usr/local/webalizer/bin 폴더에 위치한다.

# /usr/local/webalizer/bin/webalizer

마지막으로 주기적으로 실행하기 위하여 크론에 등록한다.

crontab –e
*/30 * * * * /usr/local/webalizer/bin/webalizer > /dev/null 2>&1

2007년 11월 29일 목요일

Windows 환경에서 Apache 2.2.x + PHP 5.2.x 설치 및 설정하기

How to install Apache 2.2.x + PHP 5.2.x ???

래년 3월에 있게될 PHP프로젝트 땜에 Windows환경에 Apache 와 PHP 설치를 시도하게 되였습니다.

예전엔 Linux 환경에서 Apache 와 PHP 설치를 많이 해보았었는데, 윈도우 환경에서 해보니까 여러모로 새롭습니다.

설치 순서는 다음과 같습니다.
  1. Apache 서버 설치
  2. PHP 설치
  3. Apache  및 PHP 연동

아파치 서버는 소스가 아닌 바이너리 설치 파일로 다운로드 받습니다.
바이너리 설치 파일을 아파치 홈페이지에서 찾았는데 소스밖에 나와있지 않네요.
아래 미러링 사이트에 가시면 바이너리 파일을 다운로드 받으실 수 있습니다.
http://ftp.kaist.ac.kr/pub/Apache/httpd/binaries/win32/
파일명이 apache_2.2.6-win32-x86-no_ssl.msi 이렇게 표기된 파일을 다운로드 받습니다.

다운로드를 받으신후 직접 실행하셔서 설치를 시도합니다.

사용자 삽입 이미지


도메인 네임은 아래 스샷에서와 같이 설정하시면 됩니다. 메일주소는 당연 본인의 메일주소로 하셔야 겠죠?

사용자 삽입 이미지

다음을클릭하면 무난히 아파치 서버를 설치하실수 있습니다.
다음 주소로 접근하여 서버가 정상적으로 설치가 되였는지를 확인합니다.
http://localhost/

다음은 PHP를 설치하겠습니다.
http://www.php.net  에 접근하여 최신 PHP ZIP파일을 다운로드 받습니다.
저는 5.2.5 버젼을 다운로드 받았습니다.

다운로드 받으신  PHP ZIP파일을 적당한 위치에 압축을 풀어줍니다.
저는 D:\Dev Server\APM 이 경로에 압축을 풀고 폴더명을 PHP 5.2.5 으로 바꿨습니다.

PHP압축을 푸는것만으로 PHP 설치는 끝나고 남은 작업이라면 Apache 와 PHP를 연동 작업뿐입니다.

PHP 5.2.5 폴더로 가시면 php.ini-dist 라는 파일이 보일겁니다. 이 파일을 한부 복사하여 명칭을 php.ini로 바꾸어 줍니다.
만약 Windows폴더 밑으로 php.ini파일 복사를 하기를 원하지 않으시면
conf/httpd.conf파일 속에 아래 라인을 추가하시면 됩니다.

PHPIniDir "D:/Dev Server/APM/PHP 5.2.5/"

다음 php.ini파일은 C:\Windows 폴더 및에 복사하시고 php5ts.dll 및libmysql.dll 두 파일을 C:\Windows/System32 에 복사하여 넣습니다.

다음 Apache 설치된 폴더속으로 들어가 보시면 conf라는 폴더가 보일건데 그 속의 httpd.conf 파일을 메모장으로 여시고

#LoadModule ssl_module modules/mod_ssl.so

이 라인 아래에

LoadModule php5_module D:/Dev Server/APM/PHP 5.2.5/php5apache2_2.dll

이 한줄을 추가합니다.
실제 PHP가 설치된 경로에 마추어 작성해셔야 합니다.

또한

AddType application/x-gzip .gz .tgz

이 라인 아래에

AddType application/x-httpd-php .php

이 라인도 추가합니다.

이상 Apache, php 설치 및 설정이 끝납니다.

2007년 3월 26일 월요일

Linux에서 Apache 2.0.59 와 Tomcat 5.0.28 연동하기

Linux에서 Apache 2.0.59 와 Tomcat 5.0.28 연동하기


Apache 2.0.59 및 Tomcat 5.0.28을 연동하기 위해서 먼저 서버에 Apache 및 Tomcat이 깔린 상태여야 한다.
Tomcat은 java기반의 web server로서 Tomcat을 설치하기 위해서는 우선 먼저 JDK가 서버에 깔려있어야 한다.

http://java.sun.com 에 가서 최신 j2sdk 1.5버젼을 다운로드 받는다.
(참고로 톰캣 5.0에는 필히 jdk 1.5 버젼대 여야만 제대로 동작한다.)

다운로드 받은 소스를 적당히 위치에 저장하고서 압축을 해제하고 필요한 환경변수만 적어주면 Java설치는 끝이난다.

Java 설치하기

사용자 삽입 이미지




배포파일 jdk-1_5_0_08-linux-i586.bin

적당한 위치로 배포파일을 옮겨서 파일을 실행시킨다
실행 전 배포파일의 퍼미션을 확인하여 실행가능한 퍼미션을 갖도록 설정을 한다.

shell> mv jdk-1_5_0_08-linux-i586.bin /usr/local/src
shell> cd /usr/local/src
shell> chmod 755 jdk-1_5_0_08-linux-i586.bin
shell> ./jdk-1_5_0_08-linux-i586.bin

사용권 계약이 화면에 출력되면 y 또는 yes를 입력하여 동의한다.
이 후 설치가 계속 진행되어 jdk1.5.0_08 폴더가 생긴다.
다음 디렉토리를 /usr/local/java에 옮긴다.

mv jdk1.5.0_08 /usr/local/java

/etc/profile을 편집하여 PATH 설정을 해준다.
profile 첫부분에 다음을 추가해준다.

shell> vi /etc/profile

JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME

변경된 설정을 시스템에 적용시킨다.

shell> source /etc/profile

임의의 위치에서 java를 실행시킨다.

shell> java

JAVA option들이 화면에 출력되면 성공적으로 설치가 이루어진 것이다.

Apache2 설치하기

사용자 삽입 이미지






기존에 존재하는 RPM 패키지를 찾아서 삭제한다.

shell> rpm -qa | grep httpd
shell> rpm -e [httpd RPM name]

현재 Apache 웹데몬이 실행되고 있다면 실행을 중지시킨다.

shell> /etc/init.d/httpd stop

http://httpd.apache.org/download.cgi 에서 Apache 2.0.59를 다운로드 받는다.
리눅스에서 설치할 Apache의 배포본은 모두 소스 형식으로 제공된다.

배포파일 httpd-2.0.59.tar.gz

적당한 위치에서 다운로드 받은 배포파일의 압축을 푼다.

shell> mv httpd-2.0.59.tar.gz /usr/local/src
shell> tar xvfz httpd-2.0.59.tar.gz

생성된 디렉토리 httpd-2.0.59로 이동한다.

shell> cd httpd-2.0.59

다음과 같은 옵션을 사용하여 configure를 진행한다.
옵션, 모듈 및 DSO에 대한 자세한 사항은 이후 추가적으로 설명할 것이다.

shell> ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so

이어서 컴파일과 인스톨을 실행한다.

shell> make
shell> make install

위의 과정으로 설치를 진행하면 Apache의 root 디렉토리는 /usr/local/apache2가 되고, 모든 관련 파일들은 이 디렉토리속에 저장되게 된다.
디렉토리에 대한 정보는 /usr/local/src/httpd-2.0.59/config.layout을 통해 확인할수 있다.

다음으로 /usr/local/apache2/conf 디렉토리의 설정파일을 변경한다.

메일주소 및 웹서버 주소를 정확히 기입한후 앞에 #부호를 제거한다.

아파치 웹서버를 구동한다.

shell> /usr/local/apache2/bin/apachectl start

아파치 웹서버를 중지시키려면 아래 명령어를 실행하면 된다.

shell> /usr/local/apache2/bin/apachectl stop

* configure 옵션 (autoconf 출력옵션)

--prefix=/usr/local/apache2
--prefix는 말그대로 apache를 지정된 폴더에 일괄로 설치하겠다는 뜻이다. 여기서는 컴파일된 아파치 파일들이 /usr/local/apache2 폴더에 설치가 되여진다.

--enable-modules=so
mod_so(so_module)를 Apache에 컴파일하여 포함시킨다.(모듈의 정적 컴파일)
기본형은 --enable-modules=[MODULE-LIST]로 공백으로 구분한 [MODULE-LIST]에 나와있는 모듈들을 컴파일하여 포함한다.

--enable-so
Apache가 실행시 특별한 옵션없이 자동으로 동적공유객체(DSO-Dynamic Shared Objects)를 읽어들일 수 있도록 하기 위한 설정옵션이다.

* 모듈

Apache는 모듈화된 설계로 이루어진 프로그램이다.
모듈은 특별한 기능을 수행하기 위한 작은 프로그램으로 이해할 수 있다.
즉, 모듈마다 각각의 역할이 다르기 때문에 핵심 구현부 또는 실행부에 추가적으로 포함시켜 원하는 기능을 선택적으로 사용할 수 있다. 
Apache의 핵심 기능을 구현하는 모듈은 core이고 core를 기반으로 모듈을 추가하여 확장된 기능을 사용할 수 있다.
모듈은 Apache 컴파일시 정적으로 포함시킬 수 있고, 또는 DSO mechanism에 의해 Apache 컴파일 이후 추가적으로 포함하여 사용할 수 있다.
DSO(Dynamic Shared Objects)를 지원하기 위해서는 컴파일시 configure 옵션으로 --enable-rule=SHARED_CORE를 추가하여 DSO 지원 형식으로 Apache를 컴파일하여야 하며, mod_so 모듈을 컴파일시 포함시켜야 한다.
mod_so 모듈은 core를 제외하고 DSO가 될 수 없는 유일한 모듈로서 Apache 핵심에 정적으로 컴파일해야 하며, DSO로 컴파일된 모듈을 Apache에서 읽어들이기 위한 기능을 제공한다.
따라서 configure 진행시 일반적으로 mod_so를 포함하도록 한다.

* 동적공유객체(DSO-Dynamic Shared Objects)

Apache가 동적으로 load할 수 있는 객체이다.
core와 mod_so를 제외한 다른 모든 아파치 모듈 소스를 DSO 형식의 모듈로 컴파일하여 Apache에서 load하여 사용할 수 있다.
DSO로 사용할 아파치 모듈을 쉽게 만들기 위해서 apxs(Apache Extension Tool)라는 지원프로그램이 있다.
이 프로그램으로 아파치 배포본 소스 트리 없이, DSO 지원을 위한 플랫폼 특유의 컴파일러 옵션과 링커 옵션을 고려하지 않고 모듈 소스를 DSO 모듈로 쉽게 컴파일할 수 있다.
PHP와 Tomcat 등 외부 프로그램에서 제공하는 DSO 모듈은 프로그램 configure시 apxs를 사용한 옵션을 통해 프로그램과 함께 컴파일되어 생성된다.

Tomcat 5 설치

사용자 삽입 이미지







위에서 JDK설치가 끝났으면 사실 Tomcat 5 설치는 쉬워진 셈이다.
단순히 압축만 풀면 Tomcat 5의 설치가 끝난다.

* Java Servlet Container

JVM 상에서 WEB 서비스를 위한 Java Servlet API를 구현하여 서비스 해주는 Java Program으로, Servlet Container는 Client의 http 요청을 웹서버를 통해 전달받아서 Application Servlet에 전달하고, Servlet의 http 응답 메시지를 웹서버에게 전달해서 Client로 돌려주는 역할을 한다.

* Servlet Container의 종류

1) Sun Microsystems 제공 Servlet Container
JSDK(Java Servlet Development Kit)
JSWDK(JavaServer Web Development Kit)
J2EE(Java2 SDK, Enterprise Edition)
Java Web Server(iPlanet Web Server)

2) Apache 제공 Servlet Container
Apache JServ, Tomcat

3) 기타 Servlet Container
JRun/JRun Pro, Resin, WebLogic, Web Sphere, IAS

* Tomcat

Tomcat은 Apache Software Foundation의 Jakarta 프로젝트의 일환으로 개발중인 소프트웨어이다.
Tomcat은 Java Servlet과 Java Server Page를 사용할 수 있도록 하는 Servlet Container이며 독립적으로 웹서버의 기능을 수행한다. 그러나 일반 html 문서도 Servlet Container를 통해 번역되므로 수행속도가 느리고 웹서버로서의 기능에 제한이 있으므로 보통 다양한 모듈과 막강한 기능을 가지고 있는 Apache 웹서버와 연동하여 사용한다.

배포본은 binary와 source 형식으로 제공된다. 여기서는 바이너리 배포본의 설치만 설명하련다. The Apache Jakarta Project 홈페이지의 Downloads 부분에 있는 CVS repositories는 현재 개발중인 소스들을 확인하고 다운로드 받을 수 있는 페이지이다.

http://tomcat.apache.org/download-55.cgi에서 Tomcat 5.0.28의 tarball 형식의 배포본을 다운로드 받는다.

배포파일 jakarta-tomcat-5.0.28.tar.gz

적당한 위치(설치하고자 하는 경로)에서 압축을 풀어준다.
바이너리 배포본은 압축을 풀어줌으로 기본적인 설치가 완료된 것이다.

shell> cp jakarta-tomcat-5.0.28.tar.gz /usr/local/src
shell> cd /usr/local/src
shell> tar xvfz jakarta-tomcat-5.0.28.tar.gz
shell> mv /usr/local/src/Jakarta-tomcat-5.0.28 /usr/local/tomcat

Jakarta-tomcat-5.0.28 디렉토리가 생성되고 압축이 풀린다.
실행파일이 들어있는 디렉토리로 이동해서 Tomcat을 실행시켜본다.

shell> cd /usr/local/tomcat/bin
shell> ./startup.sh
또는
shell> ./catalina.sh start

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JAVA_HOME:       /usr/local/java

위의 메시지가 나오면 Tomcat이 정상적으로 작동하는 것이다.
클라이언트에서 웹브라우저를 통해 다음의 주소로 접속한다.

http://localhost:8080 또는 http://설치한서버의주소:8080

정상적으로 Tomcat이 작동하고 있다면 브라우저에 Tomcat 관련 문서가 나타날 것이다.

만일, 정상적으로 작동하지 않는다면 J2SE의 설치가 제대로 이루어지지 않았거나 PATH 설정이 올바르게 이루어지지 않아서이다.
/etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분을 확인해 보자.

마지막으로 PATH를 설정해준다.
PATH 설정은 /etc/profile을 편집하여 이루어진다.
/etc/profile을 에디터로 열어서 J2SE 설치 시 PATH 설정한 부분에 다음을 추가한다.

shell> vi /etc/profile

JAVA_HOME=/usr/local/java
CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME

변경된 설정을 시스템에 적용시킨다.

shell> source /etc/profile

PATH를 설정해주었으므로 임의의 위치에서 Tomcat을 실행시킬 수 있다.

JK2를 이용한 Apache2 웹서버와 Tomcat5의 연동

The Apache Jakarta Project 사이트에서 JK2 connector를 다운로드 받는다.
JK2의 binary 배포본은 Solaris와 WIN32용 만이 배포되고 있으므로 소스 형태의 배포본을 다운로드 받아야 한다.
http://jakarta.apache.org/site/sourceindex.cgi 에서 JK 2.0.4 Source Release tar.gz를 다운로드 받는다.
배포파일 jakarta-tomcat-connectors-jk2-src-current.tar.gz

JK2 connector 소스를 컴파일 하면 얻을 수 있는 것이 mod_jk2.so 모듈이다.
Apache 웹서버와 Tomcat을 연동할 mod_jk2.so 모듈을 얻는 것이 컴파일의 목적이다.

적당한 위치에서 압축을 풀어준다.
소스들을 컴파일하고 필요한 파일들을 이동시키면 더 이상 사용하지 않기 때문에 /usr/local/src에서 압축을 풀어주겠다.

shell> mv jakarta-tomcat-connectors-jk2-src-current.tar.gz /usr/local/src
shell> cd /usr/local/src
shell> tar xvfz jakarta-tomcat-connectors-jk2-src-current.tar.gz

압축이 풀리면 해당 디렉토리로 이동한다.

shell> cd jakarta-tomcat-connectors-jk2-2.0.4-src/

빌드설정 쉘 스크립트를 실행시킨다.

shell> cd jk/native2
shell> ./buildconf.sh


아래와 같이 .configure하고 make로 컴파일을 진행한다.

shell> ./configure --with-apxs2=/usr/local/apache2/bin/apxs
shell> make

configure 옵션(autoconf 출력옵션) --with-apxs2[=FILE]
Apache 2.0 에서 공유할 DSO 모듈을 build하기 위해 사용한다.
FILE은 Apache apxs tool이 있는 경로를 나타낸다.

shell> cd ../build/jk2/apache2
shell> /usr/local/apache2/bin/apxs -n jk2 -i mod_jk2.so

1) Apache의 환경파일 수정한다.

shell> vi /usr/local/apache2/conf/httpd.conf

233번째 줄정도에 추가한다. 이것은 외부에 있는 jk2모듈을 끌어들임으로서 apache와 tomcat을 정확인 연동하기 위해서 이다.

LoadModule jk2_module modules/mod_jk2.so
추가해줌(396줄) :Index.jsp
DirectoryIndex index.html index.html.var index.jsp

2) workers2.properties 생성한다.

shell> vi  /usr/local/apache2/conf/workers2.properties

아래 부분들을 그대로 복사하여 workers2.properties파일에 넣고 저장한다.

[shm]
file=/usr/local/apache2/logs/jk2.shm
size=1048576

[channel.socket:localhost:8009]
port=8009
host=127.0.0.1

# Defile The Worker
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009

# Anounce Status Worker
# [status:status]

# Announce Uri mapping
[uri:/examples/*]
worker=ajp13:localhost:8009

# Uri mapping
[uri:/*]
worker=ajp13:localhost:8009

재시작할때는 먼저 톰캣을 시동하고 다시 아파치를 시동한다.
자동시작하려면 /etc/rc.d/rc.local속에 아래 스크립트를 추가해야 한다.

shell> export JAVA_HOME=/usr/local/java
shell> /usr/local/tomcat/bin/catalina.sh start
shell> /usr/local/apache2/bin/apachectl start

여기서 주의할점은 톰캣이 시동시 JAVA_HOME이 꼭 PATH에 잡혀있어야함으로 필히 위에서와 같이 설정해주어야 한다.^^