(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
# 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インストール後の初回のみ必要みたいです。)
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設定ファイル格納ディレクトリへコピーします。
# /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設定ファイル格納ディレクトリへコピーします。
サーバ証明書をOpenVPN設定ファイル格納ディレクトリへコピーします。
DH(Diffie Hellman)パラメータ作成
下記コマンドでパラメータを作成し、OpenVPN設定ファイル格納ディレクトリへコピーします。(ちょっと時間かかります。)
証明書廃止リスト作成
これが何を意味するのかよくわかりませんが、とりあえず下記のようにコマンドを打っていけばいいようです。
また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
----------------------------
そして、下記コマンドを実行します。
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 tcp ←udpを;で無効化し、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ルール削除スクリプト実行
# 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
-------------------------------------
# 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ログローテーション設定
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 ]
chkconfig openvpn on
OpenVPN設定(クライアント側)
↓クライアント証明書・秘密鍵作成(サーバー側で作業)
# 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 (クライアント秘密鍵)
クライアントに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,結構ややこしいです。。。