Linux WEB

보안 서버 구축 - TOMCAT

2008.07.08 22:23

호스트웨이 조회 수:28585

본 문서는 Linux 에서 JAVA 를 사용할 수 있도록 Apache, Tomcat 을 연동하고 SSL Tomcat 에 적용하기 위한 목적으로 작성되었습니다.

 

 

 

테스트 시스템 정보   

Cent OS 5   kernel 2.6.24.2   httpd-2.2.2   php-5.1.6   mysql-5.0.22  

jakarta-tomcat-5.0.28   jdk-1_5_0_15-linux-i586

 

 

 

◈ 보안 서버 구축

 

 

1. MYSQL                                                      

 

Mysql RPM pakage 가 설치되어 있는 경우 해당 패키지를 삭제해야 하며,  mysql 계정은 미리 생성해 놓아야 한다.

 

1-1 configuration & make & make install

[root@hostway mysql-5.0.22]# ./configure --prefix=/usr/local/mysql --with-charset=euckr

[root@hostway mysql-5.0.22]# make

[root@hostway mysql-5.0.22]# make install

 

1-2 mysql 데이터 디렉토리 생성 & 권한 설정

[root@hostway mysql-5.0.22]# /usr/local/mysql/bin/mysql_install_db

[root@hostway mysql]# chown -R mysql.mysql var/

 

1-3 데이터베이스 시작

[root@hostway mysql-5.0.22]# /usr/local/mysql/bin/mysqld_safe &

 

 

 

2. APACHE                                                

   

2-1 아파치 소스 파일 수정

[root@hostway httpd-2.2.2]# pwd

/usr/local/src/httpd-2.2.2

[root@hostway httpd-2.2.2]# vi server/mpm/prefork/prefork.c

#define DEFAULT_SERVER_LIMIT 256 --à 256 에서 2048 로 수정

 

[root@hostway httpd-2.2.2]# vi server/mpm/worker/worker.c

#define DEFAULT_SERVER_LIMIT 16 --à 16 에서 256 으로 수정

 

 

2-2 configuration & make & make install

 

 

 

*참고 : linux 버전에 따라 openssl 관련 에러가 발생할 수 있으며, mod_ssl 2.1.6 OpenSSL 0.8.1b 0.9.1c 버전 사이에서만 동작한다.

 

 

 

 

 

 

2-3 apache 파라미터 수정

[root@hostway ~]# vi /usr/local/apache2/conf/extra/httpd-mpm.conf

<IfModule mpm_prefork_module>

    StartServers            5

    MinSpareServers        5

    MaxSpareServers      10

    MaxClients           150  --à 150 에서 1024 or 2048 로 수정

    MaxRequestsPerChild   0

</IfModule>

 

2-4 apache start

[root@hostway httpd-2.2.2]# /usr/local/apache2/bin/apachectl start

 

 

3. PHP & Zend Optimizer                                                                                                      

 

3-1 configuration & make & make install

[root@hostway php-5.1.6]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --enable-sysvshm=yes --enable-sysvsem=yes --enable-debug=no --enable-track-vars=yes --enable-url-fopen-wrapper=yes --with-ttf --with-png-dir=/usr --with-zlib-dir --with-jpeg-dir=/usr --with-gdbm=/usr --enable-ftp --with-tiff-dir=/usr --enable-memory-limit --enable-mbstring --with-expat-dir=/usr --enable-sockets --enable-wddx --with-freetype-dir=/usr --enable-bcmath --enable-mbstr-enc-trans --enable-mbregex --enable-exif --with-gd --enable-gd-native-ttf --enable-gd-imgstrttf --enable-calendar --with-openssl=/usr

[root@hostway php-5.1.6]# make && make install

 

3-2 php.ini 복사

[root@hostway php-5.1.6]# cp -a php.ini-recommended /usr/local/php/lib/php.ini

 

 

 

 

 

3-3 httpd.conf 수정

[root@hostway ~]# vi /usr/local/apache2/conf/httpd.conf

AddType application/x-httpd-php .php .htm .html

AddType application/s-httpd-php-source .phps

DirectoryIndex index.html index.htm index.php index.jsp

 

3-4 Zend 설치

[root@hostway src]# cd ZendOptimizer-2.6.2-linux-glibc21-i386

[root@hostway ZendOptimizer-2.6.2-linux-glibc21-i386]# sh install.sh

 

 

*참고 : phpinfo 함수를 실행하여 PHP 페이지가 정상적으로 로딩되는지 확인한 후 다음 작업을 진행한다.


 

4. JAVA                                                                                                                           

 

4-1 jdk-1_5_0_15-linux-i586.bin 다운로드 후 실행하고 라이센스 사용에 동의한다.

[root@hostway src]# sh jdk-1_5_0_15-linux-i586.bin

 

4-2 jdk1.5.0_15 디렉토리가 생성되면 java 로 디렉토리 이름과 위치를 변경한다.

[root@hostway src]# mv jdk1.5.0_15 /usr/local/java

 

 

5. TOMCAT                                                              

 

 

5-1 소스의 압축을 풀고 디렉토리 이름을 변경한다.

[root@hostway src]# tar zxvf jakarta-tomcat-5.0.30.tar.gz

[root@hostway src]# mv jakarta-tomcat-5.0.30 /usr/local/tomcat

 

 

5-2 vi /etc/profile 에 자바 환경변수 추가 적용

[root@hostway src]# 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

[root@hostway src]# source /etc/profile

 

 

5-3 tomcat start & 포트 확인

[root@hostway src]# cd /usr/local/tomcat/bin/

[root@hostway bin]# sh startup.sh

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

 

[root@hostway bin]# netstat -atn |grep 8080

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN

  

 

5-4 8080 포트에 접속하여 tomcat 기본 페이지가 로딩되는지 확인

6. Tomcat-connector                                                                                                 

 

6-1 Tomcat의 경우 기본적으로 8080포트를 사용한다. 이것을 80포트와 연동 시키기 위해서 tomcat-connector 를 설치 한다.

 

[root@hostway src]# tar zxvf tomcat-connectors-1.2.26-src.tar.gz

[root@hostway src]# cd tomcat-connectors-1.2.26-src/native

[root@localhost native]# sh buildconf.sh (not required unless you are a developer)

[root@hostway native]# ./configure --with-apxs=/usr/local/apache2/bin/apxs

[root@hostway native]# make && make install

 

 

6-2 mod_jk.so 모듈이 생성되었는지 확인

[root@hostway apache2]# ls -al /usr/local/apache2/modules/mod_jk.so

-rwxr-xr-x 1 root  root  736022 Mar 14 11:01/usr/local/apache2/modules/mod_jk.so

 

 

6-3 아파치 설정 파일에 모듈 추가

LoadModule jk_module        modules/mod_jk.so

 

 

6-4 httpd.conf 수정

DocumentRoot "/usr/local/tomcat/webapps/ROOT"

<Directory "/usr/local/tomcat/webapps/ROOT">

 

6-5 httpd.conf 에 톰캣 설정 파일 경로 지정

JkWorkersFile /usr/local/tomcat/conf/workers.properties

JkLogFile /usr/local/tomcat/logs/mod_jk.log

JkLogLevel info

JkMount /*.jsp ajp13

JkMount /webapps/* ajp13

JkMount /ROOT/* ajp13

 

 

6-6 workers.properties 을 생성하고 다음 내용을 입력한다.

*참고 : 5.5 버전은 workers.properties 파일이 존재하며 톰캣, 자바 경로만 수정하면 됨

[root@hostway conf]# cd /usr/local/tomcat/conf/

[root@hostway conf]# vi workers.properties

# Start setup file

#

workers.tomcat_home=/usr/local/tomcat

workers.java_home=/usr/local/java

ps=/

worker.list=ajp12, ajp13

 

# Definition for Ajp13 worker

#

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp13

#

# End setup file

 

 

 

 

 

6-7 server.xml 편집

[root@hostway htdocs]# vi /usr/local/tomcat/conf/server.xml

<Host name="localhost" appBase="webapps"

       unpackWARs="true" autoDeploy="true"

       xmlValidation="false" xmlNamespaceAware="false">

위 부분을 찾아서 아래 내용 추가

      <Context docBase="/usr/local/tomcat/webapps/ROOT" path=""/>

 

6-8 /usr/local/tomcat/webapps/ROOT aaa.jsp 테스트 파일 생성

[root@hostway htdocs]# vi /usr/local/tomcat/webapps/ROOT/aaa.jsp

<%

out.println("Hello, JSP");

%>

 

80 번 포트로 웹페이지에 접속하여 JSP 파일을 잘 처리하는지 확인한다.

 

 

7. JDBC                                                            

 

 

7-1 압축을 풀고 디렉토리 변경

[root@hostway src]# tar zxvf mysql-connector-java-5.1.6.tar.gz

[root@hostway src]# mv mysql-connector-java-5.1.6 /usr/local/mysql-jdbc

 

 

7-2 jdbc 환경 설정

[root@hostway src]# vi /etc/profile

export CLASSPATH=$CLASSPATH:/usr/local/mysql-jdbc/mysql-connector-java-5.1.6-bin.jar

[root@hostway src]# sourece /etc/profile

 

 

 

 

 

 

 

 

7-3 자바 코드로 드라이버 로딩 테스트

[root@hostway root]# vi d.java

import java.sql.*;

 

public class d{

        public static void main(String [] args){

 

                String driver = "org.gjt.mm.mysql.Driver";

                String user = "root";

                String pass = "";

                String dbURL = "jdbc:mysql://localhost/mysql";

 

                Connection conn = null;

 

                try {

                        Class.forName(driver);

                        conn = DriverManager.getConnection(dbURL, user, pass);

 

                        System.out.println("Driver found! Connection Good!");

                }catch(ClassNotFoundException cne){

 

                        System.out.println("jdbc driver not founded!");

                }catch(SQLException se){

 

                        System.out.println("sql error: "+se);

 

                }

 

        }

}

 

7-4 컴파일

[root@hostway ~]# javac d.java

 

7-5 connection test

[root@hostway root]# java d

Driver found! Connection Good!

 

 

 

8. SSL                                                                   

 

아파치와 톰캣은 서로 다른 인증서를 사용한다. 인증서 발급 신청서에 아파치에 적용할 것인지 톰캣에 적용할 것인지를 명시해야 한다.

 

 

8-1 인증키 생성

[root@hostway conf]# keytool -genkey -alias tomcat -keyalg RSA -keystore  kaka.key

 

 

8-2 kaka.key 를 이용하여 CSR 코드 생성

[root@hostway conf]# keytool -certreq -keyalg RSA -alias tomcat -file kaka.csr -keystore /usr/local/tomcat/conf/kaka.key

 

 

8-3 체인 인증서 를 keystore에 저장

keytool -import -alias root -keystore /usr/local/tomcat/conf/kaka.key -trustcacerts -file /usr/local/tomcat/conf/UTNAddTrustServerCA.crt

 

 

8-4 실제 웹 서버 인증서를 keystore에 저장

keytool -import -alias tomcat -keystore /usr/local/tomcat/conf/kaka.key -trustcacerts -file /usr/local/tomcat/conf/kaka.crt

 

 

 

  

8-5 server.xml configuration

[root@hostway ~]# vi /usr/local/tomcat/conf/server.xml

<Connector port="443"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" disableUploadTimeout="true"

               acceptCount="100" debug="0" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

               keystoreFile="/usr/local/tomcat/conf/kaka.key"

               keystorePass="12345"/>

 

port 443 으로 변경하고 keystore 의 경로를 적는다.

keystorePass csr 생성 시 입력했던 암호를 넣어준다.

 

 

8-6 tomcat stop & start & apache restart

[root@hostway ~]# shutdown.sh

[root@hostway ~]# startup.sh

[root@hostway ~]# /usr/local/apache2/bin/apachectl restart

 

 

8-7 인증서 확인

 

인터넷 익스플로러 7에서는 상단에 자물쇠 마크가 있다. 자물쇠 마크가 올바르게 표시되면 암호화 통신이 되고 있음을

 의미한다. 이것을 클릭하면 인증서 정보를 볼 수 있다.