OpenDJ – LDAP Server (2)

前回 OpenDJ - LDAP Server (1) の続き

今回はデータの export, import, backup, restore あたりを紹介。

control-panel は GUI での操作と等価なコマンド(CLI)も表示してくれるので便利。

export

Export はこんな感じでまるっと export できます。

bin/export-ldif \
 --backendID userRoot \
 --hostname 192.168.0.12 \
 --port 4444 \
 --bindDN "cn=Directory Manager" \
 --bindPassword ******** \
 --trustAll \
 --ldifFile /tmp/export.ldif

--excludeBranch ou=Group,dc=example,dc=com をつければグループ情報を除外することができます。
--excludeAttribute ds-sync-generation-id をつければその項目を除外できます。
これらは import 時にも指定可能です。
Replication 構成のサーバーから export すると ds-sync-* という attribute が export されますが、それをそのまま import しようとすると意図した通りにならなかったりするので注意。ただ export したものを import したいだけの場合は ds-sync-* は除外しておくのが良いでしょう。

import

export とよく似てます。

bin/import-ldif \
 --backendID userRoot \
 --hostname 192.168.0.12 \
 --port 4444 \
 --bindDN cn=Directory\ Manager \
 --bindPassword ******** \
 --trustAll \
 --excludeAttribute ds-sync-generation-id \
 --excludeBranch ou=Group,dc=example,dc=com \
 --append \
 --ldifFile /tmp/users.ldif

通常 import はデータの追加登録の用途で利用すると思います、この時 --append を忘れると全部消えてしまうという悲惨な目にある可能性が高いので要注意です。また、デフォルトではすでに存在するエントリーは上書きしないので、上書きしたい場合は --replaceExisting をつけます。export 同様 --excludeAttribute--excludeBranch は必要に応じて指定。exclulde じゃなくて include という指定方法もあります。

1ユーザー追加しようと思って uid=user,ou=People,dc=example,dc=com の1エントリーだけの ldif を作って --append を忘れると dc=example,dc=comou=People も消えてしまって空っぽになってしまいます。要注意。

import で replication が崩れることがありますが、そんな場合は忘れずに dsreplication initialize してください。

Backup

バックアップは保存先ディレクリと任意の名前(bakupID)を指定します。
control-panel からバックアップを行うと backupID は日時がセットされます。
圧縮、暗号化、増分バックアップも指定できます(今回は省略)。

bin/backup \
 --backupDirectory /opt/OpenDJ-2.5.0-Xpress1/bak \
 --backupID 20130409232226 \
 --backendID userRoot \
 --hostName 192.168.0.12 \
 --port 4444 \
 --bindDN cn=Directory\ Manager \
 --bindPassword ******** \
 --trustAll \
 --noPropertiesFile

Restore

リストアは Backup の逆ですね。

bin/restore \
 --backupID 20130409232226 \
 --backupDirectory /opt/OpenDJ-2.5.0-Xpress1/bak \
 --bindPassword ******** \
 --trustAll

--dry-run をつけると実際には restore せずにチェックを行なってくれます。

でわでわ、また何かあったら続きを書くかも。

FortiGate で VPN 認証に LDAP / Active Directory を使う

メジャーな UTM である FortiGate で VPN などのユーザー認証に LDAP / Active Directory を使う方法を紹介。LDAP サーバーの構築方法は OpenDJ – LDAP Server (1) で。FortiGate の OS は Version 4.0 MR3 で確認。

LDAP の場合

これは簡単
User > Remote > LDAP > Create New

Name ldap.example.com (任意の名前)
Server Name/IP ldap.example.com (LDAPサーバー)
Server Port 1389 (IANA の wellknown port は 389)
Common Name Identifier uid
Destinguished Name ou=People,dc=example,dc=com
Bind Type Simple

Active Directory の場合

AD を使う場合は FortiGate からアクセスするためのユーザーが必要。Domain Users に属していれば OK
ここでは fortigate@example.com というユーザーを作成する。表示名は「FortiGate VPN」とする。

User > Remote > LDAP > Create New

Name ActiveDirectory (任意の名前)
Server Name/IP 192.168.xx.xx (AD Server)
Server Port 389
Common Name Identifier sAMAccountName
Distinguished Name OU=Users,DC=example,DC=com
Bind Type Regular
User DN CN=FortiGate VPN,CN=Users,DC=example,DC=com (CNはADの表示名の値)
Password パスワード (fortigate@example.comユーザーのパスワード)

ユーザーの ou は部署ごとに分かれてても ok でした。

OpenDJ – LDAP Server (1)

OpenDJ とは Sun Microsystems が OSS として開発していた OpenDS という LDAP サーバーを Oracle が買収後に「OSS やーめたっ」と発表したために ForgeRock が fork して開発を継続している Java 製の LDAP サーバーです。ForgeRock は OpenSSO についても OpenAM として開発を行なっています。
Sun が開発を行なっていたためか、日本語ローカライズがしっかりされています。LANG=ja_JP.UTF8 で作業すればほとんど日本語で表示されます。

OpenDJ は Multi-Master Replication の構成を組むことが可能です。
そして、LDAP エントリを操作するための GUI もついています。

ApacheDS も Multi-Master Replication 対応で Eclipse plugin の エントリ操作ツールApache Directory Studio が提供されてて便利ですね。

※2013-04-05追記
Apache Directory Studio は Eclipse プラグインじゃなくて単体アプリになってました。これだけでも使えます、便利です。Active Directory につないだりもできます。

Multi-Master なんていう甘い言葉は危険なかおリもしますが、LDAP はもともと更新頻度の低いデータベースなので危険度は低いのではないかと。実際には、ホットスタンバイとして使ってるわけですけど。

それでは、OpenDJ のセットアップを。

Install

まずは1台目のセットアップ (192.168.0.12)

最新版の OpenDJ-2.5.0-Xpress1.zip をダウンロードし、任意の場所で展開します。
そこで setup コマンドを実行すれば GUI のインストーラーが起動しますが、サーバーだとコマンドラインですね。--cli をつけましょう。--no-prompt を付けなければ指定しなかった項目は入力を求められます。

$ ./setup \
  --cli \
  --baseDN dc=example,dc=com \
  --sampleData 10 \
  --ldapPort 1389 \
  --adminConnectorPort 4444 \
  --rootUserDN cn=Directory\ Manager \
  --rootUserPassword password \
  --ldapsPort 1636 \
  --generateSelfSignedCertificate \
  --hostName ldap.example.com \
  --no-prompt \
  --noPropertiesFile

これで example.com ドメインの LDAP サーバーが構築できました。--sampleData 10 の指定により10個のサンプルユーザーデータが作成されています。root で実行しないので1000番台の port となっています。自己署名の SSL 付き。

bin/control-panel で接続してみるとこんな感じ。

次に2台目のセットアップ (192.168.0.11)

$ ./setup \
  --cli \
  --baseDN dc=example,dc=com \
  --ldapPort 1389 \
  --adminConnectorPort 4444 \
  --rootUserDN cn=Directory\ Manager \
  --rootUserPassword password \
  --ldapsPort 1636 \
  --generateSelfSignedCertificate \
  --hostName ldap.example.com \
  --no-prompt \
  --noPropertiesFile

今度はサンプルデータはなしでセットアップして、Replication で同期されることを確認します。

Replication Setup

1台目(192.168.0.12)と2台目(192.168.0.11)で Replication 構成を組むためのコマンドです。

$ bin/dsreplication \
 enable \
 --adminUID admin \
 --adminPassword password \
 --baseDN dc=example,dc=com \
 --host1 192.168.0.12 \
 --port1 4444 \
 --bindDN1 "cn=Directory Manager" \
 --bindPassword1 password \
 --replicationPort1 8989 \
 --host2 192.168.0.11 \
 --port2 4444 \
 --bindDN2 "cn=Directory Manager" \
 --bindPassword2 password \
 --replicationPort2 8989 \
 --trustAll \
 --no-prompt

これで 8989 ポートを使って Replication する設定が行われました。が、この状態ではまだデータは同期されていません。それぞれに control-panel で接続してみるとわかります。

Replication Initialize

1台目のデータを2台目にコピーすることでデータを初期化します。
--hostSource--hostDestination を反対にしてしまわないように注意。

$ bin/dsreplication \
 initialize \
 --baseDN "dc=example,dc=com" \
 --adminUID admin \
 --adminPassword password \
 --baseDN dc=example,dc=com \
 --hostSource 192.168.0.12 \
 --portSource 4444 \
 --hostDestination 192.168.0.11 \
 --portDestination 4444 \
 --trustAll \
 --no-prompt

これでおしまい。とっても簡単。それぞれ status コマンドで確認してみましょう。

$ bin/dsreplication status \
 --adminUID admin \
 --adminPassword password \
 --trustAll \
 --hostname 192.168.0.12 \
 --port 4444
$ bin/dsreplication status \
 --adminUID admin \
 --adminPassword password \
 --trustAll \
 --hostname 192.168.0.12 \
 --port 4444

かれこれ2年ほどトラブルフリーで動作してます。バージョンはちょいと古いですが。
1台停止中にもう1台で更新されたデータは復帰後に自動で反映されます。

Replication をやめる

サーバーが壊れてしまって切り離したい場合とかで Replication をやめるためにはそれぞれのサーバーに接続して disable にします。

$ bin/dsreplication \
 disable \
 --disableAll \
 --port 4444 \
 --hostname 192.168.0.12 \
 --bindDN "cn=Directory Manager" \
 --adminPassword password \
 --trustAll \
 --no-prompt
$ bin/dsreplication \
 disable \
 --disableAll \
 --port 4444 \
 --hostname 192.168.0.11 \
 --bindDN "cn=Directory Manager" \
 --adminPassword password \
 --trustAll \
 --no-prompt

いじょー。

データのバックアップとかリストアとかの手順はまたそのうち。

つづきを書きました。