Web2 SERVER 보안에 입각한 APM 설치]] 작성자: 조정현
<Contents>
<-작업 설명->
1 <-apache 설치->
1.1 기존 httpd 설치 여부 확인
1.2 httpd 다운로드 및 압축해제
1.3 httpd banner 정보 변조
1.4 httpd 설치
1.4.1 httpd.conf 수정: httpd(데몬)을 돌릴 계정 바꾸기
1.4.2 httpd 시작
1.4.3 서버의 배너그랩 확인
1.4.4 httpd 실행데몬 서비스 올리기
1.4.5 웹서버 기본 디렉토리 바꾸기
1.4.6 index.html 생성
1.4.7 방화벽 80포트 열기
1.4.8 httpd 시작
1.4.9 web test
1.5 log설정 변경
1.6 rotatelog
1.6.1 에러로그
1.6.2 액세스로그
1.7 SetEnvIf를 이용한 필터링 기능 이용
1.8 디렉토리 지시자
2 <-Mysql 설치->
2.1 기존 mysql 설치 여부 확인
2.2 Mysql 다운로드 및 압축해제
2.3 Mysql을 운영할 User생성
2.4 Mysql 설치
2.4.1 디렉토리 소유권 및 권한 변경
2.4.2 PATH 추가
2.4.3 mysql db생성
2.4.4 mysql 서비스 올리기
2.4.5 mysql secure install
2.5 Mysql 설정
2.5.1 mysql 관리자 계정 변경
2.6 히스토리 지우기
3 <-PHP 설치->
3.1 라이브러리 설치
3.1.1 iconv설치
3.2 php 다운로드 및 압축해제
3.3 php 설치
3.3.1 php환경파일 복사 및 php.ini수정
3.3.2 Httpd.conf 수정
3.3.3 php모듈 selinux관련 에러
3.3.4 httpd 서비스 재시작
3.3.5 phpinfo 테스트
4 아파치 보안 모듈1
4.1 ModSecurity
4.1.1 modsecurity 다운로드 및 압축해제
4.1.2 라이브러리 설치
4.1.3 mod_unique_id.so 모듈확인
4.1.4 mod_unique_id 설치
4.2 modsecurity 설치
4.2.1 mod_security2.so 모듈 httpd.conf에 등록
4.2.2 kisa 제공 룰 받아 적용
4.2.2.1 다운로드
4.2.2.2 압축풀기
4.2.2.3 내용 복사
4.2.2.4 modsecurity/SMB.conf : 다운로드 받은 룰을 인클루드 시키기
4.2.2.5 아파치 서비스 재시작
4.2.3 로그파일 위치
4.2.4 룰 지시자 설명
5 제로보드 설치
5.1 제로보드 설치 파일 확인
5.2 압축 해제
5.3 “xe/ 디렉토리 ”소유자 변경
5.4 제로보드에 쓰일 DB생성 및 권한 이임
5.5 웹브라우저->내 서버주소/xe/
5.6 php.ini수정
6 modsecurity 테스트
6.1 아파치 서비스 재시작
6.2 modsecurity Log보기
6.3 웹 테스트
6.4 modsecurityLog
7 아파치 보안 모듈2
7.1 Mod_evasive
7.1.1 Mod_evasive 다운로드
7.1.2 압축해제
7.1.3 Mod_evasive 모듈 설치
7.1.3.1 설치된 모듈 확인
7.1.3.2 httpd.conf mod_evasive 모듈 올라온 것 확인
7.1.3.3 적용 전 테스트
7.1.3.4 아파치 서비스 재시작
7.1.3.5 적용 후 테스트
8 SSL이용 HTTPS 보안 웹서버구축
8.1 openssl 업데이트
8.2 공개키와 개인키 만들기 (.pem은 공개키, .key는 개인키)
8.2.1 키 생성된 것 확인
8.3 root CA 만들기(최상위 인증기관)
8.3.1 생성된 ca.key 확인
8.3.2 ca.key와 websrv.key를 root만 읽을 수 있도록 권한 설정
8.4 root 인증서 만들기
8.4.1 생성한 root 인증서 확인
8.4.2 인증서 인증받기
8.5 httpd.conf 에 ssl 모듈 확인
8.5.1 ssl_module설치하기
8.5.2 확인
8.5.3 httpd.conf 수정
8.5.4 extra/httpd-ssl.conf 수정
8.5.5 테스트
9 제로보드 재 설치 후 SSL 적용
<-작업 설명->
Apche 설치시 배너 그랩에 대한 대비해 .httpd.h 혹은 ap_release.h 파일을 수정 후 설치한다. 그 다음 apache 보안 설정을 하고 apache 로그는 rotatelog 를 쓸 것이다.
나머지 /var/log/* 로그들은 원격 로그 서버로 넘긴다.
이 모든 작업이 끝난 후 상단의 방화벽 서버에서 NAT로 연결하기 위한 작업을 한 다음 테스트를 진행한다. APM 설치 순서는 apache --> mysql --> php --> 제로보드까지 설치한다. 그 다음 오픈 소스를 이용해 modsecurity, mod_evasive를 이용하여 아파치 보안 설정을 한다. apache 와 mysql의 설치 순서는 상관없지만 php는 맨 마지막에 설치하여야 한다. 왜냐하면 apache와 mysql을 연동시켜줘야 하는데 각각 설치 디렉토리 등 php설치시 ./configure 옵션에 명시시켜줘야 제대로 설치되기 때문이다. |
--
1 apache 설치
1.1 기존 httpd 설치 여부 확인
#rpm -qa |grep httpd
--> 기존에 설치된 httpd 가 있는지 확인한다.
만약 존재하면 rpm –e --nodeps [package name] 의존성 여부 상관없이 삭제하는 명령
1.2 httpd 다운로드 및 압축해제
#mkdir /usr/local/src/apm
#cd /usr/local/src/apm
[root@web2:/usr/local/src/apm]
#wget http://mirror.korea.ac.kr/apache/httpd/httpd-2.2.14.tar.gz
#tar xvfz httpd-2.2.14.tar.gz
1.3 httpd banner 정보 변조
* .httpd.h 혹은 ap_release.h 파일을 수정해서 banner grabbing을 통한 web server version 정보가
노출되는 것을 막는다.
마치 윈도우 IIS 서버 인 것처럼 보이게 할 것이다.
[root@web2:/usr/local/src/apm/httpd-2.2.14/include]
#vi ap_release.h
27 #define AP_SERVER_COPYRIGHT \
28 "ⓒ 2008 Microsoft Corporation. All rights reserved."
41 #define AP_SERVER_BASEVENDOR "Microsoft Corporation"
42 #define AP_SERVER_BASEPROJECT "Microsoft IIS Web Server"
43 #define AP_SERVER_BASEPRODUCT "Microsoft IIS/6.0"
44
45 #define AP_SERVER_MAJORVERSION_NUMBER 6
46 #define AP_SERVER_MINORVERSION_NUMBER 0
47 #define AP_SERVER_PATCHLEVEL_NUMBER 15
48 #define AP_SERVER_DEVBUILD_BOOLEAN 0
쌓이는 순서
debug, >>info, >>notice, >>warn, >>error, >>crit, >> alert, >>emerg.
info, >>notice, >>warn, >>error, >>crit, >> alert, >>emerg
notice, >>warn, >>error, >>crit, >> alert, >>emerg
warn, >>error, >>crit, >> alert, >>emerg
error, >>crit, >> alert, >>emerg
241 # Possible values include: debug, info, notice, warn, error, crit,
242 # alert, emerg.
--> 로그남기는 형식 설정하는 부분이다.
로그파일 포맷 정의
200 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
201 LogFormat "%h %l %u %t \"%r\" %>s %b" common
정의한 포맷을 적용
215 CustomLog "logs/access_log" common
#vi httpd.conf
186 #ErrorLog "logs/error_log" --> 주석처리
187 # ErrorLog Rotate every 60's!!
188 ErrorLog "|/usr/local/http/bin/rotatelogs /weblogs/error_log 60"
--> 로그를 로테이션 시키는데 로그를 60초 단위로 남긴다는 뜻
#service httpd restart
--> 익스플로러로 웹서버에 접속한 뒤 로그를 보자.
#ls -l /weblogs/
total 24
-rw-r--r-- 1 webuser webuser 0 Dec 1 01:28 access_log
-rw-r--r-- 1 root root 71 Dec 1 01:35 access_log.1259598900
-rw-r--r-- 1 webuser webuser 0 Dec 1 01:28 error_log
-rw-r--r-- 1 root root 150 Dec 1 01:35 error_log.1259598900
--> 제대로 로그가 생성되는 것을 볼 수 있다.
<날짜대로 로그 쌓이게 바꾸기>
--> 이번에는 로그파일 관리를 쉽게 하기 위해 년/월/일이 나오고 24시간(86400초) 단위로 설정
[root@web2:/usr/local/http/conf]#vi httpd.conf
…………………………………………………………………………………………………………………………………………………………………
188 ErrorLog "|/usr/local/http/bin/rotatelogs /weblogs/error_log.%Y%m%d 86400"
218 CustomLog "|/usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400" common
…………………………………………………………………………………………………………………………………………………………………
[root@web2:/usr/local/http/conf]#service httpd restart
[root@web2:/usr/local/http/conf]#ps -ef |grep http
root 1815 1 0 01:02 ? 00:00:00 /usr/local/http/bin/httpd -k start
root 2156 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/rotatelogs /weblogs/error_log.%Y%m%d 86400
root 2157 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400
webuser 2158 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 2159 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 2160 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 2162 1815 0 01:44 ? 00:00:00 /usr/local/http/bin/httpd -k start
root 2244 3965 0 01:45 pts/0 00:00:00 grep --color http
--> 서비스 재시작하고 프로세스를 확인하면 아래와 같이 rotatelogs 프로세스가 2개가 뜬다
[root@web2:/usr/local/http/conf]#ls -l /weblogs/
-rw-r--r-- 1 root root 150 Dec 1 01:44 error_log.20091130
-rw-r--r-- 1 root root 71 Dec 1 01:47 access_log.20091130
--> 이런 식으로 로그 파일이 생성된다.
1.7 SetEnvIf를 이용한 필터링 기능 이용
images 로그와 warm로그는 별도로 저장
웹서버 튜닝 중에 이미지 파일만 별도의 웹서버로 분리하는 방법이 잇다. 이 방법은 Request와 I/O출력, 트래픽을 분산하는 효과가 있을 것이다. 이런 튜닝방법과는 다르지만 images 로그만 별개로 파일에 저장한다.
다음은 이미지 파일은 images_log에, Codered나 Nimda등의 warm은 warm_log에 저장하는 설정이다.
예)
SetEnvIf Request_URI ".gif$" except=images
SetEnvIf Request_URI ".jpe?g$" except=images
SetEnvIf Request_URI ".png$" except=images
SetEnvIf Request_URI "^/default.ida" except=warm # Codered
SetEnvIf Request_URI "^/root.exe?" except=warm # Nimda
SetEnvIf Request_URI "/cmd.exe?" except=warm
None
모든 접근 거부
All
모든 접근 허용
Indexes
디렉토리 인덱스 파일이 없을경우 파일목록의 출력
Includes
서버측의 추가적인 포함기능 활성화(SSI)
IncludesNOEXEC
서버측의 포함기능은 사용, #exec #include등의 CGI스크립트는 X
FollowSymLinks
서버측 심볼링 링크 사용
ExecCGI
CGI 스크립트의 실행 가능
MultiViews
컨텐트 협상 활성화
AllowOverride
사용자 인증에 관한 지시자
보안의 강도를 가장 높게 하려면 Mysql 은 다음의 원칙 아래 설치/설정되어야 한다. - Mysql 데이터 베이스는 chroot 환경에서 실행한다. |
--
2.1 기존 mysql 설치 여부 확인
[root@web2:~]#rpm -qa |grep mysql
--> 기존에 설치된 mysql 가 있는지 확인한다.
만약 존재하면 rpm –e --nodeps [package name] 의존성 여부 상관없이 삭제하는 명령
2.2 Mysql 다운로드 및 압축해제
[root@web2:/usr/local/http/conf]#cd /usr/local/src/apm
[root@web2:/usr/local/src/apm]#wget http://203.237.211.230/named_scripts/mysql-5.1.38.tar.gz
[root@web2:/usr/local/src/apm]#tar xvfz mysql-5.1.38.tar.gz
2.3 Mysql을 운영할 User생성
[root@web2:/usr/local/src/apm]# useradd -c "Mysql Server" -M -s /bin/false mysql
2.4 Mysql 설치
[root@web2:/usr/local/src/apm]#./configure --prefix=/usr/local/mysql --localstatedir=/var/lib/mysql --with-charset=utf8 --sysconfdir=/etc --with-mysqld-user=mysql --with-unix-socket-path=/tmp/mysql.sock --with-mysqld-
ldflags=-all-static && make && make install
[root@web2:/usr/local/src/apm/mysql-5.1.38]#cd /usr/local/mysql
[root@web2:/usr/local/mysql]#cp share/mysql/my-medium.cnf /etc/my.cnf
[root@web2:/usr/local/mysql]#chown mysql.mysql /etc/my.cnf
[root@web2:/usr/local/mysql]#vi /etc/my.cnf
……………………………………………………………………………
27 user = mysql --> 추가 삽입
46 skip-networking --> 주석제거 함으로써 로컬에서만 사용할 수 있다.
……………………………………………………………………………
2.4.1 디렉토리 소유권 및 권한 변경
[root@web2:/usr/local/mysql]#chown -R root.mysql /usr/local/mysql/
[root@web2:/usr/local/mysql]#mkdir /var/lib/mysql/
[root@web2:/usr/local/mysql]#chown -R mysql:mysql /var/lib/mysql/
[root@web2:/usr/local/mysql]#chmod 700 /var/lib/mysql
2.4.2 PATH 추가
[root@web2:/usr/local/mysql]#vi /etc/profile
……………………………………………………………………………
13: PATH=/usr/local/mysql/bin:$PATH -->삽입
……………………………………………………………………………
[root@web2:/usr/local/mysql]#source /etc/profile
[root@web2:/usr/local/mysql]#echo $PATH
/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/kerberos/sbin:/usr/kerberos/bin:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
--> 경로 추가 됐다.
2.4.3 mysql db생성
[root@web2:/var/lib/mysql]#mysql_install_db --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK
..
..
.
2.4.4 mysql 서비스 올리기
[root@web2:/var/lib/mysql]#cd /usr/local/mysql
[root@web2:/usr/local/mysql]#cp share/mysql/mysql.server /etc/init.d/mysqld
[root@web2:/usr/local/mysql]#chkconfig --add mysqld
[root@web2:/usr/local/mysql]#chkconfig --level 3 mysqld on
[root@web2:/usr/local/mysql]#service mysqld start
Starting MySQL. [ OK ]
[root@web2:/usr/local/mysql]#netstat -nlp |grep :3306
[root@web2:/usr/local/mysql]#netstat -nlp |grep mysql
--> /etc/my.cnf 에서 46 skip-networking 때문에 포트가 안 열려 로컬에서만 접속 가능하게 된다.
설치 후 skip-networking을 주석처리 해준다.
2.4.5 mysql secure install
[root@web2:/usr/local/mysql]#mysql_secure_installation //enter All "y"
[root@web2:/usr/local/mysql]#mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.38-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql
Database changed
mysql> select * from user;
2.5 Mysql 설정
관리자 어카운트 변경 디폴트로 설정되는 관리자 어카운트(root)를 무차별 대입 공격 이나 딕셔너리 공격 등으로 추측해 내기 어려운 이름으로 변경한다. 변경해 두면 설사 공격을 당하더라도 공격자는 패스워드 뿐아니라 어카운트도 추측해 내야하기 때문에 공격은 더 어려워진다. |
--
2.5.1 mysql 관리자 계정 변경
mysql> update user set user="mydbadmin" where user="root";
mysql> flush privileges;
mysql> quit
2.6 히스토리 지우기
실행되는 모든 SQL 커맨드가 남겨지므로 삭제
[root@web2:/usr/local/mysql]#cat /dev/null > ~/.mysql_history
3 PHP 설치
3.1 라이브러리 설치
[root@web2:~]#yum install libjpeg-devel libpng-devel freetype-devel gd-devel libxml2-devel –y
3.1.1 iconv설치
[root@web2:/usr/local/src/apm]#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
[root@web2:/usr/local/src/apm]#tar xvfz libiconv-1.13.1.tar.gz
[root@web2:/usr/local/src/apm]#cd libiconv-1.13.1
[root@web2:/usr/local/src/apm/libiconv-1.13.1]#./configure --prefix=/usr && make && make install
3.2 php 다운로드 및 압축해제
[root@web2:/usr/local/src/apm]#wget http://kr.php.net/get/php-5.3.0.tar.gz/from/this/mirror
[root@web2:/usr/local/src/apm]#tar xvfz php-5.3.0.tar.gz
3.3 php 설치
[root@web2:/usr/local/src/apm/php-5.3.0]#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/http/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/http/conf/ --enable-gd-native-ttf --enable-calendar --enable-mbstring --enable-zend-multibyte --enable-sockets --enable-mod-charset=utf8 --disable-debug --with-libxml-dir=/usr --with-libexpat-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr --with-zlib-dir=/usr --with-freetype-dir=/usr --with-gd --with-iconv=/usr/local && make && make install
3.3.1 php환경파일 복사 및 php.ini수정
파일 설치가 끝났다면 설정 파일을 apche 디렉터리로 복사 후 httpd.conf 를 설정을 해주도록 하겠다. Safe_mode on 일 경우 파일을 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵된다. |
--
[root@web2:/usr/local/src/apm/php-5.3.0]#cp php.ini-production /usr/local/http/conf/php.ini
[root@web2:/usr/local/src/apm/php-5.3.0]#cd /usr/local/http/conf
[root@web2:/usr/local/http/conf]#vi php.ini
……………………………………………………………………………………………………………
338 safe_mode = On
531 display_errors = Off
695 register_globals = Off
344 safe_mode_gid = Off
431 expose_php = Off
874 file_uploads = Off
891 allow_url_fopen = Off
748 magic_quotes_gpc = On
379 ;open_basedir =
356 safe_mode_exec_dir =
552 log_errors = On
636 ;error_log = php_errors.log
--> 637 error_log = /weblogs/php_error.log (위에서 만들었던 아파치 로그 디렉토리 위치)
……………………………………………………………………………………………………………
이렇게 되어있는지 확인하고 안되어있다면 바꾸어준다.
3.3.2 Httpd.conf 수정
[root@web2:/usr/local/http/conf]#vi httpd.conf
……………………………………………………………………………………………………………
166 <IfModule dir_module>
167 DirectoryIndex index.html index.php
168 </IfModule>
332 AddType application/x-compress .Z
333 AddType application/x-gzip .gz .tgz
334 AddType application/x-httpd-php .php
335 AddType application/x-httpd-php-source .phps
……………………………………………………………………………………………………………
3.3.3 php모듈 selinux관련 에러
[root@web2:/usr/local/http/conf]#service httpd restart
httpd: Syntax error on line 53 of /usr/local/http/conf/httpd.conf: Cannot load /usr/local/http/modules/libphp5.so into server: /usr/local/http/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
--> libphp5.so 가 selinux 때문에 load 되지 않는다.
[root@web2:/usr/local/http/conf]#chcon -t textrel_shlib_t '/usr/local/http/modules/libphp5.so'
--> 꼭 해준다.
3.3.4 httpd 서비스 재시작
[root@web2:/usr/local/http/conf]#service httpd restart
[root@web2:/usr/local/http/conf]#ps -ef |grep http
root 1815 1 0 13:16 ? 00:00:01 /usr/local/http/bin/httpd -k start
root 10663 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/rotatelogs /weblogs/error_log.%Y%m%d 86400
root 10664 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400
webuser 10665 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 10666 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 10667 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/httpd -k start
webuser 10685 1815 0 20:22 ? 00:00:00 /usr/local/http/bin/httpd -k start
root 10751 10413 0 20:22 pts/2 00:00:00 grep --color http
3.3.5 phpinfo 테스트
[root@web2:/usr/local/http/conf]#cd ../web/
[root@web2:/usr/local/http/web]#echo "<?php phpinfo(); ?>" > phpinfo.php
[root@web2:/usr/local/http/web]#cat ../conf/httpd.conf |grep libphp5.so
LoadModule php5_module modules/libphp5.so
--> php모듈이 올라와 있는지 확인
[root@web2:/usr/local/http/web]#service httpd restart
--> httpd 서비스 재시작
[phpinfo페이지 확인]
--
4 아파치 보안 모듈1
4.1 ModSecurity
Open Source Web Applivation Firewall 로서 공개된 프로그램이다. Apache 웹서버위에서 동작하는 형태로 되어있다. ModSecurity는 O'Reilly社에서 출간한 "Apache Security"라는 책을 쓴 Ivan Ristic가 개발한 툴로써, 설치 및 차단 Rule 설정 인터페이스가 CLI기반이어서 다소 불편하다는 단점은 있지만 그만큼 유연한 정책 설정이 가능하고 입력 값 검증기능이 매우 우수하다. . 1. 웹서버로 들어오는 요청은 서버에 전달되기 전에 Mod_security에게 전달되어 정상적인 트래픽인지 여부에 대한 유효성 체크를 하게 된다.
2. 여러가지 IDS우회(evasion) 기법을 인식할 수 있는 기능을 제공한다. 경로와 파라미터를 분석하기 전에 정규화시켜 우회 공격을 차단한다. 즉, "//", "\/". ".". "%00" 등 우회 공격용 스트링을 제거하고, 인코딩된 URL을 디코딩한다.
3. Mod_security는 HTTPS뿐만 아니라 HTTP프로토콜을 정확히 이해하고 있으므로 정확도가 높고 상세한 설정도 가능하다. . 4. POST Method로 작동하는 데이터에 대해서도 작동한다. GET방식 뿐만 아니라 POST 메소드를 사용해서 전송되는 컨텐츠도 분석 가능하다. . 5. 모든 요청에 대해 사후 분석을 위해 로그에 남길 수 있다. POST를 포함하여 모든 요청의 모든 상세한 부분들까지 추후 분석을 위해서 로깅될 수 있다. Modsecurity에서 차단 기능을 비활성화 시킨 후, 강력한 로깅 기능만으로 침입탐지 시스템 역할을 수행할 수 있도록 한다. |
--
4.1.1 modsecurity 다운로드 및 압축해제
[root@web2:/usr/local/src/apm]#wget http://www.modsecurity.org/download/modsecurity-apache_2.5.10.tar.gz
[root@web2:/usr/local/src/apm]#tar xvfz modsecurity-apache_2.5.10.tar.gz
4.1.2 라이브러리 설치
"libxml2"는 설치 했으므로 넘어가고 "pcre:를 설치해야 한다.
[root@web2:/usr/local/src/apm]#yum install pcre-devel –y
4.1.3 mod_unique_id.so 모듈확인
modsecurity 2.5.x 버전을 설치하려면 unique_id가 반드시 설치되어 있어야 한다.
확인해보자.
[root@web2:/usr/local/http/conf]#cat httpd.conf |grep uni
# socket used to communicate with the CGI daemon of mod_cgid.
아파치 설치시 --enable-mods-shared=all 옵션을 주엇다면 있을 것인데 만약 모듈이 안 올라와 있다. 설치한다.
4.1.4 mod_unique_id 설치
[root@web2:/usr/local/http/conf]#cd /usr/local/src/apm/httpd-2.2.14
[root@web2:/usr/local/src/apm/httpd-2.2.14]#cd modules/metadata/
[root@web2:/usr/local/src/apm/httpd-2.2.14/modules/metadata]#/usr/local/http/bin/apxs -cia ./mod_unique_id.c
--> 아파치 소스파일 위치경로에서 "modules/metadata/mod_unique_id.c"를 설치한다.
그 다음 "httpd.conf" 에서 모듈이 올라왔는지 확인
[root@web2:/usr/local/http/conf]#cat httpd.conf |grep uni
LoadModule unique_id_module modules/mod_unique_id.so
# socket used to communicate with the CGI daemon of mod_cgid.
4.2 modsecurity 설치
[root@web2:/usr/local/http/conf]#cd /usr/local/src/apm/modsecurity-apache_2.5.10
[root@web2:/usr/local/src/apm/modsecurity-apache_2.5.10]#cd apache2/
[root@web2:/usr/local/src/apm/modsecurity-apache_2.5.10/apache2]#./configure --with-apxs=/usr/local/http/bin/apxs --with-pcre=/usr/bin --with-apr=/usr/local/http/bin/apr-1-config --with-apu=/usr/local/http/bin/apu-1-config &&make && make install
4.2.1 mod_security2.so 모듈 httpd.conf에 등록
………………………………………………………………………………………………………………………………………………………………….
[root@web2:/usr/local/http/conf]#vi httpd.conf
56 ####### mod security module ########################
57 LoadFile /usr/lib/libxml2.so
58 LoadModule security2_module modules/mod_security2.so
59 ####################################################
………………………………………………………………………………………………………………………………………………………………….
아파치 서비스 재시작
[root@web2:/usr/local/http/conf]#service httpd restart
4.2.2 kisa 제공 룰 받아 적용
http://www.securenet.or.kr/main.jsp?menuSeq=501
4.2.2.1 다운로드
4.2.2.2 압축풀기
4.2.2.3 내용 복사
[root@web2:/usr/local/http/conf]#mkdir modsecurity
[root@web2:/usr/local/http/conf]#cd modsecurity/
[root@web2:/usr/local/http/conf/modsecurity]#vi SMB.conf --> 붙여넣기, 저장.
4.2.2.4 modsecurity/SMB.conf : 다운로드 받은 룰을 인클루드 시키기
[root@web2:/usr/local/http/conf/modsecurity]#cd ..
[root@web2:/usr/local/http/conf]#vi httpd.conf
………………………………………………………………………………………………………………………………………………………………….
56 ####### mod security module ########################
57 LoadFile /usr/lib/libxml2.so
58 LoadModule security2_module modules/mod_security2.so
59 include conf/modsecurity/SMB.conf -->추가 삽입
60 ####################################################
………………………………………………………………………………………………………………………………………………………………….
4.2.2.5 아파치 서비스 재시작
[root@web2:/usr/local/http/conf]#service httpd restart
4.2.3 로그파일 위치
[root@web2:/usr/local/http/conf]#ll ../logs/modsec_audit.log
-rw-r----- 1 root root 0 Dec 2 03:45 ../logs/modsec_audit.log
4.2.4 룰 지시자 설명
[root@web2:/usr/local/http/conf]#cd modsecurity/
[root@web2:/usr/local/http/conf/modsecurity]#vi SMB.conf
………………………………………………………………………………………………………………………………………………………………….
26 SecRuleEngine On
39 SecDefaultAction "pass,log,auditlog,phase:2,t:urlDecodeUni,t:htmlEntityDec ode,t:lowercase"
………………………………………………………………………………………………………………………………………………………………….
SecDefaultAction 지시자의 추가적인 Action에 대해 알아보자. 먼저, 다음과 같은 5가지 종류로 분류 할 수 있다. Disruptive actions : ModSecurity가 데이터를 중간에서 가로챌 때 일어나는 행위이다. 하나의 체인에 첫 번째 룰에만 나타낼 수 있다. allow, deny, drop 등이 있다. Non-Disruptive actions : 어디에나 나타낼 수 있다. capture, ctl, exec, initcol 등이 있다. Flow actions : 하나의 체인에 첫 번째 룰에만 나타낼 수 있다. chain 이 있다. Meta-data actions : 하나의 체인에 첫 번째 룰에만 나타낼 수 있다. id, rev, severity, msg가 있다. Data actions : 전면적으로 수동적이고 다른 행위에서 사용된 데이터를 운반하는 역할뿐이다. |
--
5 제로보드 설치
--> 다운로드 받은 제로보드 xe.1.3.0.tgz 파일을 "/usr/local/http/web"에 업로드 시킨다.
5.1 제로보드 설치 파일 확인
[root@web2:/usr/local/http/web]#ls
index.html phpinfo.php test.html xe.1.3.0.tgz
5.2 압축 해제
[root@web2:/usr/local/http/web]#tar xvfz xe.1.3.0.tgz
5.3 "xe/ 디렉토리 "소유자 변경
[root@web2:/usr/local/http/web]#chown -R webuser:webuser xe/
5.4 제로보드에 쓰일 DB생성 및 권한 이임
[root@web2:/usr/local/http/web]#mysql -u mydbadmin -p
Enter password:
mysql> create database web; Query OK, 1 row affected (0.00 sec) . mysql> grant all privileges on web.* to mydbadmin@"localhost"; Query OK, 0 rows affected (0.03 sec) . mysql> set password for mydbadmin@localhost=password('pass1234'); Query OK, 0 rows affected (0.00 sec) . mysql> quit |
--
5.6 php.ini수정
[root@web2:/usr/local/http/web]#vi ../conf/php.ini
………………………………………………………………………………………………………
338 safe_mode = Off
………………………………………………………………………………………………………
[root@web2:/usr/local/http/web]#service httpd restart
6 modsecurity 테스트
[root@web2:/usr/local/http/conf]#cd ../logs/
[root@web2:/usr/local/http/logs]#tail -f modsec_audit.log
--55192b3b-A--
[02/Dec/2009:04:50:42 +0900] SxVzkX8AAAEAAEkRDPMAAAAM 192.168.10.26 5648 192.168.10.185 80
--55192b3b-B--
GET /xe/index.php?module=admin&<script></script> HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Language: ko
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Host: 192.168.10.185
Connection: Keep-Alive
Cookie: PHPSESSID=olo0ut247guso9itm4e856r1l3; lang_type=ko
.
--55192b3b-F--
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.0
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Encoding: gzip
Last-Modified: Tue, 01 Dec 2009 19:50:42 GMT
Cache-Control: post-check=0, pre-check=0
Vary: Accept-Encoding
Content-Length: 6230
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
.
--55192b3b-H--
Message: Warning. Pattern match "(<[[:space:]]*(script|about|applet|activex|chrome)*>.*(script|about|applet|activex|chrome)[[:space:]]*>|onmouseover=|javascript\:)" at REQUEST_URI. [file "/usr/local/http/conf/modsecurity/SMB.conf"] [line "285"]
Apache-Error: [file "/usr/local/src/apm/php-5.3.0/sapi/apache2handler/sapi_apache2.c"] [line 306] [level 3] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Seoul' for 'KST/9.0/no DST' instead in /usr/local/http/web/xe/modules/admin/admin.admin.view.php on line 139
Apache-Error: [file "/usr/local/src/apm/php-5.3.0/sapi/apache2handler/sapi_apache2.c"] [line 306] [level 3] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Seoul' for 'KST/9.0/no DST' instead in /usr/local/http/web/xe/modules/admin/admin.admin.view.php on line 140
Apache-Error: [file "/usr/local/src/apm/php-5.3.0/sapi/apache2handler/sapi_apache2.c"] [line 306] [level 3] PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Seoul' for 'KST/9.0/no DST' instead in /usr/local/http/web/xe/modules/session/session.controller.php on line 35
Stopwatch: 1259697041358353 820653 (107 5784 820121)
Producer: ModSecurity for Apache/2.5.10 (http://www.modsecurity.org/). Server: Microsoft IIS/6.0/6.0.15
.
--55192b3b-Z--
위에서 화면이 보인 건 아래 세팅이 pass라서.. deny로 바꾸면 접근이 거부된다.
세션 복제해서 -->
[root@web2:~]#vi /usr/local/http/conf/modsecurity/SMB.conf
………………………………………………………………………………………………………………………………………………………………... 39 SecDefaultAction "deny,log,auditlog,phase:2,t:urlDecodeUni,t:htmlEntityDec ode,t:lowercase" ………………………………………………………………………………………………………………………………………………………………...
6.1 아파치 서비스 재시작
[root@web2:~]#service httpd restart
6.2 modsecurity Log보기
[root@web2:/usr/local/http/logs]#tail -f modsec_audit.log
--c1fbf770-H--
Message: Access denied with code 403 (phase 2). Pattern match "(<[[:space:]]*(script|about|applet|activex|chrome)*>.*(script|about|applet|activex|chrome)[[:space:]]*>|onmouseover=|javascript\:)" at REQUEST_URI. [file "/usr/local/http/conf/modsecurity/SMB.conf"] [line "285"]
Action: Intercepted (phase 2)
Stopwatch: 1259697895627675 387 (12 39 -)
Producer: ModSecurity for Apache/2.5.10 (http://www.modsecurity.org/).
Server: Microsoft IIS/6.0/6.0.15
--c1fbf770-Z—
[phpinfo 페이지 보는 거 막기]
[root@web2:~]#vi /usr/local/http/conf/modsecurity/SMB.conf ………………………………………………………………………………………………………………………………………………………………... 70 # 3. PHP 인젝션 취약 공격 방지(공개 게시판 솔루션 대상 공격 포함)
71 SecRule REQUEST_URI "/phpinfo\.php" "msg:'phpinfo grabbing Attacks'" --> 추가 삽입
72 SecRule REQUEST_URI "\.php" "chain, msg:'PHP Injection Attacks'" ………………………………………………………………………………………………………………………………………………………………...
[root@web2:~]#service httpd restart
[root@web2:/usr/local/http/web]#echo "<?php phpinfo(); ?>" > phpinfo.php
--> phpinfo 페이지를 만든다. 없다면.
6.3 웹 테스트
6.4 modsecurityLog
[root@web2:/usr/local/http/logs]#tail -f modsec_audit.log
--631cc10e-F--
HTTP/1.1 403 Forbidden
Content-Length: 288
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
--631cc10e-H--
Message: Access denied with code 403 (phase 2). Pattern match "/phpinfo\.php" at REQUEST_URI. [file "/usr/local/http/conf/modsecurity/SMB.conf"] [line "71"] [msg "phpinfo grabbing Attacks"]
Action: Intercepted (phase 2)
Stopwatch: 1259699391095428 4193 (1433 1619 -)
Producer: ModSecurity for Apache/2.5.10 (http://www.modsecurity.org/).
Server: Microsoft IIS/6.0/6.0.15
--631cc10e-Z—
7 아파치 보안 모듈2
7.1 Mod_evasive
링크
7.1.1 Mod_evasive 다운로드
[root@web2:/usr/local/src/apm]#wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
7.1.2 압축해제
[root@web2:/usr/local/src/apm]#tar xvfz mod_evasive_1.10.1.tar.gz
7.1.3 Mod_evasive 모듈 설치
[root@web2:/usr/local/src/apm]#cd mod_evasive
[root@web2:/usr/local/src/apm/mod_evasive]#/usr/local/http/bin/apxs -cia mod_evasive20.c
7.1.3.1 설치된 모듈 확인
[root@web2:/usr/local/src/apm/mod_evasive]#ll /usr/local/http/modules/
total 20472
drwxr-xr-x 2 root root 4096 Dec 2 05:43 .
drwxr-xr-x 16 root root 4096 Dec 1 01:01 ..
-rw-r--r-- 1 root root 8997 Dec 1 00:45 httpd.exp
-rwxr-xr-x 1 root root 19897250 Dec 2 04:38 libphp5.so
-rwxr-xr-x 1 root root 38259 Dec 2 05:43 mod_evasive20.so
-rwxr-xr-x 1 root root 915367 Dec 2 02:47 mod_security2.so
-rwxr-xr-x 1 root root 26170 Dec 2 02:33 mod_unique_id.so
7.1.3.2 httpd.conf mod_evasive 모듈 올라온 것 확인
[root@web2:/usr/local/src/apm/mod_evasive]#cat /usr/local/http/conf/httpd.conf |grep evasive
LoadModule evasive20_module modules/mod_evasive20.so
[root@web2:/usr/local/src/apm/mod_evasive]#cd /usr/local/http/conf
[root@web2:/usr/local/http/conf]#vi httpd.conf --> 추가 삽입
…………………………………………………………………………………………………………………………………………………………………
63 ####### mod evasive Setting ########################
64 <IfModule mod_evasive20.c>
65 DOSHashTableSize 3097
66 DOSPageCount 5
67 DOSSiteCount 100
68 DOSPageInterval 1
69 DOSSiteInterval 1
70 DOSBlockingPeriod 10
71 </IfModule>
72 ###################################################
…………………………………………………………………………………………………………………………………………………………………
7.1.3.3 적용 전 테스트
[root@web2:/usr/local/http/conf]#cd /usr/local/src/apm/mod_evasive
[root@web2:/usr/local/src/apm/mod_evasive]#chmod 700 test.pl
[root@web2:/usr/local/src/apm/mod_evasive]#./test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
7.1.3.4 아파치 서비스 재시작
[root@web2:/usr/local/src/apm/mod_evasive]#service httpd restart
--> mod_evasive 가 적용 되기 위해 재 시작 해준다.
7.1.3.5 적용 후 테스트
[root@web2:/usr/local/src/apm/mod_evasive]#./test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
--> 계속 접속 시도가 있으니 일정 단위로 끊어 준다.
[root@web2:/usr/local/src/apm/mod_evasive]#vi test.pl
…………………………………………………………………………………………………………………………………………………………………
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
…………………………………………………………………………………………………………………………………………………………………
--> 위 IP주소만 바꾸면 다른 서버로 테스트(또는 공격)이 가능하다.
8 SSL이용 HTTPS 보안 웹서버구축
8.1 openssl 업데이트
[root@web2:~]#rpm -qa |grep openssl
openssl-0.9.8e-7.el5
openssl-devel-0.9.8e-7.el5
[root@web2:~]#yum update openssl* -y
8.2 공개키와 개인키 만들기 (.pem은 공개키, .key는 개인키)
[root@web2:~]#mkdir /usr/local/http/conf/pki
[root@web2:~]#cd /usr/local/http/conf/pki
[root@web2:/usr/local/http/conf/pki]#openssl req -newkey rsa:2048 -nodes -out websrv.pem -keyout websrv.key
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:SEOUL
Locality Name (eg, city) [Newbury]:SEOUL
Organization Name (eg, company) [My Company Ltd]:sec
Organizational Unit Name (eg, section) []:Security
Common Name (eg, your name or your server's hostname) []:www.sec.iss
Email Address []:chojh@sec.iss
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
8.2.1 키 생성된 것 확인
[root@web2:/usr/local/http/conf/pki]#ls -l
total 16
-rw-r--r-- 1 root root 1679 Dec 2 08:02 websrv.key --> 유출되면 안 됨.
-rw-r--r-- 1 root root 1041 Dec 2 08:02 websrv.pem
8.3 root CA 만들기(최상위 인증기관)
[root@web2:/usr/local/http/conf/pki]#openssl genrsa -des3 -out ca.key 2048
…
Enter pass phrase for ca.key: 패스워드 입력
Verifying - Enter pass phrase for ca.key: 패스워드 입력
8.3.1 생성된 ca.key 확인
[root@web2:/usr/local/http/conf/pki]#ls -l
total 24
-rw-r--r-- 1 root root 1751 Dec 2 08:05 ca.key
-rw-r--r-- 1 root root 1679 Dec 2 08:02 websrv.key
-rw-r--r-- 1 root root 1041 Dec 2 08:02 websrv.pem
8.3.2 ca.key와 websrv.key를 root만 읽을 수 있도록 권한 설정
[root@web2:/usr/local/http/conf/pki]#chmod 600 ca.key
[root@web2:/usr/local/http/conf/pki]#chmod 600 websrv.key
8.4 root 인증서 만들기
[root@web2:/usr/local/http/conf/pki]#openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Enter pass phrase for ca.key:
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]:SEOUL
Locality Name (eg, city) [Newbury]:SEOUL
Organization Name (eg, company) [My Company Ltd]:sec
Organizational Unit Name (eg, section) []:Security
Common Name (eg, your name or your server's hostname) []:www.sec.iss
Email Address []:chojh@sec.iss
8.4.1 생성한 root 인증서 확인
[root@web2:/usr/local/http/conf/pki]#ls -l
total 32
-rw-r--r-- 1 root root 1578 Dec 2 08:11 ca.crt
-rw------- 1 root root 1751 Dec 2 08:05 ca.key
-rw------- 1 root root 1679 Dec 2 08:02 websrv.key
-rw-r--r-- 1 root root 1041 Dec 2 08:02 websrv.pem
8.4.2 인증서 인증받기
[root@web2:/usr/local/http/conf/pki]#openssl x509 -req -CA ca.crt -CAkey ca.key -in websrv.pem -out sign-websrv.pem -CAcreateserial
Signature ok
subject=/C=KR/ST=SEOUL/L=SEOUL/O=sec/OU=Security/CN=www.sec.iss/emailAddress=chojh@sec.iss
Getting CA Private Key
Enter pass phrase for ca.key:
[확인]
[root@web2:/usr/local/http/conf/pki]#ls -l
total 48
-rw-r--r-- 1 root root 1578 Dec 2 08:11 ca.crt
-rw------- 1 root root 1751 Dec 2 08:05 ca.key
-rw-r--r-- 1 root root 17 Dec 2 08:13 ca.srl
-rw-r--r-- 1 root root 1269 Dec 2 08:13 sign-websrv.pem
-rw------- 1 root root 1679 Dec 2 08:02 websrv.key
-rw-r--r-- 1 root root 1041 Dec 2 08:02 websrv.pem
8.5 httpd.conf 에 ssl 모듈 확인
[root@web2:/usr/local/http/conf]#cat httpd.conf |grep ssl
#Include conf/extra/httpd-ssl.conf
# but a statically compiled-in mod_ssl.
<IfModule ssl_module>
없다. (있으면 넘어간다.)
ssl 모듈 설치 해준다.
만약 아파치를 동적 모듈로 설치하지 않았다면(컴파일시 옵션: "--enable-so")
아파치 재 컴파일해야 한다.
8.5.1 ssl_module설치하기
[root@web2:/usr/local/src/apm/httpd-2.2.14]#cd modules/ssl/
[root@web2:/usr/local/src/apm/httpd-2.2.14/modules/ssl]#/usr/local/http/bin/apxs -cia ./mod_ssl.c
8.5.3 확인
[root@web2:/usr/local/http/conf]#cat httpd.conf |grep mod_ssl.so
LoadModule ssl_module modules/mod_ssl.so
8.5.4 httpd.conf 수정
[root@web2:/usr/local/http/conf]#vi httpd.conf
………………………………………………………………………………………………………………………………………………………………….
446 # Secure (SSL/TLS) connections
447 Include conf/extra/httpd-ssl.conf --> 주석 제거
………………………………………………………………………………………………………………………………………………………………….
8.5.5 extra/httpd-ssl.conf 수정
[root@web2:/usr/local/http/conf]#cd extra/
[root@web2:/usr/local/http/conf/extra]#vi httpd-ssl.conf
………………………………………………………………………………………………………………………………………………………………….
74 <VirtualHost _default_:443>
75
76 # General setup for the virtual host
77 DocumentRoot "/usr/local/http/web"
78 ServerName www.sec.iss:443
79 ServerAdmin chojh@sec.iss
80 ErrorLog "/weblogs/https_error_log"
81 TransferLog "/weblogs/https_access_log"
82
85 SSLEngine on --> 확인
99 SSLCertificateFile "/usr/local/http/conf/pki/sign-websrv.pem" --> 경로 수정
100 #SSLCertificateFile "/usr/local/http/conf/server-dsa.crt"
107 SSLCertificateKeyFile "/usr/local/http/conf/pki/websrv.key" --> 경로 수정
108 #SSLCertificateKeyFile "/usr/local/http/conf/server-dsa.key"
127 SSLCACertificateFile "/usr/local/http/conf/pki/ca.crt" --> 경로 수정
………………………………………………………………………………………………………………………………………………………………….
[root@web2:/usr/local/http/conf]#service httpd restart
8.5.6 테스트
[root@web2:/usr/local/http/conf]#iptables –F
9 제로보드 재 설치 후 SSL적용
[root@web2:/usr/local/http/web]#rm -rf xe
[root@web2:/usr/local/http/web]#ls
index.html phpinfo.php test.html xe.1.3.0.tgz
[root@web2:/usr/local/http/web]#tar xvfz xe.1.3.0.tgz
[root@web2:/usr/local/http/web]#chown -R webuser.webuser xe/
<End>