OpenVPNドキュメント

クライアント特有のルールとアクセスポリシーの設定

企業VPNのセットアップを想定して、3つのユーザークラス毎に個別のアクセスポリシーを設定したいとします。

  • システム管理者…ネットワーク上の全てのマシンへのフルアクセス
  • 正社員…Samba/メールサーバーのみアクセス可能
  • 契約社員…特定のサーバーのみアクセス可能

基本的なアプローチとして、(1)各ユーザークラス毎に仮想IPアドレスに分離する、(2)クライアントの仮想IPアドレスをキーとするファイアウォールのルールを設定してマシンへのアクセスを制御する、の2つがあります。
今回の例では、システム管理者は1名、正社員は変動あり、契約社員は2名、と想定します。IPアドレスの割り当ては、正社員に対してはIPアドレスの範囲内から割り当て、システム管理者と請負業者に対しては固定IPアドレスを割り当てるものとします。
また、今例の前提条件として、OpenVPNサーバーマシン上でソフトウェアファイアウォールとしてLinux iptablesが稼働しています。
これにより、特定のファイアウォールルールを定義できるようになります。

まず、ユーザークラス毎の仮想IPアドレスをマッピングします。

ユーザークラス名 仮想IPアドレス範囲 アクセス可能範囲 共通名
正社員 10.8.0.0/24 10.66.4.4 Samba/メールサーバー [変数]
システム管理者 10.8.1.0/24 10.66.4.0/24 サブネット全体 sysadmin1
契約社員 10.8.2.0/24 10.66.4.12 契約社員用サーバー contractor1, contracter2

次に、このマッピングをOpenVPNサーバー設定に書き換えます。
こちらの手順に従い、10.66.4.0/24サブネットが全てのクライアントに対して利用可能な設定になっている事を確認します。
クライアントが10.66.4.0/24サブネット全体にアクセスできるようルーティング設定をおこなった後、上記ポリシーに従ってファイアウォールを設定し、アクセス制限を適用します。

tunインターフェイスのユニット番号を定義して、後でファイアウォール ルールで参照できるようにします。

dev tun0

サーバー設定ファイルで、正社員のIPアドレス範囲を定義します。

server 10.8.0.0 255.255.255.0

システム管理者及び契約社員のIPアドレス範囲に対するルーティングを追加します。

route 10.8.1.0 255.255.255.0
route 10.8.2.0 255.255.255.0

システム管理者と契約社員には固定IPアドレスを割り当てるため、クライアント設定ディレクトリを使用します。

client-config-dir ccd

ccdサブディレクトリに別の設定ファイルを配置して、システム管理者と契約社員の固定IPアドレスを定義します。

ccd/sysadmin1

ifconfig-push 10.8.1.1 10.8.1.2

ccd/contractor1

ifconfig-push 10.8.2.1 10.8.2.2

ccd/contractor2

ifconfig-push 10.8.2.5 10.8.2.6

ifconfig-pushでpushされる2つのアドレスは、仮想クライアントとサーバーのIPエンドポイントを表しています。
Windowsクライアント及びTAP-Windowsドライバとの互換性のため、これらのアドレスは連続する/30サブネットから選択する必要があります。
具体的には、各エンドポイントのIPアドレスの最後のオクテットの組み合わせを以下のセットから取得する必要があります。

[ 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]

これでOpenVPNの設定は完了です。
あとはアクセスポリシーに基づいてファイアウォールルールを追加します。
今回の例ではLinux iptables構文のファイアウォールルールを以下のように使用します。

# Employee rule
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.66.4.4 -j ACCEPT

# Sysadmin rule
iptables -A FORWARD -i tun0 -s 10.8.1.0/24 -d 10.66.4.0/24 -j ACCEPT

# Contractor rule
iptables -A FORWARD -i tun0 -s 10.8.2.0/24 -d 10.66.4.12 -j ACCEPT