VPN環境構築:第二段階

テーマ:

どうも、j-druckerです。


日々の寒暖差が激しいです。また今日から少し寒くなるみたい。体調を崩さないよう、注意しなくてはなりませんね。

芸能関連ではゲスい話が続いています。個人的にはどうでもいい話ですが、興味を持つ人が多いので、各種メディアが取り上げるのでしょうね。私は正直、こういったニュースになると、チャンネルを変えてしまいます。


なお、今日の新聞では「雇用は良いが消費がよくない」的な記事がありました。

景気なんてものはマインドコントロールだ、なんてことをどこかで見た気がしますが、まさにこのマインドの問題なんでしょう。日常で「宵越しの銭は持たねぇ」なんて気持ちでお金を使う感性が広まると消費向上から景気向上、となるのでしょうけれども、さすがにこのご時世、そういった刹那的な生き方をする人は、そうはいないのだと思います。


マイナス金利策にも、「一般人にお金を使わせる」方向にもっていく事が目的の一つにあるのだろうと思います。しかし、現実にはマイナス金利のネガティブな情報が多く出回っている様で、なかなか財布の紐が緩まないみたいです。

日本人の気質として、あのバブルを経験したあとは、堅実志向が強いのかもしれません。


そんなことを思いました。



さて。今回は「VPN環境構築:第二段階」として、「ユーザー認証の外部化(radius活用)」に関する設定手順について紹介したいと思います。

centos7でVPNサーバ(L2TP/IPSec)を構築するにあたり、この段階になると急激に情報が減少します。


ADのサーバをRADIUSに仕立て上げるのは、MSの技術情報等を参考にすれば、根本的にGUIベースなこともあり、あまり難しいことではありません。しかし、CentOS7をRADIUSクライアントとして機能させるのは「このサイト情報で一発」といったものではなく、種々の情報をパーツ単位で集め、まとめなくてはなりません。しかも、ほぼ海外サイトになります。


したがって、本ページには「このサイトを参照」という引用はありません。


さて、設定手順です。詳細までは記載しませんがご容赦ください。



1.WindowsServer側(RADIUSサーバ)

WindowsServer2008R2ベースの記述ですが、おそらく最新のサーバーOSでも同種・同類の機能はあると思うので、その中で対応は可能だと思われます。


(1)NPSサーバインストール

RADIUSとして機能させるため、[役割]に「ネットワークポリシーとアクセスサービス」を導入します。


(2)ネットワークポリシーサーバ

[A]RADIUSクライアントとして、CentOSを登録

デバイスの製造元は"RADIUS Standard"とし、"IPアドレス"、"共有シークレット"の設定を注意するのみです。フレンドリ名は適当で問題ありません。

ちなみに、"IPアドレス"は、ADから見えるアドレスなので、複数NICを持つVPNサーバーの場合、ADにアクセスするソースIPがどこになるか注意しましょう。

[B]ポリシー/ネットワークポリシー

おそらく、この設定がいろいろキーになると思います。

<概要>タブ:基本、デフォルトのままで問題ないでしょう。

・「ユーザーのダイヤルインプロパティを無視」のチェックは有効にしておく

・ネットワークアクセスサーバーの種類は「Unspecified」で問題ないです

<条件>タブ:RADIUSクライアント、VPN接続ユーザーの条件を設定

・Windowsグループで、"VPN User"を追加します。

"Domain User"を追加すれば、全てのユーザーが認証可能になるでしょう。私の場合、指定したユーザーのみがVPNでの認証ができる環境にしたい、ということで、"VPN User"グループにして、このグループに属するユーザーのみがVPNの認証ができるようにします。

・クライアントIPv4アドレス:CentOSのIPアドレスを記述

複数ある場合、正規表現でマッチする様に記載すると条件を増やさずにすみます。

(例):"192.168.1.10"と"192.168.1.11"がVPNサーバーの場合

⇒ 192\.168\.1\.1[01]

<制約>タブ:EAPの種類等を設定

ここで「セキュリティレベルの低い認証方法」としてMS-CHAPv2を選択しておきます。VPNサーバがWindowsの場合、この選択は不要で、EAPの種類としてEAP-MSCHAPv2を追加しておきます。


基本、上記が最低条件で、それ以外は環境に応じて設定することになるかと思います。

GUIベースでの設定となるので、あまり困りません。なお、うまく設定ができると、セキュリティログにNPSの認証に関する結果が出力されるようになるので、各種解析もできるようになります。


個人的には、この「セキュリティログに認証に関する結果の出力」がされるまでが一つの壁です。ここに出力される様になれば、あとはログの中身に応じてNPS側の設定を修正・改訂していくのが容易になります。



2.CentOS側(RADIUSクライアント)

ユーザー認証は、xl2tpdのお仕事なので、この関連設定を行います。IPsec関連は何もしません。

(1) "/etc/ppp/options.xl2tpd"
以下のエントリの追記・編集を行います。
refuse-pap
refuse-chap
refuse-mschap
require-eap    ⇒追記(使いません。あくまで希望)
require-mschap-v2 ⇒追記
require-mppe-128  ⇒追記

noccp ⇒ コメントを外す(これがあると、mppe が有効にならない、とエラーになる)
plugin radius.so
plugin radattr.so

なお、最後にプラグインとして指定したファイルは、/usr/lib64/pppd/2.4.5 の下にあります。

# rpm -qf /usr/lib64/pppd/2.4.5/radius.so
ppp-2.4.5-33.el7.x86_64

として、pppのパッケージに含まれているものです。これを、そのまま使う形になります。


(2) 新規作成-1: 設定ファイル格納用のディレクトリの作成(手動で行う)
# mkdir /etc/radiusclient


(3)新規作成-2:各種設定ファイル(完全にゼロベースでの作成が必要)

以下は、RADIUSクライアントとして機能させるために必要な様です。

通常、RPM等でツールをインストールするとデフォルトで入るものばかりですが、今回の環境はそれが無いため、すべて新規作成となります。


[A] "dictionary"、"dictionary.microsoft"
実際に稼働する 端末やradiusクライアントのバージョンに合った定義でないと、エラーが出て認証できません。したがって、何が正しいのかは、その環境に合わせて調整する必要があります。

今回の環境構築にあたり、私的なポイントは以下かと思います。

1:dictionary

一般的なものを持ってきて、最後に

INCLUDE /etc/radiusclient/dictionary.microsoft

のエントリがあればよいでしょう。

2:dictionary.microsoft

Web上の様々なところにこのファイルのサンプルがあります。(ほぼ英語サイトです)

しかしながら、それらのサンプルの中でも「使えないもの」「使えるもの」が混在しています。

例えば、

ATTRIBUTE MS-RAS-Vendor 9 xxxx Microsoft

とエントリがあるのですがこの "xxxx"の部分が"octets"になっているものは使えません。感覚として

・「Microsoft's VSA's, from RFC 2548」として最初に記載がある

・BEGIN VENDER / END VENDER の記述がある

・型の定義が「string」「integer」「ipaddr」のみである

というものを探して導入すると、使える様になる感じです。


[B}"port-id-map"
単純に接続する際に必要なもの、というレベルだと思います。

適当なサンプルファイルを探して、このディレクトリに配置すれば大丈夫でしょう。


[C]"radiusclient.conf"
RADIUSクライアントとして必要な設定が一通りないと稼働しない、一つのキーとなるファイルです。

現在有効になっているのは以下のみです。(コメント等の説明部分は削除しています)

=====

auth_order radius

login_tries 4

login_timeout 60

nologin /etc/nologin

issue /etc/radiusclient/issue

authserver xx.xx.xx.xx:1812 ←NPSサーバを指定(ポート番号はNPSの設定に合わせる)

acctserver xx.xx.xx.xx:1812 ←NPSサーバを指定(同上。なお、1812はデフォルト設定のまま)

servers /etc/radiusclient/servers

dictionary /etc/radiusclient/dictionary

login_radius /usr/sbin/login.radius

seqfile /var/run/radius.seq

mapfile /etc/radiusclient/port-id-map

default_realm

radius_timeout 10

radius_retries 3

login_local /bin/login

=====

上記の中で、本来ならば不要だと思われているエントリでも、無いと稼働しないものがありました。したがって、ある程度有効にする必要がありそうです。上記は設定部分だけですが、説明等のコメントも含めたサンプルファイルも多く公開されていますので、そちらも参考にしてみてください。


[D}"servers"
radius のサーバエントリを記載し、サーバ側とキーを合わせます。1サーバ1行の形です。

(サーバーIP)  (共有キー)


(4)その他

/etc/ppp/chap-secretsのユーザーエントリの消去(コメントアウト等)を行う


上記がすべて完了すると、VPN接続時のユーザー認証がCentOS内部からADに切り替わります。

また、認証がうまくいくと、AD側のセキュリティログにNPSサーバにおける認証の結果として出力されるようになります。



これらについて、個別にいろいろな情報を探すと多くのサイトがあります。(ほとんど海外です)

ただし、まとまった形での記述はありません。なので、上記としてまとめました。

実際に行う方がいましたら(いるのか?)、上記を参考に、個別に探してみてください。


なお、私の環境で稼働しているファイルをサンプルとして公開してもよいのですが、結構実際の環境に依存している部分もあると思うので、やめておきます。上記キーワードを元にネット上を探してみてください。

むしろ、その方が良いかと思いますので。



それではまた。

次回は、このVPN接続にあたり、IPSec側の設定を行い、「事前共有カギ」から「公開カギ(証明書)」認証にする手順を紹介する予定です。