VPNサーバー構築(OpenVPN)

最終更新日: 2016.05.01

<<トップページ <<新着情報 <<リンク集 <<サイト内検索 <<管理人へメール <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

OpenVPN(OpenVPN 2.0 HOWTO 日本語訳)を使用してSSL-VPN方式のインターネットVPNを構築し、外部からOpenVPN経由でLANに安全に接続できるようにする。なお、VPNクライアントはWindowsマシンおよびiPhoneとする。

【前提とするネットワークイメージ】


【前提とするネットワーク条件】
LANネットワークアドレス:192.168.1.0/24
VPNサーバーIPアドレス:192.168.1.30
VPN用仮想ネットワークアドレス:10.8.0.0/24※
VPNサーバー仮想IPアドレス:10.8.0.1※

※VPNでは仮想のプライベートIPアドレスをサーバー/クライアントともに割当てて、その仮想アドレスでVPN通信を行うが、ここでは、元々のLAN内プライベートIPアドレス(192.168.1.X)を指定して対象ホストへアクセスできるようにする。


■OpenVPNインストール(サーバー側)

[root@centos ~]# yum -y install openssl-devel lzo-devel pam-devel ← OpenVPNインストールに必要なパッケージをインストール

[root@centos ~]# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.4.tar.gz ← OpenVPNダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos ~]# rpmbuild -tb --clean openvpn-2.3.4.tar.gz ← OpenVPNのRPMパッケージ生成

[root@centos ~]# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.4-1.x86_64.rpm ← 生成したOpenVPNのRPMパッケージをインストール

[root@centos ~]# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* ← 生成したOpenVPNのRPMパッケージを削除

[root@centos ~]# rm -f openvpn-2.3.4.tar.gz ← ダウンロードしたファイルを削除

[root@centos ~]# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip ← easy-rsaダウンロード

[root@centos ~]# unzip master.zip ← easy-rsa解凍

[root@centos ~]# cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ ← easyrsa3を所定のディレクトリへコピー

[root@centos ~]# rm -rf easy-rsa-master/ ← 解凍先ディレクトリを削除

[root@centos ~]# rm -f master.zip ← ダウンロードしたファイルを削除

■OpenVPN設定(サーバー側)

(1)CA証明書・秘密鍵作成
[root@centos ~]# cd /etc/openvpn/easyrsa3/ ← easyrsa3ディレクトリへ移動

[root@centos easyrsa3]# ./easyrsa init-pki ← 初期化※OpenVPNインストール後最初の1回のみ

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easyrsa3/pki

[root@centos easyrsa3]# ./easyrsa build-ca ← CA証明書・秘密鍵作成
Generating a 2048 bit RSA private key
......................................................+++
........................................+++
writing new private key to '/root/easy-rsa-master/easyrsa3/pki/private/ca.key'
Enter PEM pass phrase: ← 任意のパスフレーズを応答
Verifying - Enter PEM pass phrase: ← 任意のパスフレーズを応答(確認)
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:centossrv.com ← サイト名(例:centossrv.com)を応答

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/root/easy-rsa-master/easyrsa3/pki/ca.crt

[root@centos easyrsa3]# cp pki/ca.crt /etc/openvpn/ ← CA証明書をOpenVPN設定ファイル格納ディレクトリへコピー
※CA秘密鍵は後述するサーバー証明書・秘密鍵作成時、クライアント証明書・秘密鍵作成時のみ使用するのでコピー不要

(2)サーバー証明書・秘密鍵作成
[root@centos easyrsa3]# ./easyrsa build-server-full server nopass ← サーバー証明書・秘密鍵作成
Generating a 2048 bit RSA private key
.......+++
.....+++
writing new private key to '/etc/openvpn/easyrsa3/pki/private/server.key'
-----
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ← CA秘密鍵のパスフレーズを応答
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'server'
Certificate is to be certified until Jul 10 12:48:56 2024 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

[root@centos easyrsa3]# cp pki/issued/server.crt /etc/openvpn/ ← サーバー証明書をOpenVPN設定ファイル格納ディレクトリへコピー

[root@centos easyrsa3]# cp pki/private/server.key /etc/openvpn/ ← サーバー秘密鍵をOpenVPN設定ファイル格納ディレクトリへコピー

(3)DH(Diffie Hellman)パラメータ作成
[root@centos easyrsa3]# ./easyrsa gen-dh ← DHパラメータ作成
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
〜
DH parameters of size 2048 created at /root/easy-rsa-master/easyrsa3/pki/dh.pem
※時間がかかる場合がある

[root@centos easyrsa3]# cp pki/dh.pem /etc/openvpn/ ← DHパラメータをOpenVPN設定ファイル格納ディレクトリへコピー

(4)証明書廃止リスト作成
将来的にクライアント証明書を廃止できるようにするため、証明書廃止リストを作成する。
※証明書廃止リストは、実際にクライアント証明書を作成してから廃止を行わないと作成できないので、ダミーのクライアント証明書をいったん作成&廃止することにより証明書廃止リストを作成する
[root@centos easyrsa3]# ./easyrsa build-client-full dmy nopass ← ダミーのクライアント証明書作成
Generating a 2048 bit RSA private key
.............................................+++
...........+++
writing new private key to '/etc/openvpn/easyrsa3/pki/private/dmy.key'
-----
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ← CA秘密鍵のパスフレーズを応答
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'dmy'
Certificate is to be certified until Jul 10 12:52:28 2024 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

[root@centos easyrsa3]# ./easyrsa revoke dmy ← ダミーのクライアント証明書廃止


Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = dmy


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes ← yes応答
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:
Revoking Certificate 03.
Data Base Updated

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

[root@centos easyrsa3]# ./easyrsa gen-crl ← 証明書廃止リストを作成
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:

An updated CRL has been created.
CRL file: /etc/openvpn/easyrsa3/pki/crl.pem

[root@centos easyrsa3]# /bin/cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/ ← 証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー

[root@centos easyrsa3]# chmod o+r /etc/openvpn/crl.pem ← 証明書廃止リストへ参照権限付加

[root@centos easyrsa3]# cd ← easyrsa3ディレクトリを抜ける

(5)OpenVPN設定
[root@centos ~]# openvpn --genkey --secret /etc/openvpn/ta.key ← TLS認証鍵をOpenVPN設定ファイル格納ディレクトリへ作成

[root@centos ~]# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/ ← OpenVPN設定ファイルをサンプルよりコピー

[root@centos ~]# vi /etc/openvpn/server.conf ← OpenVPN設定ファイル編集
dev tun ← VPNインタフェースとしてTUNを指定(デフォルト)

dh dh.pem ← DHパラメータファイル名を指定

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 ← 最終行へ追加(証明書廃止リストの有効化)

最終行へ以下を追加(OpenVPN経由でSambaへのアクセスがエラーになる場合)
fragment 1280
mssfix 1280
link-mtu 1400

(6)VPNインタフェース用ファイアウォール自動設定
[root@centos ~]# 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

[root@centos ~]# chmod +x /etc/openvpn/openvpn-startup ← OpenVPN起動時実行スクリプトへ実行権限付加

(7)VPNインタフェース用ファイアウォール自動設定解除
[root@centos ~]# 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

[root@centos ~]# chmod +x /etc/openvpn/openvpn-shutdown ← OpenVPN停止時実行スクリプトへ実行権限付加

(8)OpenVPNログローテーション設定
[root@centos ~]# vi /etc/logrotate.d/openvpn ← OpenVPNログローテーション設定ファイル新規作成
/var/log/openvpn.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl restart openvpn 2>&1 > /dev/null || true
    endscript
}

■OpenVPN起動(サーバー側)

(1)OpenVPN起動
[root@centos ~]# vi /etc/rc.d/init.d/openvpn ← OpenVPN起動スクリプト編集
        echo 1 > /proc/sys/net/ipv4/ip_forward ← 行頭の#を削除してコメント解除(パケット転送有効化)

[root@centos ~]# /etc/rc.d/init.d/openvpn start ← OpenVPN起動

[root@centos ~]# chkconfig openvpn on ← OpenVPN自動起動設定

(2)ファイアウォール設定
ルーター側で、UDPの1194番ポートへのアクセスをサーバーに転送するようにする。
ルーターがLinuxの場合のファイアウォール設定はこちらを参照

サーバー側で、UDPの1194番ポートへのアクセスを許可するようにする。
ファイアウォール設定はこちらを参照

サーバー側で、VPNインタフェース用ファイアウォールを設定する。
ファイアウォール設定はこちらを参照

(3)LANゲートウェイにVPNサーバーを追加※VPNサーバーがLANゲートウェイ(ルーター)以外の場合
ルーター側で、宛先がVPN(例:10.8.0.0/24)のアクセスはVPNサーバー(例:192.168.1.30)を経由するようにルートを追加する。
※ルーターがLinuxの場合は以下を参照
[root@Router ~]# echo "any net 10.8.0.0 netmask 255.255.255.0 gw 192.168.1.30" >> /etc/sysconfig/static-routes
 ← 10.8.0.0/24向けルートを192.168.1.30とする設定を追加

[root@Router ~]# /etc/rc.d/init.d/network reload ← ネットワーク再起動(上記ルート設定反映)

[root@Router ~]# route ← ルート追加確認
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
・・・・
10.8.0.0        192.168.1.30    255.255.255.0   UG    0      0        0 eth0 ← 追加されたルート
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
・・・・


■OpenVPNインストール(クライアント側)

(1)OpenVPNインストール(Windows、iPhone共通)
OpenVPNダウンロードページから「Installer」をダウンロードしてインストールする。
※クライアントがiPhoneの場合でも、iPhoneにインポートするOpenVPNクライアント設定ファイルを入手するため、WindowsにOpenVPNをインストールする

(2)OpenVPNインストール(iPhoneの場合)
OpenVPN Connectをインストールする。

■OpenVPN設定(クライアント側)

(1)クライアント証明書・秘密鍵作成(パスフレーズ認証あり)※サーバー側作業
iPhoneの場合はOpenVPN Connectがパスフレーズ認証未対応のため次項の「(2)クライアント証明書・秘密鍵作成(パスフレーズ認証なし)」を行う。
[root@centos ~]# cd /etc/openvpn/easyrsa3/ ← easyrsa3ディレクトリへ移動

[root@centos easyrsa3]# ./easyrsa build-client-full client1 ← クライアント名client1※のクライアント証明書・秘密鍵(パスフレーズ認証あり)作成
※クライアント名は一意であること=既に作成済のクライアント名と重複しないこと
Generating a 2048 bit RSA private key
.............+++
......................+++
writing new private key to '/etc/openvpn/easyrsa3/pki/private/client1.key'
Enter PEM pass phrase: ← 任意のパスフレーズ応答
Verifying - Enter PEM pass phrase: ← 任意のパスフレーズ応答(確認)
-----
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ← CA秘密鍵のパスフレーズを応答
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'client1'
Certificate is to be certified until Aug 16 08:18:16 2024 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

(2)クライアント証明書・秘密鍵作成(パスフレーズ認証なし)※サーバー側作業
iPhoneの場合はOpenVPN Connectがパスフレーズ認証未対応のためパスフレーズ認証なしのクライアント証明書・秘密鍵を作成する。
[root@centos ~]# cd /etc/openvpn/easyrsa3/ ← easyrsa3ディレクトリへ移動

[root@centos easyrsa3]# ./easyrsa build-client-full client1 nopass ← クライアント名client1※のクライアント証明書・秘密鍵(パスフレーズ認証なし)作成
※クライアント名は一意であること=既に作成済のクライアント名と重複しないこと
Generating a 2048 bit RSA private key
.............................................+++
...........+++
writing new private key to '/etc/openvpn/easyrsa3/pki/private/client1.key'
-----
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ← CA秘密鍵のパスフレーズを応答
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :PRINTABLE:'client1'
Certificate is to be certified until Jul 10 12:52:28 2024 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

(3)OpenVPN設定※クライアント側作業
クライアント設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へコピーする。

クライアント設定ファイル(C:\Program Files\OpenVPN\config\client.ovpn)編集
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
;remote my-server-2 1194
remote centossrv.com 1194 ← VPNサーバー名を指定

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca ca.crt
cert client1.crt ← クライアント証明書ファイル名を指定
key client1.key ← クライアント秘密鍵ファイル名を指定

# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server".  This is an
# important precaution to protect against
# a potential attack discussed here:
#  http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server".  The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server
remote-cert-tls server ← 追加("Man-in-the-Middle"攻撃対策)

# If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth ta.key 1 ← 行頭の;を削除してコメント解除(TLS認証有効化)

最終行へ以下を追加(OpenVPN経由でSambaへのアクセスがエラーになる場合)
fragment 1280
mssfix 1280
link-mtu 1400

(4)CA証明書、クライアント証明書・秘密鍵、TLS認証鍵設置(Windowsの場合)※クライアント側作業
サーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easyrsa3/pki/issued/client1.crt)、クライアント秘密鍵(/etc/openvpn/easyrsa3/pki/private/client1.key)、TLS認証鍵(/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へ格納する。
※CA証明書、クライアント証明書、クライアント秘密鍵、TLS認証鍵をクライアント側へ持ち込む際は、フロッピーディスク、USBメモリ等の可搬媒体経由または、SCPやSFTP等の暗号化されたネットワーク経由等の安全な経路で持ち込むこと

(5)OpenVPNクライアント設定ファイル、CA証明書、クライアント証明書・秘密鍵、TLS認証鍵設置(iPhoneの場合)※クライアント側作業
サーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easyrsa3/pki/issued/client1.crt)、クライアント秘密鍵(/etc/openvpn/easyrsa3/pki/private/client1.key)、TLS認証鍵(/etc/openvpn/ta.key)をいったんWindows上へダウンロードし、iTunes経由でiPhoneへ格納する。
クライアント側からOpenVPNクライアント設定ファイル(C:\Program Files\OpenVPN\config\client.ovpn)をiTunes経由でiPhoneへ格納する。

■OpenVPN確認※クライアント側作業

(1)VPN接続
【Windows7の場合】
スタートメニュー−「すべてのプログラム」−「OpenVPN」−「OpenVPN GUI」を右クリックして「プロパティ」−「互換性」タブ−「管理者としてこのプログラムを実行する」をチェックして「OK」※インストール後最初の1回のみ
スタートメニュー−「すべてのプログラム」−「OpenVPN」−「OpenVPN GUI」をクリック

タスクバー上のOpenVPN GUIアイコンをダブルクリック

パスフレーズ応答※クライアント証明書作成時に応答したパスフレーズ

OpenVPN GUIアイコンが黄色(接続中状態)⇒緑色(接続済状態)表示になることを確認

【iPhoneの場合】
OpenVPNアプリを起動



+ボタンを押下してプロファイルを読み込む




○をスライドしてVPNサーバーへ接続する




Connectedとなって上部にVPNと表示されることを確認

(2)VPN疎通確認
【Windowsの場合】
【VPNサーバーへアクセスを許可している場合】
C:\>ping 192.168.1.30 ← VPNクライアントからVPNサーバー(例:192.168.1.30)へpingが通ること

Pinging 192.168.1.30 with 32 bytes of data:

Reply from 192.168.1.30: bytes=32 time=283ms TTL=64
Reply from 192.168.1.30: bytes=32 time=272ms TTL=64
Reply from 192.168.1.30: bytes=32 time=266ms TTL=64
Reply from 192.168.1.30: bytes=32 time=271ms TTL=64

Ping statistics for 192.168.1.30:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 266ms, Maximum = 283ms, Average = 273ms

【LANへアクセスを許可している場合】
C:\>ping 192.168.1.3 ← VPNクライアントからLAN内他サーバー(例:192.168.1.3)へpingが通ること

Pinging 192.168.1.3 with 32 bytes of data:

Reply from 192.168.1.3: bytes=32 time=1485ms TTL=62
Reply from 192.168.1.3: bytes=32 time=262ms TTL=62
Reply from 192.168.1.3: bytes=32 time=255ms TTL=62
Reply from 192.168.1.3: bytes=32 time=260ms TTL=62

Ping statistics for 192.168.1.3:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 255ms, Maximum = 1485ms, Average = 565ms

【iPhoneの場合】
Network Ping Liteをインストールして起動する



Ping




【VPNサーバーへアクセスを許可している場合】
VPNサーバーのプライベートIPアドレス(例:192.168.1.3)を入力して「Start」




【LANへアクセスを許可している場合】
LAN内他サーバーのプライベートIPアドレス(例:192.168.1.5)を入力して「Start」

(3)VPN切断
【Windowsの場合】
タスクバー上のOpenVPN GUIアイコンをダブルクリックしてDisconnectボタン押下

【iPhoneの場合】


IをスライドしてVPNサーバーから切断




Disconnectedとなって上部のVPN表示が消えることを確認

■VPNクライアントからのアクセス許可

VPNクライアントがVPN通信を行う場合はVPN用の仮想アドレス(10.8.0.0/24)で通信を行うので、VPNクライアントからアクセスしたいマシン側のファイアウォールや各アプリケーションのアクセス制限等で、VPNクライアントアドレス(10.8.0.0/24)からのアクセスを許可するように設定しておく。

(1)VPNクライアントからSambaへアクセスしたい場合
[root@centos ~]# vi /etc/samba/smb.conf ← Samba設定ファイル編集
   hosts allow = 192.168.1. 127. 10.8.0. ← アクセス許可アドレスにVPNを追加

[root@centos ~]# systemctl restart smb ← Samba再起動※CentOS7の場合
[root@centos ~]# /etc/rc.d/init.d/smb restart ← Samba再起動※CentOS6,5の場合

(2)TCP Wrapperによるアクセス制限対象外とする場合
[root@centos ~]# echo "ALL: 10.8.0." >> /etc/hosts.allow ← 10.8.0.Xからのアクセスを許可

■VPNクライアントに固定IPアドレスを割当てる場合

外部から会社LANへVPN接続する場合等では、VPNクライアントごとにアクセス先マシンを制限したい場合がある。その場合は、VPNクライアントに固定IPアドレスを割当て、IPアドレスごとにファイアウォールでアクセス先マシンを制限するようにする。

例として、クライアント名client1に固定IPアドレス10.8.0.5を割当て、10.8.0.5からは192.168.1.3へのみアクセスを許可するようにする。

(1)OpenVPN設定
[root@centos ~]# vi /etc/openvpn/server.conf ← OpenVPN設定ファイル編集
client-config-dir ccd ← 行頭の;を削除してコメント解除(クライアント毎設定格納ディレクトリの有効化)

[root@centos ~]# mkdir /etc/openvpn/ccd ← クライアント毎設定格納ディレクトリ作成

[root@centos ~]# /etc/rc.d/init.d/openvpn restart ← OpenVPN再起動

(2)client1固定IPアドレス割当て
[root@centos ~]# vi /etc/openvpn/ccd/client1 ← client1設定ファイル新規作成
ifconfig-push 10.8.0.5 10.8.0.6 ← 固定IPアドレス10.8.0.5を割当てる※
※10.8.0.5と10.8.0.6の5と6の部分は以下の各組み合わせから指定すること(例えば、10.8.0.9と10.8.0.10と指定すると10.8.0.9が割当てられる)
ただし、10.8.0.1と10.8.0.2の組合せはVPNサーバーのアドレスなので指定しないこと

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]


(3)client1用ファイアウォール設定
[root@centos ~]# iptables -I FORWARD -i tun+ -s 10.8.0.5 -d 192.168.1.3 -j ACCEPT
 ← 10.8.0.5から192.168.1.3へのアクセスを許可

[root@centos ~]# echo "iptables -I FORWARD -i tun+ -s 10.8.0.5 -d 192.168.1.3 -j ACCEPT" >> /etc/openvpn/openvpn-startup
 ← 上記ファイアウォール設定をOpenVPN起動時実行スクリプトへ追加

これで、client1の証明書を使用してVPN接続したクライアントには固定IPアドレス10.8.0.5が割当てられ、LAN内の192.168.1.3へのみアクセスができるようになる。
なお、クライアント設定ファイルが存在しない場合はVPNサーバーが空きIPアドレスを割当てるので、固定/非固定混在が可能。

■VPNクライアントの削除

なんらかの理由(VPN通信要件がなくなった、または、証明書のパスフレーズを忘れた等※)で特定のVPNクライアントからのVPN接続を廃止したい場合は、該当VPNクライアントが使用しているクライアント証明書を廃止すればよい。
※廃止したクライアント名で証明書を再作成することができるので、パスフレーズを忘れてしまった場合は、いったん証明書を廃止後に同じクライアント名でクライアント証明書を再作成すればよい

(1)クライアント証明書廃止
クライアント証明書を廃止して、該当クライアント証明書を使用したVPN接続をできないようにする。
[root@centos ~]# cd /etc/openvpn/easyrsa3/ ← easyrsa3ディレクトリへ移動

[root@centos easyrsa3]# ./easyrsa revoke client1 ← client1のクライアント証明書廃止


Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client1


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: ← CA秘密鍵のパスフレーズを応答
Revoking Certificate 03.
Data Base Updated

IMPORTANT!!!

Revocation was successful. You must run gen-crl and upload a CRL to your
infrastructure in order to prevent the revoked cert from being accepted.

[root@centos easyrsa3]# rm -f /etc/openvpn/easyrsa3/pki/issued/client1.crt ← client1証明書類削除

[root@centos easyrsa3]# rm -f /etc/openvpn/easyrsa3/pki/private/client1.key ← client1証明書類削除

[root@centos easyrsa3]# rm -f /etc/openvpn/easyrsa3/pki/reqs/client1.req ← client1証明書類削除

[root@centos easyrsa3]# ./easyrsa gen-crl ← 証明書廃止リストを作成
Using configuration from /etc/openvpn/easyrsa3/openssl-1.0.cnf
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key:

An updated CRL has been created.
CRL file: /etc/openvpn/easyrsa3/pki/crl.pem

[root@centos easyrsa3]# /bin/cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/ ← 証明書廃止リストをOpenVPN設定ファイル格納ディレクトリへコピー

[root@centos easyrsa3]# chmod o+r /etc/openvpn/crl.pem ← 証明書廃止リストへ参照権限付加

[root@centos easyrsa3]# cd ← easyrsa3ディレクトリを抜ける

(2)接続中クライアントの強制切断
クライアント証明書を廃止しても該当クライアントが接続中であった場合はそのまま継続して通信できてしまうので、それも強制的に切断したい場合は以下の手順で切断する。
[root@centos ~]# telnet localhost 7505 ← OpenVPN管理インタフェース起動
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
>INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
status ← VPN接続状況確認
OpenVPN CLIENT LIST
Updated,Tue Nov 28 19:28:49 2006
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client1,124.211.3.180:1617,6882,7144,Tue Nov 28 19:26:53 2006 ← client1が接続中
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.253,client1,124.211.3.180:1617,Tue Nov 28 19:28:41 2006
GLOBAL STATS
Max bcast/mcast queue length,0
END
kill client1 ← client1強制切断
SUCCESS: common name 'client1' found, 1 client(s) killed
status ← VPN接続状況確認
OpenVPN CLIENT LIST
Updated,Tue Nov 28 19:29:05 2006
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
GLOBAL STATS
Max bcast/mcast queue length,0
END
exit ← OpenVPN管理インタフェース終了
Connection closed by foreign host.


LPIロゴ Copyright© 2005-2016 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします