ConohaにOpenVPNをインストール

個人開発環境を構築するためにOpenVPNをインストールしてみた。

## 1\. 環境

*   OS: CentOS6.6(64bit) 
*   OpenVPN: 2.3.4

## 2\. OpenVPNインストール手順

### インストールに必要なモジュールをインストール

<pre>yum -y install openssl-devel lzo-devel pam-devel rpm-build
</pre>

### ダウンロード

<pre>wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.4.tar.gz
</pre>

### rpmパッケージを生成

<pre>rpmbuild -tb --clean openvpn-2.3.4.tar.gz
</pre>

### インストール

<pre>yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.4-1.x86_64.rpm
</pre>

## 3\. CA証明書、秘密鍵を生成

### ツールダウンロード

<pre>wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
</pre>

### 解凍

<pre>unzip master.zip
</pre>

### OpenVPNディレクトリへコピー

<pre>cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/
</pre>

### コピー先へ移動

<pre>cd /etc/openvpn/easyrsa3/
</pre>

### 初期化

<pre>./easyrsa init-pki
</pre>

### CA証明書作成

<pre>./easyrsa build-ca
</pre>

パスフレーズの入力を求めらるので任意の文字列を入力（2回入力を求められます。）  
この後サーバー証明書を作成する際に必要になるので控えておきましょう。

<pre>Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
</pre>

Common Name入力（任意入力）

<pre>Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
</pre>

### サーバー証明書作成

<pre>./easyrsa build-server-full server nopass
</pre>

CA証明書のパスフレーズを入力

<pre>Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:
</pre>

### DHパラメータ作成

<pre>./easyrsa gen-dh
</pre>

### TLS認証鍵作成

<pre>openvpn --genkey --secret /etc/openvpn/ta.key
</pre>

### 作成した証明書たちをOpenVPNディレクトリへコピー

<pre>cp pki/ca.crt /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/
cp pki/dh.pem /etc/openvpn/
</pre>

## 4\. OpenVPN設定

### OpenVPN設定ファイルのサンプルをコピー

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

### 設定ファイルの編集

<pre>vi /etc/openvpn/server.conf
</pre>

### 今回書き換えた箇所

<pre>#デフォルトだとdh1028.pemになっているので今回作成したファイル名に合わせる
dh dh.pem
#VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト)
server 10.8.0.0 255.255.255.0
#追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする)
push "route 192.168.1.0 255.255.255.0"
#「;」を削除してコメント解除
tls-auth ta.key 0
user nobody
group nobody
log-append  /var/log/openvpn.log
</pre>

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

<pre>vi /etc/openvpn/openvpn-startup

#!/bin/bash

/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内へのアクセスを許可
iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT
</pre>

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

<pre>vi /etc/openvpn/openvpn-shutdown

#!/bin/bash
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
}
target='INPUT'
delete
target='FORWARD'
delete
target='OUTPUT'
delete
</pre>

### 作成した2つのスクリプトに実行権限を付与

<pre>chmod +x /etc/openvpn/openvpn-startup
chmod +x /etc/openvpn/openvpn-shutdown
</pre>

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

<pre>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
}
</pre>

## 5\. iptable追加

<pre>iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p udp --dport 3389 -j ACCEPT
</pre>

### iptable設定を保存

<pre>sudo /etc/rc.d/init.d/iptables save
</pre>

# 5\. 起動

設定まで完了したらOpenVPNを起動します。

<pre>/etc/init.d/openvpn start
</pre>

再起動時に自動で起動するように以下のコマンドを実行

<pre>chkconfig openvpn on
</pre>

# 6\. その他

用途にもよりますが、自分の場合は外部から直接アクセスさせないクローズド環境を構築するためにOpenVPNをインストールしたので、 もし外部からのアクセスを拒否したい場合にはこちらの記事もどうぞ。 [特定のIPからのみSSH接続を許可][1]

 [1]: http://blog.sims625.com/%E7%89%B9%E5%AE%9A%E3%81%AEip%E3%81%8B%E3%82%89%E3%81%AE%E3%81%BFssh%E6%8E%A5%E7%B6%9A%E3%82%92%E8%A8%B1%E5%8F%AF/