OpenVPNのインストール

最近、複数サーバーを管理していると、WinSCPとかでいちいち接続するのが億劫。 ファイルの取得・更新をSamba経由で行いたくなってきたのでVPN接続可能に。

CentOS6.4 に OpenVPN2.3.2 をインストールする際に、easy-rsa というディレクトリがなくはまった為、手順をメモ。

Yumでインストールで、リポジトリは epel を使用。レポジトリ追加は下記を参照。 http://www.tooyama.org/yum-addrepo-epel.html

<インストール>

yum -y install openvpn yum -y install easy-rsa  ← これがわからずはまった・・・

<マスタCA証明書、鍵の生成>

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/

cp -ai /usr/share/easy-rsa/2.0 /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

<証明書の情報を編集>

vi vars

export KEY_COUNTRY=”JP”

export KEY_PROVINCE=”Saitama”

export KEY_CITY=”Tokorozawa”

export KEY_ORG=”tkn.jp”

export KEY_EMAIL=”xxxx@tkn.jp”

#export KEY_EMAIL=mail@host.domain

#export KEY_CN=changeme

#export KEY_NAME=changeme

#export KEY_OU=changeme

#export PKCS11_MODULE_PATH=changeme

#export PKCS11_PIN=1234

<証明書作成 http://lab.planetleaf.com/openvpn/ より転記>

# 環境変数設定

. ./vars

# keysディレクトリ初期化

./clean-all

# CA(認証局)作成 (ca.crt ca.key) 問い合わせは設定済みなので全てenter

./build-ca

# dh(Diffie Hellman)キー生成 (dh1024.pem)

./build-dh

# サーバーキー生成 (server.crt server.csr server.key)

# パスワードは空で問い合わせはyes

./build-key-server server

# tls-authで使用する共有静的鍵の生成 (ta.key)

openvpn –genkey –secret ta.key

# crl-verifyを設定するための初期CRL(廃止証明書リスト)ファイルの生成

# CRLファイルは運用中に修正可能だが、ヌルファイルを使用する事が出来ないため

# ダミー証明を作成、廃止して初期ファイルを作成する。

# 空パス、応答はyes ./build-key dmy ./revoke-full dmy

# revoke-full実行後に出てくる”error 23 at~”は廃止された事の証明

# (使えないのでエラーになっている)

<証明書ファイルをコピー>

cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/

cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn/

cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn/

cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn/

cp /etc/openvpn/easy-rsa/keys/crl.pem /etc/openvpn/

cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/ chown nobody:nobody /etc/openvpn/crl.pem

./build-key tkn mkdir -p ~/crt-temp cp ca.crt ~/crt-temp/

cp tkn.crt ~/crt-temp/

cp tkn.key ~/crt-temp/

cp ta.key ~/crt-temp/

<ネットワーク設定>

#openVpn

vi /etc/sysconfig/iptables

# 下記を「-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited 」の直前に追加

-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 1194 -j ACCEPT

<起動スクリプト設定>

vi /etc/openvpn/server.conf ← OpenVPN設定ファイル編集

—-

dev tun ← VPNインタフェースとしてTUNを指定(デフォルト)

server 10.8.0.0 255.255.255.0 ← VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト)

;push “route 192.168.10.0 255.255.255.0”

;push “route 192.168.20.0 255.255.255.0”

push “route 192.168.1.0 255.255.255.0″ ← 追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする)

tls-auth ta.key 0 # This file is secret ← 行頭の;を削除してコメント解除(TLS認証有効化)

user nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)

group nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)

log-append /var/log/openvpn.log ← 行頭の;を削除してコメント解除(ログを/var/log/openvpn.logに記録する)

management localhost 7505 ← 最終行へ追加(管理インタフェースの有効化※後述)

crl-verify crl.pem ← 最終行へ追加(証明書廃止リストの有効化)

<VPNインタフェース用ファイアウォール自動設定>

vi /etc/openvpn/openvpn-startup ← OpenVPN起動時実行スクリプト新規作成

——————————–

#!/bin/bash

# VPNインタフェースiptablesルール削除スクリプト実行※必須

/etc/openvpn/openvpn-shutdown

# VPNサーバーからの送信を許可※必須

iptables -I OUTPUT -o tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT

# VPNクライアントからVPNサーバーへのアクセスを許可する場合

iptables -I INPUT -i tun+ -j ACCEPT

# VPNクライアントからLANへのアクセスを許可する場合(任意)

# (例としてVPNクライアントから192.168.1.0/24へのアクセスを許可する場合)

# ※192.168.1.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること

#iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT

# VPNクライアントからLAN内特定マシンのみへのアクセスを許可する場合(任意)

# (例としてVPNクライアントから192.168.1.3へのアクセスを許可する場合)

# ※192.168.1.3側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること

#iptables -I FORWARD -i tun+ -d 192.168.1.3 -j ACCEPT

——————————–

chmod +x /etc/openvpn/openvpn-startup ← OpenVPN起動時実行スクリプトへ実行権限付加

<VPNインタフェース用ファイアウォール自動設定解除>

vi /etc/openvpn/openvpn-shutdown ← OpenVPN停止時実行スクリプト新規作成

——————————–

#!/bin/bash

# VPNインタフェース(tun+)用iptablesルール削除関数
delete() { rule_number=`iptables -L $target –line-numbers -n -v|grep tun.|awk ‘{print $1}’|sort -r` for num in $rule_number do iptables -D $target $num done }

# VPNインタフェース(tun+)用iptables受信ルール削除
target=’INPUT’ delete

# VPNインタフェース(tun+)用iptables転送ルール削除
target=’FORWARD’ delete

# VPNインタフェース(tun+)用iptables送信ルール削除
target=’OUTPUT’ delete

——————————–

chmod +x /etc/openvpn/openvpn-shutdown ← OpenVPN停止時実行スクリプトへ実行権限付加

<OpenVPNログローテーション設定>

vi /etc/logrotate.d/openvpn ← OpenVPNログローテーション設定ファイル新規作成

——————————–

/var/log/openvpn.log
{
missingok notifempty sharedscripts postrotate /etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true endscript
}

——————————–

<OpenVPN起動(サーバー側)>

# OpenVPN起動

vi /etc/rc.d/init.d/openvpn ← OpenVPN起動スクリプト編集

——————————–

echo 1 > /proc/sys/net/ipv4/ip_forward ← 行頭の#を削除してコメント解除(パケット転送有効化) ——————————–

/etc/rc.d/init.d/openvpn start ← OpenVPN起動

openvpn を起動中: [ OK ]

chkconfig openvpn on ← OpenVPN自動起動設定

<Windowsクライアント側設定>

# ダウンロード http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.2-I001-x86_64.exe

C:\Program Files\OpenVPN\sample-config\client.ovpn を下記にコピー

C:\Program Files\OpenVPN\config\client.ovpn

# 設定ファイルを編集

C:\Program Files\OpenVPN\config\client.ovpn

remote 133.242.165.31 1194

cert tkn.crt

key tkn.key

ns-cert-type server

tls-auth ta.key 1

<CA証明書、クライアント証明書・秘密鍵、TLS認証鍵設置 ※クライアント側作業>

サーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easy-rsa/keys/tkn.crt)、クライアント秘密鍵(/etc/openvpn/easy-rsa/keys/tkn.key)、TLS認証鍵(/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へ格納する。

※CA証明書、クライアント証明書、クライアント秘密鍵、TLS認証鍵をクライアント側へ持ち込む際は、フロッピーディスク、USBメモリ等の可搬媒体経由または、SCPやSFTP等の暗号化されたネットワーク経由等の安全な経路で持ち込むこと

クライアントを実行し、タスクトレイのアイコンをクリックし接続

尚、WindowsのOpenVPNクライアントのアイコンが黄色から先に進まず、ログに何も書かれていない場合、openvpn.exeをタスクマネージャから削除し、再度起動したところ正常に動いたことがあったので、一応メモ。

以上

276 comments to OpenVPNのインストール