最近、複数サーバーを管理していると、WinSCPとかでいちいち接続するのが億劫。 ファイルの取得・更新をSamba経由で行いたくなってきたのでVPN接続可能に。
CentOS6.4 に OpenVPN2.3.2 をインストールする際に、easy-rsa というディレクトリがなくはまった為、手順をメモ。
Yumでインストールで、リポジトリは epel を使用。レポジトリ追加は下記を参照。 http://www.tooyama.org/yum-addrepo-epel.html
<インストール>
yum -y install openvpn yum -y install easy-rsa ← これがわからずはまった・・・
<マスタCA証明書、鍵の生成>
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
cp -ai /usr/share/easy-rsa/2.0 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
<証明書の情報を編集>
vi vars
export KEY_COUNTRY=”JP”
export KEY_PROVINCE=”Saitama”
export KEY_CITY=”Tokorozawa”
export KEY_ORG=”tkn.jp”
export KEY_EMAIL=”xxxx@tkn.jp”
#export KEY_EMAIL=mail@host.domain
#export KEY_CN=changeme
#export KEY_NAME=changeme
#export KEY_OU=changeme
#export PKCS11_MODULE_PATH=changeme
#export PKCS11_PIN=1234
<証明書作成 http://lab.planetleaf.com/openvpn/ より転記>
# 環境変数設定
. ./vars
# keysディレクトリ初期化
./clean-all
# CA(認証局)作成 (ca.crt ca.key) 問い合わせは設定済みなので全てenter
./build-ca
# dh(Diffie Hellman)キー生成 (dh1024.pem)
./build-dh
# サーバーキー生成 (server.crt server.csr server.key)
# パスワードは空で問い合わせはyes
./build-key-server server
# tls-authで使用する共有静的鍵の生成 (ta.key)
openvpn –genkey –secret ta.key
# crl-verifyを設定するための初期CRL(廃止証明書リスト)ファイルの生成
# CRLファイルは運用中に修正可能だが、ヌルファイルを使用する事が出来ないため
# ダミー証明を作成、廃止して初期ファイルを作成する。
# 空パス、応答はyes ./build-key dmy ./revoke-full dmy
# revoke-full実行後に出てくる”error 23 at~”は廃止された事の証明
# (使えないのでエラーになっている)
<証明書ファイルをコピー>
cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn/
cp /etc/openvpn/easy-rsa/keys/crl.pem /etc/openvpn/
cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/ chown nobody:nobody /etc/openvpn/crl.pem
./build-key tkn mkdir -p ~/crt-temp cp ca.crt ~/crt-temp/
cp tkn.crt ~/crt-temp/
cp tkn.key ~/crt-temp/
cp ta.key ~/crt-temp/
<ネットワーク設定>
#openVpn
vi /etc/sysconfig/iptables
# 下記を「-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited 」の直前に追加
-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 1194 -j ACCEPT
<起動スクリプト設定>
vi /etc/openvpn/server.conf ← OpenVPN設定ファイル編集
—-
dev tun ← VPNインタフェースとしてTUNを指定(デフォルト)
server 10.8.0.0 255.255.255.0 ← VPNクライアント割当てアドレス範囲として10.8.0.0/24を指定(デフォルト)
;push “route 192.168.10.0 255.255.255.0”
;push “route 192.168.20.0 255.255.255.0”
push “route 192.168.1.0 255.255.255.0″ ← 追加(LAN(例:192.168.1.0/24)へのルートをVPNサーバー経由にする)
tls-auth ta.key 0 # This file is secret ← 行頭の;を削除してコメント解除(TLS認証有効化)
user nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)
group nobody ← 行頭の;を削除してコメント解除(OpenVPN実行権限を下げる)
log-append /var/log/openvpn.log ← 行頭の;を削除してコメント解除(ログを/var/log/openvpn.logに記録する)
management localhost 7505 ← 最終行へ追加(管理インタフェースの有効化※後述)
crl-verify crl.pem ← 最終行へ追加(証明書廃止リストの有効化)
<VPNインタフェース用ファイアウォール自動設定>
vi /etc/openvpn/openvpn-startup ← OpenVPN起動時実行スクリプト新規作成
——————————–
#!/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へのアクセスを許可する場合(任意)
# (例としてVPNクライアントから192.168.1.0/24へのアクセスを許可する場合)
# ※192.168.1.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること
#iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT
# VPNクライアントからLAN内特定マシンのみへのアクセスを許可する場合(任意)
# (例としてVPNクライアントから192.168.1.3へのアクセスを許可する場合)
# ※192.168.1.3側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること
#iptables -I FORWARD -i tun+ -d 192.168.1.3 -j ACCEPT
——————————–
chmod +x /etc/openvpn/openvpn-startup ← OpenVPN起動時実行スクリプトへ実行権限付加
<VPNインタフェース用ファイアウォール自動設定解除>
vi /etc/openvpn/openvpn-shutdown ← OpenVPN停止時実行スクリプト新規作成
——————————–
#!/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
——————————–
chmod +x /etc/openvpn/openvpn-shutdown ← OpenVPN停止時実行スクリプトへ実行権限付加
<OpenVPNログローテーション設定>
vi /etc/logrotate.d/openvpn ← OpenVPNログローテーション設定ファイル新規作成
——————————–
/var/log/openvpn.log
{
missingok notifempty sharedscripts postrotate /etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true endscript
}
——————————–
<OpenVPN起動(サーバー側)>
# OpenVPN起動
vi /etc/rc.d/init.d/openvpn ← OpenVPN起動スクリプト編集
——————————–
echo 1 > /proc/sys/net/ipv4/ip_forward ← 行頭の#を削除してコメント解除(パケット転送有効化) ——————————–
/etc/rc.d/init.d/openvpn start ← OpenVPN起動
openvpn を起動中: [ OK ]
chkconfig openvpn on ← OpenVPN自動起動設定
<Windowsクライアント側設定>
# ダウンロード http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.2-I001-x86_64.exe
C:\Program Files\OpenVPN\sample-config\client.ovpn を下記にコピー
C:\Program Files\OpenVPN\config\client.ovpn
# 設定ファイルを編集
C:\Program Files\OpenVPN\config\client.ovpn
remote 133.242.165.31 1194
cert tkn.crt
key tkn.key
ns-cert-type server
tls-auth ta.key 1
<CA証明書、クライアント証明書・秘密鍵、TLS認証鍵設置 ※クライアント側作業>
サーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easy-rsa/keys/tkn.crt)、クライアント秘密鍵(/etc/openvpn/easy-rsa/keys/tkn.key)、TLS認証鍵(/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へ格納する。
※CA証明書、クライアント証明書、クライアント秘密鍵、TLS認証鍵をクライアント側へ持ち込む際は、フロッピーディスク、USBメモリ等の可搬媒体経由または、SCPやSFTP等の暗号化されたネットワーク経由等の安全な経路で持ち込むこと
クライアントを実行し、タスクトレイのアイコンをクリックし接続
尚、WindowsのOpenVPNクライアントのアイコンが黄色から先に進まず、ログに何も書かれていない場合、openvpn.exeをタスクマネージャから削除し、再度起動したところ正常に動いたことがあったので、一応メモ。
以上
最近のコメント