2010년 7월 19일 월요일

openvpn인스톨

1. 패키지 다운로드
a. lzo 2.0 : http://www.oberhumer.com/opensource/lzo/download/
b. OpenSSL 0.9.7a : http://www.openssl.org/source
c. OpenVPN : http://www.openvpn.net/index.php/downloads.html

2. 패키지 설치
-lzo
cd /usr/local/src
tar xvzf lzo-xxxx.tgz
cd lzo-xxxx
./configure --prefix=/usr/local/lzo
make
make install

-openssl 0.9.7a
cd /usr/local/src
tar xvzf openssl-xxxx.tgz
cd openssl-xxxx.tgz
./config --prefix=/usr/local/openssl
make
make install

-openvpn
./configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/lzo/include --with-lzo-lib=/usr/local/lzo/lib --with-ssl-headers=/usr/local/openssl/include --with-ssl-lib=/usr/local/openssl/lib
make
make install

3.주요 디렉토리 생성
mkdir /usr/local/openvpn/plugin
mkdir /usr/local/openvpn/clientkeys
mkdir /usr/local/openvpn/keys
mkdir /usr/local/openvpn/log

4. plugin컴파일
cd /usr/local/openvpn/plugin/auth-pam
make
-생성된 openvpn-auth-pam.so를 openvpn이 설치된 디렉토리에 plugin 디렉토리로 복사
cp /usr/local/src/openvpn/plugin/auth-pam/openvpn-auth-pam.so /usr/local/openvpn/plugin/openvpn-auth-pam.so

5. openvpn설정파일 조정
샘플 openvpn.conf를 openvpn설치 폴더로 복사
cp /usr/local/src/sample-config-files/server.conf /usr/local/openvpn/openvpn.conf
b. 파일을 열어 수정
vi /usr/local/openvpn/openvpn.conf
--------------------------------------------------------------
local 210.xxx.xxx.xxx
port 1194
proto udp
dev tun

#실제로 서버에서 생성한 key파일 및 certificates에 대한 위치를 지정
ca /usr/local/openvpn/keys/ca.crt          
cert /usr/local/openvpn/keys/server.crt   
key /usr/local/openvpn/keys/server.key  # This file should be kept secret

#key negociation에 필요한 Diffie hellman parameter설정(기본은 1024나 보안을 위하여 2048로 변경)
dh /usr/local/openvpn/keys/dh2048.pem


#vpn 서브넷 마스크 구성

server 10.8.0.0 255.255.255.0


#접속허가된 IP들에 대한 list저장 파일 지정
ifconfig-pool-persist /usr/local/openvpn/ipp.txt


#client의 모든 traffic을 VPN을 통하도록 설정
push "redirect-gateway 10.8.0.1"
push "route 210.xxx.xxx.xxx 255.255.255.255"
push "route 10.8.0.0 255.255.255.0"
push "route 210.xxx.xxx.xxx 255.255.255.255"
push "route 118.xxx.xxx.xxx 255.255.255.255"


#동일한 키로 접속여부가 가능할수 있도록

duplicate-cn

# 10초에 한번씩 핑,120초동안 연락이 없을시 다운 간주
keepalive 10 120


#lzo가 가능하게 한다

comp-lzo

#동접
max-clients 100

#
persist-key
persist-tun


#현재 VPN의 접속상태를 기록하는 log위치 지정
status /usr/local/openvpn/log/openvpn-status.log


#VPN 데몬의 모든 로깅 파일 위치 지정

log         /usr/local/openvpn/log/openvpn.log


#

verb 3


#개인key를 개인들에게 배포하기가 힘들기 때문, auth-pam사용 접속
plugin /usr/local/openvpn/plugin/openvpn-auth-pam.so login
client-cert-not-required
username-as-common-name
---------------------------------------------------------------------

5. openssl설정 조정 및 필요한 key및 certificate생성
샘플 openssl.cnf를 복사 :
cp /usr/local/src/easy-rsa/openssl.cnf /usr/local/openvpn/
수정
vi /usr/local/openvpn/openvpn.conf
--------------------------------------------------------------
#기본적으론는 소스가 설치된 디렉토리에 작성을 하도록 되어 있었으므로 이를 수정
dir             = /usr/local/openvpn/keys          # Where everything is kept
--------------------------------------------------------------

6.환경변수 설정
export D=/usr/local/openvpn/
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=$D/keys
export KEY_SIZE=2048
export KEY_COUNTRY=KR
export KEY_PROVINCE=NA
export KEY_CITY=SEOUL
export KEY_ORG="abc inc"
export KEY_EMAIL="admin@hanbiro.jp"

7. openssl이 사용하는 중요 파일들 설정
touch /usr/local/openvpn/keys/index.txt -> index.txt파일 생성
echo 01 > /usr/local/openvpn/keys/serial -> serial파일을 만들면서 01로 초기화

8. 서버에서 사용할 key생성(*ca.crt의 경우 client로도 전달이 되어야 함)
/usr/local/openssl/bin/openssl req -days 365 -nodes -new -x509 -keyout /usr/local/openvpn/keys/ca.key -out /usr/local/openvpn/keys/ca.crt -config /usr/local/openvpn/openssl.cnf

/usr/local/openssl/bin/openssl req -days 365 -nodes -new -keyout /usr/local/openvpn/keys/server.key -out /usr/local/openvpn/keys/server.csr -extensions server -config /usr/local/openvpn/openssl.cnf

/usr/local/openssl/bin/openssl ca -days 365 -out /usr/local/openvpn/keys/server.crt -in /usr/local/openvpn/keys/server.csr -extensions server -config /usr/local/openvpn/openssl.cnf

/usr/local/openssl/bin/openssl dhparam -out /usr/local/openvpn/keys/dh2048.pem 2048

9. 서버 실행
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/openvpn.conf --daemon --mode server
라이브러리 에러 발생시
"AUTH-PAM: BACKGROUND: could not load PAM lib libpam.so" 에러가 발생함
ln -s /lib/libpam.so.0.75 /lib/libpam.so
libpam.so로 추가 link

10. VPN을 통한 VPN서버외 다른서버(internet상의 모든 서버 포함)로 접근을 위해 네트웍 세팅 변경
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
----------------------------
net.ipv4.ip_forward = 1
----------------------------
/etc/sysctl.conf를 변경한 후 적용
sysctl -p
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT

VPN에서 사용하는 tun device에 대해서 ipforward기능 on
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

다른 서버로 접근이 가능하도록 nat설정
iptables설정값을 시스템 재시작 때도 적용이 되도록 영구 저장
/sbin/service iptables save

11. 서버 작동 확인
-OpenVPN log
tail -f /usr/local/openvpn/openvpn.conf

-tcpdump를 통한 해당 port(1194) 패킷 모니터링
 tcpdump -n udp port 1194

-실제 traffic이 VPN을 통해서 나가고 있는지 연결된 client의 packet확인
 tcpdump -n host XXX.XXX.XXX.XXX

12. 서버 스타트/스톱/재시작 스크립트
vi /etc/init.d/openvpn
------------------------------------------------------------
#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Openvpn server.
#
# config:  /usr/local/openvpn/openvpn.conf


# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions
else
  exit 0
fi

# Avoid using root's TMPDIR
unset TMPDIR

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check that smb.conf exists.
[ -f /usr/local/openvpn/openvpn.conf ] || exit 0

# Check that we can write to it... so non-root users stop here
#[ -w /user/local/openvpn/openvpn.conf ] || exit 0

RETVAL=0
KIND="OpenVPN"

start() {
        echo -n $"Starting $KIND services: "
        daemon /usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/openvpn.conf --daemon --mode server
        RETVAL=$?
        [ $RETVAL -eq 0 ]
        echo ""
        return $RETVAL
}

stop() {
        echo -n $"Shutting down $KIND services: "
        killproc openvpn
        RETVAL=$?
        [ $RETVAL -eq 0 ]
        echo ""
        return $RETVAL
}

restart() {
        stop
        start
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?
--------------------------------------------------------------
chmod 700 /etc/init.d/openvpn

13.openvpn 클라이언트(윈도우용gui)
openvpn.ovpn 수정
--------------------------------------------------------------
remote  210.xxx.xxx.xxx  
dev tap
port 1194
tls-client
proto udp
comp-lzo
verb 4
nobind
ca ca.crt
cert server.crt
key server.key
pull
persist-local-ip
auth-user-pass

dev tun

--------------------------------------------------------------

config폴더 안에
위에서 수정한 openvpn.ovpn 파일과
서버에서 생성한 ca.crt 파일 server.crt파일 server.key파일을
config폴더 안에 넣고 연결을 시도한다.


기타. 방화벽 혹은 ipwrap등의 설정을 풀어준다.

프로세서의 확인
netstat -nap
udp포트의 확인

[출처] openvpn인스톨|작성자 양상

댓글 없음:

댓글 쓰기