Linux WEB

apache2.x - 보안서버 구축하기

2008.05.15 00:44

sylee 조회 수:20620

보안 서버(SSL) 구축하기- apache 2.2.4

아파치 2.x의 경우는 1.3과는 달리 mod_ssl을 별도로 추가해서 설치할 필요가 없다.
apache2.x 버전 자체에 모듈이 포함되어 있기 때문에 apache 설치시에 --enable-ssl 옵션만 추가해서 사용하면 된다.

mysql, gd, imap등의 패키지는 이미 깔려 있는 상태이며, 모든 패키지는 /usr/local/src/ 디렉토리 안에 다운로드 받은 상태로 설치를 시작한다.


1. 소스를 다운 받은 디렉토리로 이동

[root@hostway.co.kr root]# cd /usr/local/src


2. 압축 풀기

[root@hostway.co.kr src]# tar xvzf httpd-2.2.4.tar.gz
[root@hostway.co.kr src]# tar xvzfp php-5.2.3.tar.tar
[root@hostway.co.kr src]# tar xvzf ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz


3. apache 설치

- apache를 설치하기전에, source 디렉토리내의 server/mpm/prefork/prefork.c 파일에서 #define DEFAULT_SERVER_LIMIT 부분을 1024로 수정 한다.  디폴트값 256으로 컴파일 하게 되면, 아파치 데몬이 최대 256개 까지 밖에 뜰수 없게 된다, 이런 경우는 서버의 접속량이 많을경우 서버의 자원이 남아도 더 이상의 데몬을 띄우지 못해서 서버가 느려지게 된다.

[root@hostway.co.kr src]# cd httpd-2.2.4
[root@hostway.co.kr httpd-2.2.4]# ./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared --enable-rewrite --enable-ssl
[root@hostway.co.kr httpd-2.2.4]# make
[root@hostway.co.kr httpd-2.2.4]# make install


4. PHP 설치 (DB,imap,gd,apache)

- 아래의 옵션을 모두 적용하여 php를 설치 할 경우는 몇몇 패키지가 설치되어 있지 않아 에러가 발생하게 된다. php-5.2.3버전의 경우는 libxml2, libxml2-devel 패키지의 버전문제로 설치가 되지 않기 때문에 패키지 버전을 업그레이드 한다.(http://rpmfind.net 에서 OS에 맞는 최신 패키지를 찾아서 설치한다)
그리고, freetype, libjpeg, libpng등의 라이브러리와 관련된 에러메지시가 발견되면 freetype-devel, libjpeg-devel, libpng-devel 패키지를 추가로 설치하고 php설치를 진행한다.

[root@hostway.co.kr httpd-2.2.4]# cd /usr/local/src/php-5.2.3
[root@hostway.co.kr php-5.2.3]# ./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.co.kr php-5.2.3]# make
[root@hostway.co.kr php-5.2.3]# make install
[root@hostway.co.kr php-5.2.3]# cp php.ini-dist /usr/local/php/lib/php.ini


5. ZendOptimizer 설치

[root@hostway.co.kr php-5.2.3]# cd /usr/local/src/ZendOptimizer-2.6.2-linux-glibc21-i386
[root@hostway.co.kr ZendOptimizer-2.6.2-linux-glibc21-i386]# sh install.sh

- install.sh 파일을 실행한 후 apache와 php관련된 정보를 입력한 후 설치를 완료한다.


6. httpd.conf 파일 수정후 apache 리스타트

- httpd.conf 파일에 php가 인식되도록 아래 구문을 추가한다.

   #################################################
    AddType application/x-httpd-php .php .html .htm
    AddType application/x-httpd-php-source .phps
   #################################################

- httpd.conf 수정후 apache 데몬은 재실행한다. ssl 서버로 시작하기 위해서 startssl 명령으로 시작.

[root@hostway.co.kr ZendOptimizer-2.6.2-linux-glibc21-i386]# cd /usr/local/apache2/conf
[root@hostway.co.kr conf]# /usr/local/apache/bin/apachectl stop
[root@hostway.co.kr conf]# /usr/local/apache/bin/apachectl startssl


7. key 파일 생성 및 csr 코드 생성

- key 파일 생성

[root@hostway.co.kr conf]# openssl genrsa 1024 > hostway.co.kr.key
Generating RSA private key, 1024 bit long modulus
....................................++++++
................++++++
e is 65537 (0x10001)

- csr 코드 생성

[root@hostway.co.kr conf]# openssl req -new -key hostway.co.kr.key -out hostway.co.kr.csr
Using configuration from /usr/share/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Gyunggido
Locality Name (eg, city) [Newbury]:Sungnam
Organization Name (eg, company) [My Company Ltd]:Hostway IDC
Organizational Unit Name (eg, section) []:Technical support Team
Common Name (eg, your name or your server's hostname) []:hostway.co.kr
Email Address []:support@hostway.co.kr

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

- 생성된 csr 코드 확인

[root@hostway.co.kr conf]# cat hostway.co.kr.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIB4jCCAUsCAQAwgaExCzAJBgNVBAYTAktSMRIwEAYDVQQIEwlHeXVuZ2dpZG8x
EDAOBgNVBAcTB1N1bmduYW0xFDASBgNVBAoTC0hvc3R3YXkgSURDMR8wHQYDVQQL
ExZUZWNobmljYWwgc3VwcG9ydCBUZWFtMRUwEwYDVQQDEwxKb28gd29vIGt3b24x
HjAcBgkqhkiG9w0BCQEWD2pvb2tAam9vay5wZS5rcjCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEA0ZvDHAVHU5xbT/ZDsAebNPBjRaXAPtmaV/WEIi4YsYkwBC15
Ro/gsPqNNCe5CJUw+K3qGnhbQI9Nd0/UKfTn174NSFWUxQv9E1mE4k5xoD/2T1Jf
TcZ0a0WDjIG/Xd69D+nkCTDG1ZbQnZ8qq2DcbulbjwD6sB5HTusRVHeIu2sCAwEA
AaAAMA0GCSqGSIb3DQEBBAUAA4GBAEjfawGIByqF+fLLjpeX2XZAIkL0L/kfOJbs
vuFwVNJuWYiakJF+LJaCz5S40CoZMV/bD+w+223MVF5KqAKTc6NUBbYGfBvuGTHT
TwLtnTqVBP0Xla0opWZWZ8JbGQJAGd+fxMOfvqx0ES1oPn0J97NpknSOBPOO3Q9s
/ZA9CUYd
-----END CERTIFICATE REQUEST-----
[root@hostway.co.kr conf]#

- csr 코드 생성이 완료되면 생성된 csr 코드를 입력해서 ssl 인증키 발급업체에 인증키 발급을 신청 한다.


8. 인증서 및 CA 인증서 설치

- 인증키 발급 업체에서 인증키를 발급받으면 www_hostway_co_kr.crt(인증서), www_hostway_co_kr.ca-bundle(CA 인증서)와 같이 두개의 인증서 파일을 발급받게 된다.
- 두 파일을 서버의 /usr/local/apache/conf 디렉토리에 업로드한다.


9. SSL 가상호스트 설정

- apache2는 httpd.conf 파일이외에 /usr/local/apache2/conf/extra/ 디렉토리에 있는 파일들을 include해서 참조하도록 설정되어 있다. 가상호스트 설정과, ssl 설정을 include 할수 있도록 httpd.conf 파일에서 아래부분의 주석을 해제 한다.


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


# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

- httpd-vhosts.conf 파일에 가상호스트를 추가하고 httpd-ssl.conf 파일에 아래와 같은 형식으로 ssl 가상호스트를 추가한다.

##
## SSL Virtual Host Context
##

NameVirtualHost 211.239.151.254:443

<VirtualHost 211.239.151.254:443>
DocumentRoot "/home/hostway/public_html"
ServerName www.hostway.co.kr
ServerAdmin support@hostway.co.kr
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/www_hostway_co_kr.crt
SSLCertificateKeyFile /usr/local/apache2/conf/hostway.co.kr.key
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/www_hostway_co_kr.ca-bundle

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

BrowserMatch ".*MSIE.*"
         nokeepalive ssl-unclean-shutdown
         downgrade-1.0 force-response-1.0

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

</VirtualHost>


10. apache 데몬 리스타트

- 모든 설정이 완료된 후 apache 데몬을 리스타트 하고 https://도메인으로 사이트를 띄워서 인증키를 확인한다.
- 여기서 https://www.hostway.co.kr은 실제로는 ssl 설정이 되어 있지 않기 때문에 안뜨는게 정상 ^^

[root@hostway.co.kr conf]# /usr/local/apache/bin/apachectl stop
[root@hostway.co.kr conf]# /usr/local/apache/bin/apachectl start

- apache2.x 에서는 apachectl startssl로 실행을 하지 않는다. httpd.conf 파일에서 httpd-ssl.conf 파일을 include하는 부분의 주석을 풀고 start 하게되면 자동으로 443포트까지 열리게 되며, ssl 서버가 가동되게 된다.

* csr 코드 확인 : openssl req -noout -text -in *.csr