-
設定完了後のフォルダ構成
# 共通ファイル配置場所 cd /etc/openvpn ls -l -rw------- 1 root root 1168 9月 3 15:59 2016 ca.crt:CA証明書(サーバとクライアントの両方で利用) -rw----r-- 1 root root 682 9月 3 16:31 2016 crl.pem:証明書廃止リスト -rw------- 1 root root 424 9月 3 16:26 2016 dh.pem:DHパラメータ drwxr-xr-x 4 root root 4096 9月 3 15:52 2016 easyrsa3:SSL/TLSプロトコルを利用した暗号化ツール -rwxr-xr-x 1 root root 530 9月 3 17:07 2016 openvpn-shutdown:OpenVPN停止時実行スクリプト -rwxr-xr-x 1 root root 670 9月 3 17:03 2016 openvpn-startup:OpenVPN起動時実行スクリプト -rw-r--r-- 1 root root 10593 9月 3 19:29 2016 server.conf:OpenVPN設定ファイル -rw------- 1 root root 4448 9月 3 16:03 2016 server.crt;サーバ証明書 -rw------- 1 root root 1704 9月 3 16:03 2016 server.key:サーバ秘密鍵 -rw------- 1 root root 636 9月 3 16:35 2016 ta.key:SSL/TLS認証鍵
# 証明書配置場所 cd /etc/openvpn/easyrsa3/pki/issued ls -l -rw------- 1 root root 4423 9月 3 16:27 2016 dmy.crt:クライアント(ダミー用)証明書(廃止済) -rw------- 1 root root 4432 9月 3 22:56 2016 クライアント名.crt:クライアント(iphoneやタブレット用)証明書 -rw------- 1 root root 4448 9月 3 16:03 2016 server.crt:サーバ証明書(共通ファイル配置場所にコピーしたもの)
# 秘密鍵配置場所 cd /etc/openvpn/easyrsa3/pki/private ls -l -rw------- 1 root root 1834 9月 3 15:58 2016 ca.key:CA秘密鍵 -rw------- 1 root root 1708 9月 3 16:27 2016 dmy.key:クライアント(ダミー用)秘密鍵(廃止済) -rw------- 1 root root 1704 9月 3 22:56 2016 クライアント名.key:クライアント(iphoneやタブレット用)秘密鍵 -rw------- 1 root root 1704 9月 3 16:02 2016 server.key:サーバ秘密鍵
【VPNサーバ】OpenVPNファイルウォール設定
-
OpenVPNファイアウォール設定
# OpenVPNファイアウォール設定 iptables -I INPUT 16 -p udp --dport 1194 -j ACCEPT service iptables save
# 設定内容の確認 # フィルタリングの確認(-t filter省略) iptables -L --line-numbers -n -v # アドレス変換の確認(-t nat) iptables -L -t nat --line-numbers -n -v
この設定ではiPhone5sからVPNサーバに接続できても
各サーバにPingが飛ばせませんでした。
どこか設定をミスしているのかも。
以下の設定を追加してみても変化なし。iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to 192.168.11.30 service iptables save
「/var/log/message」を確認するとiPhone5sからLZOのエラーが出ていたので、
そこを改善すれば直るのかは確認中です。
【VPNサーバ】OpenVPN設定(クライアント用)
-
OpenVPN設定(クライアント側パスワード有)
iPhone以外でパスワード有りでログインする場合、こっちを選択。# クライアント用の証明書作成 cd /etc/openvpn/easyrsa3/ ./easyrsa build-client-full クライアント名
下記内容を入力 Enter PEM pass phrase:クライアント用パスワードを入力 Verifying - Enter PEM pass phrase:クライアント用パスワードを入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
-
OpenVPN設定(クライアント側パスワード無)
iPhoneやパスワード無しでログインする場合、こっちを選択。# クライアント用の証明書作成 cd /etc/openvpn/easyrsa3/ ./easyrsa build-client-full クライアント名 nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
-
iPhone用のOpenVPN設定
WindowsのOpenVPNクライアントをインストールし、
インストール後、「インストールディレクトリ/OpenVPN/sample-config/client.ovpn」を編集する。
iPhone用は設定値のみとし、#のコメントも削除する。下記内容を確認/追加/変更 # TLSクライアントを指定 tls-client # VPNインターフェースとしてtunデバイスを指定 dev tun # プロトコルとしてudp proto udp # サーバ名とポートを指定 remote z-area.net 1194 # 名前解決試みのリトライ数(無限) resolv-retry infinite # ローカルポートをバインドしない nobind # 再接続時に鍵読み込み、tunデバイスオープン persist-key persist-tun # Man-in-the-Middle攻撃対策 remote-cert-tls server # LZO圧縮を利用 comp-lzo # OpenVPNのログ設定 verb 3 # 鍵の設定と思われるがいまいち不明 # しかしこの記述がないと接続できなかった key-direction 1
-
iPhone用の秘密鍵の変換
「X509」というエラーが出いてた場合、
iPhoneのOpenVPNクライアントアプリのTLS/SSLがPolarSSLを利用している場合があり、
OpenSSLと秘密鍵のフォーマットが異なり、接続できないことがある。
そこで以下のコマンドで秘密鍵を変換する。openssl rsa -in /etc/openvpn/easyrsa3/pki/private/クライアント名.key -out /etc/openvpn/easyrsa3/pki/private/クライアント名.key.polarssl
【VPNサーバ】OpenVPN設定
-
OpenVPN設定
# OpenVPN設定ファイルをOpenVPN設定ファイル格納ディレクトリへコピー cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/ # OpenVPN設定ファイルを編集 vi /etc/openvpn/server.conf
下記内容を確認/追加/変更 # VPNインターフェースとしてtunデバイスを指定 dev tun # プロトコルとしてudp、ポートは1194を指定 proto udp port 1194 # 認証局証明書、サーバー証明書、サーバー秘密鍵のファイルパスを指定 # 配置場所を変更している場合、変更する ca ca.crt cert server.crt key server.key # DHパラメータファイルのパスを指定 # 配置場所を変更している場合、変更する 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.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" push "route 192.168.11.0 255.255.255.0" # TLS認証有効化(行頭の;を削除し、コメント解除) tls-auth ta.key 0 # This file is secret # OpenVPN実行権限を下げる(行頭の;を削除し、コメント解除) user nobody group nobody # 起動時に鍵読み込み、tunデバイスオープン persist-key persist-tun # ログの設定 status /var/log/openvpn-status.log log-append /var/log/openvpn.log verb 3 # LZO圧縮を利用 comp-lzo # OpenVPNクライアントのIP固定設定を利用しない # 利用する場合、行頭の;を削除 ;client-config-dir ccd # 管理インタフェースの有効化(最終行に追加) # 証明書廃止リストの有効化(最終行に追加) management localhost 7505 crl-verify crl.pem # OpenVPN経由でSambaへのアクセスがエラーになる場合、最終行に追加 fragment 1280 mssfix 1280 link-mtu 1400
-
OpenVPN起動時実行スクリプト作成
# OpenVPN起動時実行スクリプト作成 vi /etc/openvpn/openvpn-startup
#!/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.11.0/24へのアクセスを許可する場合、 # 192.168.11.0/24側のファイアウォール等でVPNクライアント(10.8.0.0/24)からのアクセスを許可すること iptables -I FORWARD -i tun+ -d 192.168.11.0/24 -j ACCEPT
# OpenVPN起動時実行スクリプトへ実行権限付加 chmod +x /etc/openvpn/openvpn-startup
-
OpenVPN停止時実行スクリプト新規作成
# OpenVPN停止時実行スクリプト新規作成 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停止時実行スクリプトへ実行権限付加 chmod +x /etc/openvpn/openvpn-shutdown
-
OpenVPNログローテーション設定
# OpenVPNログローテーション設定ファイル新規作成 vi /etc/logrotate.d/openvpn
/var/log/openvpn.log { missingok notifempty sharedscripts postrotate systemctl restart openvpn 2>&1 > /dev/null || true endscript }
-
OpenVPN起動スクリプト変更
# OpenVPN起動スクリプト変更 vi /etc/rc.d/init.d/openvpn
下記内容を変更 # 行頭の#を削除し、コメント解除 # パケット転送を有効化する echo 1 > /proc/sys/net/ipv4/ip_forward
【VPNサーバ】OpenVPN導入
RaspberryPiがとうとう壊れしまったので、
NUCにOpenVPNを導入します。
導入はrootユーザで実施します。
-
OpenVPN導入
cd /usr/local/src # OpenVPNインストールに必要なパッケージをインストール yum -y install openssl-devel lzo-devel pam-devel # 最新の OpenVPN をダウンロードしてビルド # 最新版は公式サイトで確認 wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.10.tar.gz rpmbuild -tb --clean openvpn-2.3.10.tar.gz yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.10-1.x86_64.rpm rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* rm -f openvpn-2.3.10.tar.gz
# easyrsa をダウンロードして解凍 # OpenVPNをインストールするとOpenSSLを簡単に利用できるツール「easy-rsa」が # 「/usr/share/doc/openvpn/examples/easy-rsa/2.0」にインストールされるが、 # 最新版の3.0をダウンロードします。 wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ rm -rf easy-rsa-master/ rm -f master.zip
-
証明書初期化(OpenVPN導入後の1回のみ)
cd /etc/openvpn/easyrsa3/ ./easyrsa init-pki
-
CA証明書と秘密鍵作成
./easyrsa build-ca
下記内容を入力 Enter PEM pass phrase:任意のパスワードを入力 Verifying - Enter PEM pass phrase:任意のパスワードを再入力 Common Name (eg: your user, host, or server name) [Easy-RSA CA]:z-area.net
# CA証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/ca.crt /etc/openvpn/ # CA秘密鍵は以降のサーバ証明書・秘密鍵作成時、クライアント証明書・秘密鍵作成時のみ使用するため、コピー不要
-
サーバ証明書と秘密鍵作成
./easyrsa build-server-full server nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# サーバ証明書をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/issued/server.crt /etc/openvpn/ # サーバ秘密鍵をOpenVPN設定ファイル格納ディレクトリへコピー cp pki/private/server.key /etc/openvpn/
-
DH(Diffie Hellman)パラメータ作成
# DHパラメータ作成 ./easyrsa gen-dh # DHパラメータをOpenVPN設定ファイル格納ディレクトリへコピー cp pki/dh.pem /etc/openvpn/
-
証明書廃止リスト作成
証明書廃止リストは、実際にクライアント証明書を
作成してから廃止を行わないと作成できないので、
ダミーのクライアント証明書を一旦、作成と廃止することにより、
証明書廃止リストを作成する# ダミーのクライアント証明書作成 ./easyrsa build-client-full dmy nopass
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# ダミーのクライアント証明書廃止 ./easyrsa revoke dmy
下記内容を入力 Continue with revocation:yes Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# 証明書廃止リストを作成 ./easyrsa gen-crl
下記内容を入力 Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:CA秘密鍵のパスワードを入力
# 証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー cp pki/crl.pem /etc/openvpn/ # 証明書廃止リストへ参照権限付加 chmod o+r /etc/openvpn/crl.pem
-
TLS認証鍵作成
# TLS認証鍵作成 openvpn --genkey --secret /etc/openvpn/ta.key