freeRadius+OpenLDAP+SambaでWPA2-Enterprise用認証サーバの構築(Ubuntu16.04 LTS/14.04 LTS)

どうも、小鳥遊昴です。

今日は上の内容で書いていきます。今回構築するときだいぶ苦労した(私の無知ゆえの可能性もあるが)ので、これから構築する方の助けにでもなれば。

環境は以下の通りです。

 

物理環境 VMware ESXi(仮想環境上で構築)
OS(Server) Ubuntu 16.04 LTS(14.04 LTS上でも動作確認済み)
OS(test Client) Ubuntu 14.04 LTS
Wireless AP ASUS RT-AC1200HP
Host Name(Server) auth.ubuntu.local
radius認証方法 PEAP/MS-CHAPv2,EAP-TTLS/PAP or MS-CHAPv2
動作確認済みOS Windows7,Windows10,Mac OS X,Debian jessie

というわけで実際に構築していきます。

OpenLDAPのインストール

まず、OpenLDAPをインストールします。これは特に大変なこともないです。

apt-get install slapd ldap-utils

インストール時にLDAPの管理パスワードの登録が求められるので入力をします。インストールが終わったら一応設定を確認します。

slapcat

おそらく、次のような出力が得られるはずです。

この出力ではuserPassword:: の部分がxxxx(Masked)xxxxと書いてありますが、通常はここにはhash化された管理パスワードが記述されています。

これで一旦LDAPの設定は終わりです。通常、LDAPを構築するときはこの後いくつかすることがあるのですが、それは後ほど行うのでここでは行いません。

独自SSLサーバ認証局(CA)構築およびサーバ証明書発行

radiusの認証時に証明書を用いるのでその作成を行います。なお、通常はこのようなときは証明書のみ作成すると思われますが、今回はCA証明書も必要なため、あえてCAも作成します。

ですが、今回この作成そのものはテーマとして重要ではないのと、構築過程を紹介してるサイトがあるのでそのリンクのみで。

独自SSLサーバ認証局(CA)作成とサーバ証明書発行

このサイトのはApacheに使用する目的となってるのでApacheのインストールが必要と記載されてますが、今回Webサーバは立てないのでその必要はないです。また、同様に「ブラウザにCA証明書を組み込む」の件も必要ないです。

FreeRadiusのインストール・設定

次にFreeRadiusのインストールと設定を行います。

まず、16.04 LTSにおいて通常aptで降ってくるradiusのバージョンは2.2.8+dfsg-0.1build2なので3.0.xが使えるようにリポジトリの追加を行います。

add-apt-repository ppa:freeradius/stable-3.0

※なお add-apt-repository が使えない場合は apt-get install software-properties-common で使えるようになります。

これで3.0.xのリポジトリの追加ができたのでインストールを行います。

apt-get update

apt-get install freeradius freeradius-ldap

インストールが終わったら、まず前章で作った証明書類を/etc/freeradius/certs/以下に移動します。なお移動するのはCA証明書、サーバ証明書、サーバ秘密鍵で、いずれもpermissionはroot:rootの644とします。(今回の構築では、CA証明書をcacert.pem、サーバ証明書をtest.cer、秘密鍵をtest.keyとしています)

その後、それぞれ以下のファイルを編集します。(diff表記で記載)

上記の黄色でマークされている部分に関しては、各自の環境に合わせて変更してください。

黄色くマークされている部分にはLDAPの設定時に入力した管理パスワードを入力する。

また、この設定が終わった後、ldapの設定ファイルをmods-enabledに追加し、有効化する。

cd /etc/freeradius/mods-enabled

ln -s ../mods-available/ldap ldap

最後にmods-avairable/eapで追記したtmpフォルダを作成する。

mkdir /var/run/freeradius/tmp

chown freerad:freerad /var/run/freeradius/tmp

これでfreeradiusの設定は完了となります。

LDAPのSamba連携

Sambaのインストール

Sambaのインストールは以下の通り。

apt-get install samba

Samba.schemaのldapへの登録

samba.schemaと呼ばれるものをldapへ登録します。

まず、samba.schemaファイルをldapのディレクトリへコピー。

zcat /usr/share/doc/samba/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema

その後、このコピーされたsamba.schemaをldapのconfigへ書き込みます。

まず、以下の内容を記載したファイルsamba.confを作成します。

これを、ldapの設定の形に変換します。まず、作業用ディレクトリを作成します。

mkdir /tmp/slapd.d

ここに変換させます。

slaptest -f samba.conf -F /tmp/slapd.d/

config file testing succeeded,と出たら成功です。そしたら作成されたファイルのうちのsamba.schemaに関係する部分をldapのconfigに追加します。

cp "/tmp/slapd.d/cn=config/cn=schema/cn={4}samba.ldif" "/etc/ldap/slapd.d/cn=config/cn=schema"

chown openldap: '/etc/ldap/slapd.d/cn=config/cn=schema/cn={4}samba.ldif'

これでschemaファイルの追加は完了したので、slapdを再起動し、設定を確認します。

systemctl restart slapd.service

※Ubuntu 16.04 LTSからはsystemdが導入されているためsystemctlコマンドを使用していますが、ご利用の環境が14.04LTSの場合は service slapd restart で適用してください。

ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn

schemaが登録されていると、以下の出力が得られます。

smbldap-toolsのインストール・設定

このツールはLDAPとSambaの連携のためのツールです。

apt-getでも配信していますが、apt-getで配信されているバージョン(0.9.9-1)はすでに既知の修正されないバグがあることが確認されています。そのため、最新版の0.9.11をソースコードでダウンロードし、自分でコンパイルする必要があります。

※余談ですが、構築の際これで大分躓きました。構築開始時にはまだ0.9.10までしかなく、それも2013年に更新されたきりで動作せず、途方に暮れていたところ、2016-05-10に新バージョンが出たことにより一気に作業が進みました。

以下の手順でソースコードのダウンロード、コンパイルを行います。

これでsmbldap-toolsのインストールは完了したので、設定をしていきます。

まず、設定をする上で必要な「SID」と呼ばれるものを取得します。

net getlocalsid

すると、” SID for domain XXX is : S-1-5-21-*********”といった形で(XXXはドメイン名、*以降はそれぞれ固有の数字)表示されます。これを設定で用います。

次に、smbldap-toolsの設定ファイルを編集します。それぞれソースコードを展開したフォルダに入ってます。

黄色のラインの部分に先ほどのSIDを入力します。また、各ドメイン名などは自身の環境に合わせて変更してください。

黄色のライン部分はLDAPの管理パスワードを入力します。

設定を記述したら、実行するうえで読み込まれる場所に移動します。

mkdir /usr/local/etc/smbldap-tools

cp smbldap*.conf /usr/local/etc/smbldap-tools/.

smbldap_bind.confにはパスワードが記述されているので適切にパーミッションを設定します。

chmod 600 /usr/local/etc/smbldap-tools/smbldap_bind.conf

その後、コマンドを実行するために必要なperlのモジュール(Net::LDAP,Crypt::SmbHash)を追加します。

perl -MCPAN -e shell

初回起動時はいろいろ聞かれますが、すべて解答は初期値で問題ありません。完了すると”cpan>”と出ますので、コマンドを実行します。

cpan> install Net::LDAP

cpan> install Crypt::SmbHash

以上で完了です。quitと打てばcpanシェルから離脱できます。

ここまでできたら、最後にLDAPとSambaの連携に必要なLDAPの設定をしてくれるコマンド”smbldap-populate”を実行します。

smbldap-populate

Changing UNIX and samba password for root、と出てパスワードを聞かれたら成功です。これは所謂LDAPの管理パスワード(dn: cn=admin,dn=ubuntu,dc=local)とは別にSamba連携されたrootアカウント(dn: uid=root,ou=people,dc=ubuntu,dc=local)を登録するコマンドになります。同様にパスワードを登録します。

最後にSambaの設定をLDAPに連携させます。smbldap-toolsにsmb.confのexampleがあるので、これを用いて設定をします。

cp ~/smbldap-tools-0.9.11/doc/smb.conf.example /etc/samba/smb.conf

最後に、先ほどsmbldap-populateで入力したsambaの管理パスワードを登録して終わりです。

smbpasswd -W

パスワードの入力を求められるので、先ほどsmbldap-populateで入力したものと同じものを入力します。

これですべての設定が完了となりますので、最後にサーバを再起動し、すべての設定を反映させます。

reboot

以上で終了です。

 

動作確認及びユーザの追加

ユーザの追加(smbldap-useradd)

smbldap-toolsがインストールされているため、ユーザの追加・変更・削除等は専用のコマンドを用いて行います。具体的には以下の通りとなります。

ユーザの追加 smbldap-useradd
ユーザの編集 smbldap-usermod
ユーザのパスワードの追加 smbldap-passwd
ユーザの削除 smbldap-userdel
グループの追加 smbldap-groupadd
グループの編集 smbldap-groupmod
グループの削除 smbldap-groupdel

基本的には以上のsmbldap-‘unixのuser関連のコマンド’の形式となっています。但し気を付ける必要があるのが、smbldap-useraddコマンドでユーザを追加する際、-a オプションを付けないとUnixユーザの情報しか作成されない点である。今回、無線LANの認証でsambaNTPasswordを使うため、Sambaアカウントが作られないと認証が行われないため、必ずつける必要がある。

実際、作成すると以下の通りとなる。

smbldap-useradd -a -P risona

確認すると「sambaNTPassword」の項目と「userPassword」の項目の二つがあることが確認できる。

これでユーザの追加は完了である。なお、smbldap-*のそのほかのコマンドに関してはここでは紹介しない。

動作確認

実際に認証ができるか動作確認を行う。

まず、freeradiusをデバッグモードで起動する。

systemctl stop freeradius.service

freeradius -X

このコマンドを実行すると、すべての出力が表示される。この状態で実際に認証を試し、動作を確認する。エラーなく実行出来たら成功である。できなかった場合は出力されたログで黄色もしくは赤色で表示されている部分をよく確認して再度設定を行う。

なお、”NTPassword,LMPasswordがない”といったエラーが表示されている場合はsmbldap-toolsの設定および作成されたアカウントにsambaNTPasswordが発行されているかどうかを今一度確認すると良い。

正常な動作が確認されたら、freeradiusをdaemon化する(インストールされたときの状態だとdaemonは無効化されていることがある。これに関しては各位 systemctl status freeradius.service 等で確認のこと)

systemctl enable freeradius.service

以上で構築完了である。

感想的な何か

疲れた。

正直ここまで手こずるとは思っていなかった。甘く見ていた。特にWindowsクライアントの動作に関してはかなり想定外だった。

一度構築が成功すれば別になんてことないのだが、それにしてもだいぶ面倒くさかった。上がってる情報も古いのと新しいのが混在していて取捨選択がかなりアレだった。

この記事が私と同じ思いをしかけている誰かの助けになればと思う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です