2

ConohaにOpenVPNをインストール

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

1. 環境

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

2. OpenVPNインストール手順

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

yum -y install openssl-devel lzo-devel pam-devel rpm-build

ダウンロード

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

rpmパッケージを生成

rpmbuild -tb --clean openvpn-2.3.4.tar.gz

インストール

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

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

ツールダウンロード

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

解凍

unzip master.zip

OpenVPNディレクトリへコピー

cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/

コピー先へ移動

cd /etc/openvpn/easyrsa3/

初期化

./easyrsa init-pki

CA証明書作成

./easyrsa build-ca

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

Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Common Name入力(任意入力)

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

サーバー証明書作成

./easyrsa build-server-full server nopass

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

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

DHパラメータ作成

./easyrsa gen-dh

TLS認証鍵作成

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

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

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/

4. OpenVPN設定

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

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

設定ファイルの編集

vi /etc/openvpn/server.conf

今回書き換えた箇所

#デフォルトだと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

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

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

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

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

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

chmod +x /etc/openvpn/openvpn-startup
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
}

5. iptable追加

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -p udp --dport 3389 -j ACCEPT

iptable設定を保存

sudo /etc/rc.d/init.d/iptables save

5. 起動

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

/etc/init.d/openvpn start

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

chkconfig openvpn on

6. その他

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


しむ

普段はWEBエンジニアとして会社員+フリーで活動しています。 メイン言語はPHPでフロントよりバックエンドの方が得意です。 このブログでは自分が実装した内容を纏めて色々紹介していけたらと思います。

2 Comments

  1. Hi there! I know this is kind of off topic but I was wondering which blog platform are you using for this site? I’m getting sick and tired of WordPress because I’ve had problems with hackers and I’m looking at alternatives for another platform. I would be great if you could point me in the direction of a good platform.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です