블로그 이미지
정신 못차리면, 벌 받는다. 와닥

카테고리

분류 전체보기 (1406)
Daily (587)
W3C (93)
Photo (229)
News (49)
Portfolio (24)
Database (42)
Programming (251)
Server (109)
Tip (22)
Total28,306
Today103
Yesterday141

New Born

와닥

달력

« » 2012.02
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

최근에 달린 댓글

최근에 받은 트랙백


Apache 시작시 개인키 패스워드 자동입력

보안서버 구축 후에는 apache 를 구동할 때 개인 키 패스워드를 입력해야 합니다.
apache 구동시 스크립트를 실행하여 패스워드를 자동으로 입력되게 할 수 있습니다.

# /etc/init.d/httpd start
Apache/2.2.22 mod_ssl/2.2.22 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server secure.oops4u.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.



1. Apache 설정 파일 (mod_ssl)

# vi /usr/local/httpd/conf/extra/httpd-ssl.conf
#SSLPassPhraseDialog  builtin
SSLPassPhraseDialog  exec:/usr/local/httpd/conf/ssl/pass.sh


2. 패스워드 쉘스크립트 생성

# vi /usr/local/httpd/conf/ssl/pass.sh
#!/bin/sh
echo 'password'


3. 실행권한 부여

# chmod a+x /usr/local/httpd/conf/ssl/pass.sh


4. Apache 재시작
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥

사설인증기관으로부터 인증서 발급


1. 개인키 / CSR 파일 생성

# openssl genrsa -des3 -out secure.oops4u.com.key 2048
# openssl req -new -key secure.oops4u.com.key -out secure.oops4u.com.csr
-----
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Yeoksam-dong
Organization Name (eg, company) [My Company Ltd]:oops4u
Organizational Unit Name (eg, section) []:oops4u
Common Name (eg, your name or your server's hostname) []:secure.oops4u.com
Email Address []:abc@abc.com


2. 인증기관에서 CSR 처리

# openssl ca -in secure.oops4u.com.csr -out secure.oops4u.com.crt
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /home/CA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Feb 27 03:31:29 2012 GMT
            Not After : Feb 24 03:31:29 2022 GMT
        Subject:
            countryName               = KR
            organizationName          = Oops4u
            organizationalUnitName    = Oops4u
            commonName                = secure.oops4u.com
            emailAddress              = abc@abc.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                6C:7C:2F:C6:22:C4:01:DE:42:9F:76:58:47:BD:0D:FF:D4:8C:5F:67
            X509v3 Authority Key Identifier:
                keyid:50:76:90:16:27:16:C1:C7:B8:0E:95:40:A0:F0:64:DE:38:9F:04:C4
...

-----END CERTIFICATE-----
Data Base Updated


3. 발급된 키와 인증서 세팅

# mkdir /usr/local/httpd/conf/ssl
# mv secure.oops4u.com.key /usr/local/httpd/conf/ssl
# mv secure.oops4u.com.crt /usr/local/httpd/conf/ssl

# vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-ssl.conf

# vi /usr/local/httpd/conf/extra/httpd-ssl.conf
<VirtualHost *:443>
DocumentRoot "/home/secure"
ServerName secure.oops4u.com:443

SSLEngine on
SSLCertificateFile "/usr/local/httpd/conf/ssl/secure.oops4u.com.crt"
SSLCertificateKeyFile "/usr/local/httpd/conf/ssl/secure.oops4u.com.key"

# chain 및 root 인증서가 있는 경우 함께 지정합니다.
SSLCertificateChainFile "/usr/local/httpd/conf/ssl/secure.oops4u.com.chain.crt"
SSLCACertificateFile "/usr/local/httpd/conf/ssl/secure.oops4u.com.root.crt"
</VirtualHost>


4. Apache 재시작
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥
Openssl 사설인증기관(CA) 생성

alpha 서버의 보안서버 구축. (공인인증기관에 신청할 경우 생략합니다.)
사설인증서를 사용하기 위한 사설인증기관(Certificate Authority) 생성.


1. CA 환경설정

# vi /etc/pki/tls/openssl.cnf
dir = /home/CA
#stateOrProvinceName = match


2. 디렉토리 / 파일 생성

# mkdir /home/CA
# cd /home/CA
# mkdir certs newcerts crl private
# touch serial index.txt
# echo "00" > serial


3. 개인키 / CSR 파일 생성

# openssl genrsa -des3 -out private/cakey.pem 2048      <--- 원하는 bit
Generating RSA private key, 2048 bit long modulus
............................................................................+++
..................................................+++
e is 65537 (0x10001)
Enter pass phrase for private/cakey.pem:          <--- 패스워드 설정
Verifying - Enter pass phrase for private/cakey.pem:

# openssl req -new -key private/cakey.pem -out ca.csr
Enter pass phrase for private/cakey.pem:
-----
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Seoul
Locality Name (eg, city) [Newbury]:Yeoksam-dong
Organization Name (eg, company) [My Company Ltd]:Oops4u
Organizational Unit Name (eg, section) []:Oops4u
Common Name (eg, your name or your server's hostname) []:CA
Email Address []:abc@abc.com


4. CA 사설인증서 생성

# openssl ca -in ca.csr -out cacert.pem -selfsign -keyfile private/cakey.pem
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Feb 27 01:37:48 2012 GMT
            Not After : Feb 24 01:37:48 2022 GMT
        Subject:
            countryName               = KR
            organizationName          = Oops4u
            organizationalUnitName    = Oops4u
            commonName                = CA
            emailAddress              = abc@abc.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                50:76:90:16:27:16:C1:C7:B8:0E:95:40:A0:F0:64:DE:38:9F:04:C4
            X509v3 Authority Key Identifier:
                keyid:50:76:90:16:27:16:C1:C7:B8:0E:95:40:A0:F0:64:DE:38:9F:04:C4

Certificate is to be certified until Feb 24 01:37:48 2022 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥
Apache 에서 SSL(Secure Sockets Layer) 통신을 하기 위해서는 OpenSSL 과 mod_ssl 이 필요합니다.

OpenSSL 은 yum 으로 설치합니다.

mod_ssl 은 apache 컴파일시 --enable-ssl 옵션을 추가하여 컴파일 할 수 있고,
apxs 를 이용한 개발 컴파일도 가능할 것 같지만 실패하고 맘편하게 apache 재컴파일 합니다.
apache 를 패키지 설치했다면 yum install mod_ssl 로 설치할 수 있습니다.

정상적으로 mod_ssl 이 설치되었는지 확인합니다.

# httpd -t -D DUMP_MODULES
Loaded Modules:
ssl_module

https 를 사용할 방화벽 443 포트를 개방합니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥

mssql 모듈 추가

Server/CentOS / 2012/02/17 23:30
mssql 모듈 추가

Linux 에서도 freetds 와 mssql 모듈이 있으면 외부 mssql 에 접속이 가능합니다.
freetds 설치하고 mssql 모듈은 php를 이미 소스설치 하였기 때문에 재컴파일 없이 별도로 컴파일을 하였습니다.
(참고로 바로 아래는 실패한 방법이니 따라하지는 마시길;)


1. freetds 설치

# wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar zxvf freetds-stable.tgz
# cd freetds-0.91
# ./configure --prefix=/usr/local/freetds --enable-msdblib
# make
# make install

# vi /etc/ld.so.conf
/usr/local/freetds/lib <- 추가
# ldconfig -v


2. mssql 모듈 추가

# cd /usr/local/src/php-5.2.17/ext/mssql
# /usr/local/php/bin/phpize
# ./configure --with-mssql=/usr/local/freetds --with-php-config=/usr/local/php/bin/php-config
# make
# make install

# cp modules/mssql.so /usr/local/php/modules
# vi /usr/local/php/etc/php.ini
extension_dir=/usr/local/php/modules/
extension=mssql.so


3. apache 재시작

# /etc/init.d/httpd stop
# /etc/init.d/httpd start


4. phpinfo 확인

# php -i | grep mssql
mssql...


5. mssql 테스트

# vi test.php
$link = mssql_connect( $db_ip, $db_id, $db_pwd );
if ( !$link ) {
  die( 'DB Connect Failed.' );
} else {
    echo 'success!';
}


그리고 test.php 파일을 불렀더니
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: xxx.xxx.xxx.xxx in /home/www/test.php on line 3
DB Connect Failed.


freetds.conf 파일에서 설정을 해주고 접속하면 당연히 됩니다.
하지만, 예전에 freetds.conf 설정을 안하고 php 에서 여러 mssql 접속이 바로 가능했던 기억이 있기에 이건 아니라고 생각하고 여러 방법을 시도했습니다.
게다가 그냥 접속 실패도 아니고 Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server 오류가 나는 것도 이해할 수 없었고...

freetds 소스설치 여러버전 여러옵션 + mssql 컴파일 = 다실패.
freetds yum 설치 + mssql 컴파일 = 실패
freetds 소스설치 여러버전 여러옵션 + php 재컴파일 = 다실패
freetds yum 설치 + php 재컴파일 = 성공


일단 성공해서 정말 다행입니다. 이유는 모르겠습니다.
여러가지 의심가는 부분은 많지만 더이상 테스트해 보고 싶지 않네요.ㅋ


성공 조합

# yum -y install freetds*

# cd /usr/local/src/php-5.2.17
# ./configure --prefix=/usr/local/php-5.2.17 \
...
--with-mssql=/usr
--with-libdir=lib64 (64bit일 경우)
# make
# make install

# cp php.ini-dist /usr/local/php/etc/php.ini

# /etc/init.d/httpd stop
# /etc/init.d/httpd start


test.php 파일 불러보니
success!

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥

mbstring 모듈 추가 방법

  1.  php 컴파일시 --enable-mbstring 추가.
  2.  php 이미 컴파일 한 경우 모듈 확장으로 별도 추가.

다음은 2번 php 컴파일 후에 mbstring 모듈 추가 방법입니다.


1. 명령어/소스 확인

php 설치된 디렉토리의 bin 디렉토리에 phpize php-config 파일 확인.
php 소스 디렉토리의 ext/mbstring 소스 확인.


2. mbstring 모듈 설치

php 설치된 디렉토리 예: /usr/local/php
php 소스 디렉토리 예: /usr/local/src/php-5.2.17

# cd /usr/local/src/php-5.2.17/ext/mbstring
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make
# make install


3. mbsring 모듈 복사

# mkdir -p /usr/local/php/modules
# cp modules/* /usr/local/php/modules


4. 환경 설정 변경

: 확장 모듈 디렉토리 지정

# vi /usr/local/php/etc/php.ini
;extension_dir = "./"
extension_dir = "/usr/local/php/modules/"
extension = mbstring.so


5. 아파치 재시작

# /etc/init.d/httpd restart


6. phpinfo 확인

# php -i | grep mbstring


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥

[보안] ModSecurity

Server/CentOS / 2012/02/04 20:05

ModSecurity는 웹 서버에서 동작하는 오픈 소스 웹 방화벽(Web Application Firewall)입니다.

웹 공격에 대한 침입탐지 및 침입방지 기능을 하며, 클라이언트로부터 악의적인 접속요청이 발견되면
공격차단, 로깅 등 사전에 정의된 행위를 수행합니다.
(HTTP / HTTPS / REQUEST / GET / POST 필터링, 우회 방지 기술...)

ModSecurity 는 1.x 버전과 2.x 버전이 있습니다.
Apache 1.x 버전에서는 ModSecurity 1.x 버전만 설치 가능합니다.
Apache 2.x 버전에서는 ModSecurity 1.x 2.x 버전 둘 다 설치 가능합니다.


ModSecurity 1.x 버전 다운로드 / 설치

# wget http://www.modsecurity.org/download/modsecurity-apache_1.9.5.tar.gz
# tar zxvf modsecurity-apache_1.9.5.tar.gz
# cd modsecurity-apache_1.9.5
# cd apache2 <- apache1.x 버전의 경우 apache1 디렉토리로
# apxs -cia mod_security.c

module 적재 방식은 DSO이며, a 옵션 때문에 httpd.conf 파일에 module 이 추가되어 있습니다.
ModSecurity 의 module 과 rule 을 따로 관리하겠습니다.

한국인터넷진흥원에서 차단 샘플룰을 받을 수 있습니다. (http://toolbox.krcert.or.kr/)
- 1.9.x 버전 호스팅업체용
- 1.9.x 버전 중소기업용
- 2.x 버전 호스팅업체용
- 2.x 버전 중소기업용

# vi /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-modsecurity.conf

# vi /usr/local/httpd/conf/extra/httpd-modsecurity.conf
LoadModule security_module    modules/mod_security.so

<IfModule mod_security.c>
#1.9.x 버전 중소기업용 차단 샘플룰 삽입
</IfModule>

샘플 rule 을 살펴보고 환경에 맞게 수정하도록 합니다.

# SecFilterSignatureAction "deny,log,status:406"
SecFilterSignatureAction "pass,log"
# Rule에 필터된 로그를 확인하고, 필터에 걸린 요청들은 deny로 바꿔줍니다. (주석해제)

SecFilterScanPost On -> Off
# POST 작동이상으로 POST 메소드의 payload를 점검하는 옵션을 중지시켰습니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥

서버 접속자 끊기

Tip/Linux / 2012/02/02 23:58

1. 현재 접속자 확인

: who 명령으로 접속자를 확인합니다.

# w
 18:32:48 up 14 min,  2 users,  load average: 0.00, 0.33, 0.60
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
sally       tty1              -               18:22      10:27   0.00s    0.00s   -bash
root        pts/0    111.112.113.114    18:32       0.00s  0.03s    0.01s   w


2. 특정 접속자 KILL 

: skill 명령어로 TTY를 통해 PTY 장치에서 사용자 접속을 끊습니다.

# skill -KILL -v tty1
tty1     sally      3334 bash

# w
 18:46:16 up 27 min,  1 user,  load average: 0.00, 0.03, 0.24
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root        pts/0    111.112.113.114    18:32       0.00s  0.03s    0.00s   w
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 와닥
TAG skill, tty, Who