3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Linux)OpenVPN設定

(Linux)OpenVPNのインストール でCentOS5でのOpenVPNのインストールを行いましたが、ここからは実際に設定に入ります。

CA証明書、秘密鍵作成

まず証明書、鍵作成用ディレクトリをコピーし etc/openvpn/easy-rsa に移動後、各スクリプトへ実行権限付加を付加します。

# cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/ /etc/openvpn/easy-rsa

# cd /etc/openvpn/easy-rsa

# chmod +x *

CA証明書、秘密鍵作成のための環境変数設定ファイルを編集します。

# vi /etc/openvpn/easy-rsa/vars

最下部に住所やサーバ名、管理者メールアドレス等を設定する環境変数があるので任意の値に変更します。

export KEY_COUNTRY="JP"

export KEY_PROVINCE="Tokyo"

export KEY_CITY="Hatioji"

export KEY_ORG="hogehoge.com" ←サーバー名

export KEY_EMAIL="admin@hogehoge.com" ←管理者メールアドレス

上記で設定した環境変数を反映します。

# source vars

証明書、鍵作成先の初期化を行います。(OpenVPNインストール後の初回のみ必要みたいです。)

# /etc/openvpn/easy-rsa/clean-all

CA証明書、秘密鍵の作成を行います。

# /etc/openvpn/easy-rsa/build-ca

Generating a 1024 bit RSA private key

................++++++

..............++++++

writing new private key to '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.

-----

↓vi varsで設定した値がデフォルトで入るはずなので、Enterを連打します。

Country Name (2 letter code) [JP]:

State or Province Name (full name) [Tokyo]:

Locality Name (eg, city) [Hatioji]:

Organization Name (eg, company) [hogehoge.com]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) [hogehoge CA]:

Email Address [admin@hogehoge.com]:

これで、CA証明書、CA秘密鍵が作成されました。

CA証明書をOpenVPN設定ファイル格納ディレクトリへコピーします。

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

サーバー証明書秘密鍵作成

下記コマンドでサーバ証明書秘密鍵が作成できます。

# /etc/openvpn/easy-rsa/build-key-server server

....

↓またvi varsで設定した値がデフォルトで入るはずなので、Enterを連打します。

Country Name (2 letter code) [JP]:

State or Province Name (full name) [Tokyo]:

Locality Name (eg, city) [Hatioji]:

Organization Name (eg, company) [hogehoge.com]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) [server]:

Email Address [admin@hogehoge.com]:

....

↓y を連打します。

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

サーバ証明書OpenVPN設定ファイル格納ディレクトリへコピーします。

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

サーバ証明書OpenVPN設定ファイル格納ディレクトリへコピーします。

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

DH(Diffie Hellman)パラメータ作成

下記コマンドでパラメータを作成し、OpenVPN設定ファイル格納ディレクトリへコピーします。(ちょっと時間かかります。)

# /etc/openvpn/easy-rsa/build-dh

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

証明書廃止リスト作成

これが何を意味するのかよくわかりませんが、とりあえず下記のようにコマンドを打っていけばいいようです。

# /etc/openvpn/easy-rsa/build-key dmy

またvi varsで設定した値がデフォルトで入るはずなので、Enterを連打します。

その後、yes/no聞いてくるので、yを選びます。

vi /etc/openvpn/easy-rsa/openssl.cnf を開き、末尾の下記の行をコメントアウトします。

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

#[ pkcs11_section ]

#engine_id = pkcs11

#dynamic_path = /usr/lib/engines/engine_pkcs11.so

#MODULE_PATH = $ENV::PKCS11_MODULE_PATH

#PIN = $ENV::PKCS11_PIN

#init = 0

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

そして、下記コマンドを実行します。

# /etc/openvpn/easy-rsa/revoke-full dmy

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

OpenVPN設定

TLS認証鍵をOpenVPN設定ファイル格納ディレクトリへ作成

# openvpn --genkey --secret /etc/openvpn/ta.key

OpenVPN設定ファイルをサンプルよりコピー

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

↓設定ファイル編集

#vi /etc/openvpn/server.conf

設定ファイルで変更したのは下記の項目です。

port 9999 ←待ち受けポート変更

proto tcpudpを;で無効化し、tcpを使うように。

server 10.8.1.0 255.255.255.0 ←サーバ側からクライアントに割り当てるIPアドレス範囲指定。

tls-auth ta.key 0 ←コメントアウト除去 TLS認証有効化

user nobody ←コメントアウト除去

group nobody ←コメントアウト除去

log-append openvpn.log ←コメントアウト除去

management localhost 7505 ←管理インターフェイス有効化

crl-verify crl.pem ←証明書廃止リストの有効化

VPNインタフェース用ファイアウォール設定用スクリプト作成(OpenVPN起動時)

# vi /etc/openvpn/openvpn-startup

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

#!/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へのアクセスを許可(192.168.11.0/24へのアクセスを許可)

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

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

OpenVPN起動時スクリプトへ実行権限付加

# chmod +x /etc/openvpn/openvpn-startup 

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

# vi /etc/openvpn/openvpn-shutdown

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

#!/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

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

OpenVPN停止時スクリプトへ実行権限付加

# chmod +x /etc/openvpn/openvpn-shutdown

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

vi /etc/logrotate.d/openvpn

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

/var/log/openvpn.log {

missingok

notifempty

sharedscripts

postrotate

/etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true

endscript

}

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

OpenVPN起動(サーバー側)

↓起動スクリプト編集

vi /etc/rc.d/init.d/openvpn

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

コメントアウト除去

echo 1 > /proc/sys/net/ipv4/ip_forward

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

OpenVPN起動

# /etc/rc.d/init.d/openvpn start

openvpn を起動中: [ OK ]

OpenVPN自動起動設定

chkconfig openvpn on

OpenVPN設定(クライアント側)

↓クライアント証明書・秘密鍵作成(サーバー側で作業)

# cd /etc/openvpn/easy-rsa/

# source vars

# /etc/openvpn/easy-rsa/build-key-pass client1

Enter PEM pass phrase: ←任意のパスワードを入力

Verifying - Enter PEM pass phrase: ←任意のパスワードを入力

後は空Enterでデフォルト値を使います。最後に yes/no 聞いてきたらyを押下。

サーバ上の下記ファイルをWindowsクライアントの C:\Program Files\OpenVPN\config に格納します。

/etc/openvpn/ca.crt (CA証明書)

/etc/openvpn/easy-rsa/keys/client1.crt (クライアント証明書)

/etc/openvpn/easy-rsa/keys/client1.key (クライアント秘密鍵)

/etc/openvpn/ta.key (TLS認証鍵)

クライアントにOpenVPN Window版をインストールします。

インストール後、C:\Program Files\OpenVPN\sample-config\client.ovpn を C:\Program Files\OpenVPN\config へコピーします。

コピーした設定ファイルをテキストエディタで、下記のように編集します。

remote サーバ名 ポート番号 ←VPNサーバを指定

cert client1.crt ←サーバで作成したクライアント証明書ファイルを指定

key client1.key ←サーバで作成したクライアント秘密鍵ファイルを指定

ns-cert-type server ←コメント解除

tls-auth ta.key 1 ←コメント解除

設定ファイルを保存し、後はスタートメニューより、OpenVPNを起動します。

タスクバーにアイコンでるのでそこから接続を押下するとパスワードを要求されるので、クライアント証明書・秘密鍵作成時に設定したパスワードを入力すると接続が完了します。

なお、注意点として、クライアント証明書・秘密鍵はクライアント毎に作成しないといけません。

同じ証明書・秘密鍵を複数のクライアントで用いた場合、うまく接続できません。

OpenVPN,結構ややこしいです。。。