個人開発環境を構築するために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接続を許可