こちらはPhoenix ContactのSecurity Router FL MGUARD 1105を利用した新しい記事シリーズです!サイバーセキュリティは現在我々のFA業界にも欠かせない課題の一つであり、自分も勉強しないといけないと思いました。
第5 話はLDAP Serverを立ち上げ、MGUARD 1105からLDAP Serve経由でLoginする方法の説明や設定方法になります。
さ、FAを楽しもう。
Reference Link
Reference Video
Phoenix Contact.FL MGUARD 1105開封しました!
LDAP?
LDAP (Lightweight Directory Access Protocol) は、クライアント/サーバー・プロトコルで、IP ネットワーク経由でリモート・ディレクトリ・サービスのデータを照会および管理できます。 今回の記事で使用するmGuardデバイスがLDAPクライアントとして機能します。
LDAP を使用することで、デバイスのユーザー管理を LDAP サーバー上の中央データベースに委託することができ、LDAP サーバーがユーザー認証を引き継ぎます。 デバイス上でローカル・ユーザーを構成することは可能ですが、原則的にその 必要はなくなります (例外: Super Admin ロールを持つローカル・ユー ザーが存在する必要があります)。
注意するのは、LDAPサーバーによって認証されたユーザーは、LDAPサーバーのユーザー管理機能を使用してのみブロックできます。
mGuardにおける権限/役割
LDAP サーバーで管理されているユーザーは、中央で管理されているアクセス・データ (ユーザー名とパスワード) を入力することで、mGuard デバイスにログインできます。
機能
LDAPは、TCP/IP上で動作するディレクトリサービスにアクセスするためのアプリケーションプロトコルです。 ディレクトリサービスは、ユーザーやデバイスなどのリソースに関する構造化された情報を保持し、この情報を照会・管理するためのメカニズムを提供します。
LDAPサーバーの主な機能は以下になります。
✓情報の保存
ユーザーアカウント、グループ情報、ネットワークデバイスなど、さまざまなディレクトリ情報を保持します。
✓アクセス管理
認証と認可を実行し、どのユーザーまたはグループが特定のリソースにアクセスできるかを制御します。
✓検索機能
LDAPクライアント(アプリケーションまたはサービス)がLDAPサーバー内の情報を検索するためのインターフェースを提供します。
✓階層的情報構造
ディレクトリはツリー構造で管理され、各エントリーはDN(識別名)で識別します。
主要コンポーネント
LDAP Serverには以下のメイン部品があります。
✓Directory‐ディレクトリ
プロファイルと設定を保持し、リソースを階層的に管理する組織構造になります。
✓Entries‐エントリー
すべてのLDAP情報は「エントリー」として表現され、各エントリーは複数の属性(ユーザー名、役割、電子メール、電話番号など)を持つことができます。
dc (Domain Component)
Domain Component と呼ばれ、LDAPディレクトリ情報ツリー(DIT)における ドメインの階層構造を示を示します。 例:dc=example,dc=com
dn (Distinguished Name)
“Distinguished Name “はLDAPディレクトリ内のエントリーの一意な識別子です。 DNは、ディレクトリ構造内のエントリの位置を示すパスの役割を果たします。
例: uid=user,ou=users,dc=example,dc=com
uid=user
特定のユーザーを指します。
ou=users
このユーザーが所属する組織単位になります。
dc=example,dc=com
domainコンポーネントは、エントリーが属するドメインを示します。
cu (Common User)
共有アカウントまたは共通の設定を持つユーザーを指します。
✓Attributes‐属性
各エントリーに関連する特定の情報(姓、名、Eメールアドレスなど)になります。
Example
こちらはLDAP Serverで構築するツリー構造の例です。
オブジェクトクラス
LDAPでは、個々のエントリーが持つべき属性を指定するためにオブジェクトクラスが使われます。 例えば、inetOrgPersonオブジェクト・クラスは一般的にユーザー情報を格納するために使用され、uid(ユーザー名)やmail(電子メール)などの属性を含んでいます。
メリット
LDAP Serverを導入することにより、このようなメリットがあります。
✓集中管理
LDAPを使用することで、ユーザーアカウントとリソースの一元管理が可能になり、管理効率が向上します。
✓スケーラビリティ
LDAPはスケーラブルに設計されており、大規模な環境における多数のユーザーとリソースに対応します。
✓多様なサポート
LDAPは多くのオペレーティングシステムやアプリケーションでサポートされており、クロスプラットフォームでの管理が容易になっています。
LDAP Server導入する前
LDAP Serverを導入する前は、EndデバイスはServerにアクセスするために毎回IDやPasswordを記憶し入力し>認証する形です。
LDAP Server導入した後
LDAP Serverを導入したあと、EndデバイスはLDAP Serverを経由し他のServerに認証を行うことができます。
工場に導入?
LDAP Serverを工場に導入することにより、このようなメリットがあります。
✓ユーザー管理の効率化:
大規模な産業や工場では、多数の従業員と複数のシステムを管理するには、効率的なユーザー管理が必要です。 LDAPを導入することで、アカウントの作成と管理が簡単になります。
✓セキュリティの強化:
工場では膨大な量の機密情報を扱う。 LDAPによる一元管理と認証強化により、アクセス制御を改善し、情報セキュリティを強化することができます。
✓システム統合:
生産管理システム(MES)、企業資源計画システム(ERP)、その他のITインフラをLDAPを使って統合することで、ユーザーの利便性を高めることができます。
✓将来の拡張性:
ビジネスの成長に伴い、LDAPによる柔軟なユーザー管理は、新しいITシステムやサービスへの拡張や接続を容易にします。
Implementation
こちらは今回記事の構成です。
Configure LDAP Server
最初にRaspberry pi3にLDAP Serverを構築します。今回記事で使用したRaspberry pi3にはkali OSがインストールされています。
Install LDAP Server
こちらのコマンドでLDAP Serverをインストールします。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo apt install slapd ldap-utils |
Confirm the Information
sudo slapcat コマンドを実行し、自動設定されたベースDN等を確認します。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo slapcat dn: dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Example Org dc: example structuralObjectClass: organization entryUUID: 05e36c3c-657e-103f-862c-a5073dd390f2 creatorsName: cn=admin,dc=example,dc=com createTimestamp: 20250112221214Z entryCSN: 20250112221214.684516Z#000000#000#000000 modifiersName: cn=admin,dc=example,dc=com modifyTimestamp: 20250112221214Z |
Init
こちらのコマンドでLDAP Serverの設定を初期化します。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo dpkg-reconfigure slapd |
NOでLDAP Serverの設定を初期化します。
NDS domain 名を入力します。
組織名を入力します。
管理者のPasswordを設定します。
もう一回Passwordを入力します。
LDAP Serverにある既存のデータベースを削除します。
Yesで進んで、それでLDAP Serverの初期化が完了です。
Restart
こちらのコマンドでLDAP Serverを再起動します。
sudo systemctl restart slapd |
Insert Entry
次にLDAPサーバーのディレクトリにエントリを追加します。
Insert ou
まずは組織単位を追加します。
- people ユーザーを保存するorganizational unitになります。
- groups グループを保存するorganizational unitになります。
add_ou.ldif
こちらのコマンドでLDIFファイルを作ります。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo nano add_ou.ldif |
こちらはadd_ou.ldifの中身です。
add_ou.ldif dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups |
Add ou
ldapadd コマンドでou情報をLDAP Serverに追加します。
- -x 簡易認証
- -D ディレクトリサーバーにバインドするDN
- -W 簡易認証のパスワードをコマンドラインではなくプロンプトで入力
- -f エントリ情報の書かれているファイル
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_ou.ldif |
Insert user‐u11000.ldif
u11000.ldif を作成します。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo nano add_u11000.ldif |
こちらはu11000.ldifの中身です。
dn: cn=u11000,ou=groups,dc=example,dc=com objectClass: posixGroup cn: u11000 gidNumber: 11000 dn: uid=u11000,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: Suzuzki abc sn: Suzuzki displayName: Suzuzki abc givenName: abc title: staff uid: u11000 userPassword: Somepassword gidNumber: 11000 homeDirectory: /home/u11000 uidNumber: 11000 gecos: Suzuki abc loginShell: /bin/bash shadowExpire: -1 shadowInactive: 99999 shadowMax: 99999 shadowMin: 0 shadowWarning: 14 |
add User
ldapadd コマンドを使用しu11000 Userを追加します。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_u11000.ldif |
Insert user‐u11001.ldif
u11001.ldif を作成します。こちらはu11001.ldifの中身です。
dn: cn=u11001,ou=groups,dc=example,dc=com objectClass: posixGroup cn: u11000 gidNumber: 11001 dn: uid=u11001,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: sasaki abc sn: sasaki displayName: sasaki abc givenName: abc title: mGAdmin uid: u11001 userPassword: admin12345 gidNumber: 11000 homeDirectory: /home/u11000 uidNumber: 11000 gecos: sasaki abc loginShell: /bin/bash shadowExpire: -1 shadowInactive: 99999 shadowMax: 99999 shadowMin: 0 shadowWarning: 14 |
Insert user‐u11002.ldif
u11002.ldif を作成します。
先ほどu11000.ldifとu11001.ldifにもPlain TextでuserPassword Attributeを設定しましたが、u11002はRoot Userなので、slappasswdコマンドでPasswordのSSHA値を生成します。
そのSSHA値にもUserのPasswordを設定できます。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo slappasswd New password: Re-enter new password: {SSHA}+Lk+VzufEXXKCZDzN4oIV56VHuwLXbkz |
こちらはu11002.ldifの中身です。
dn: cn=u11002,ou=groups,dc=example,dc=com objectClass: posixGroup cn: u11002 gidNumber: 11002 dn: uid=u11002,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: yamagami abc sn: yamagami displayName: yamagami abc givenName: abc title: mGRoot uid: u11000 userPassword: {SSHA}+Lk+VzufEXXKCZDzN4oIV56VHuwLXbkz gidNumber: 11002 homeDirectory: /home/u11002 uidNumber: 11002 gecos: yamagami abc loginShell: /bin/bash shadowExpire: -1 shadowInactive: 99999 shadowMax: 99999 shadowMin: 0 shadowWarning: 14 |
Check your database
ldapsearchコマンドで先程追加したデータを再確認しましょう。
┌──(kali㉿kali-raspberrypi)-[~] └─$ sudo ldapsearch -x -LLL -D cn=admin,dc=example,dc=com -b dc=example,dc=com -W |
Done!これでLDAP Server側の準備が完成です。
mGuard Side
今度はPhoenix Contact のFL MGUARD 1105側です。
Users
今回の記事ではLDAP Server経由でUser認証するので、Authentication>User ManagmentでSuper Admin のみだけ残しておきましょう。
Enable LDAP
次はAuthentication>LDAP Tabを開きます。
LDAP authenticationを有効にします。この機能を有効にすると、デバイスは LDAP プロトコルを介して設定された LDAP サーバーにアクセスできます。注意するのは、LDAP 経由でログインしたユーザーは、進行中のセッション中にこの機能が解除されると、 自動的にログアウトされます。
User role mapping
LDAP認証を有効にするとUser role mapping・External LDAP serverの設定項目が表示されます。
Attribute
こちらはLDAPユーザーごとにロール/ユーザー・クラスが指定される属性名になります。
Roleを割り当てるには、LDAPサーバーとデバイスの両方で同じLDAP属性が割り当てられている必要があります。先ほどUserを追加したときtitleというAttributeがありますので、今回LDAP AttributeはTitleに参照するようにします。
Super Admin/Admin/Audit
LDAP認証するときtitleを該当すると設定しましたが、Phoenix Contact FL MGUARDのWeb ServerにLoginするには、Super Admin/Admin/Auditの権限があります。
どんなtitleはSuper Adminなのか?どんなtitleはAdminなのか?を識別するには下図の枠に設定する必要があります。
- Super Admin→mGRoot
- Admin→mGAdmin
- Audit→staff
なので、u11000のtitle Attributeはstaffに設定されましたので、このUserでLoginすると権限はAuditになります。
External LDAP server
次はPhoenix ContactのFL MGUARD 1105に接続するLDAP Serverを設定します。
IP/Host name
こちらはデバイスがユーザー認証のリクエストを送信する外部 LDAP サーバーの IP アドレスまたはホスト名になります。
Port
LDAPサーバーがリクエストを受け付けるポートになります。
デフォルト設定: 389
Base DN
LDAP サーバー上のディレクトリのベースアドレスになります。
入力フォーマット:ディレクトリパス(DC=x,DC=y,DC=z)
Username/Password
ユーザー名 デバイスが LDAP サーバーにログインし、認証する際のユーザー名になります。注意するのはこのLogin情報はOS自体のLogin情報ではなく、LDAP ServerのLogin情報になります。
Result
こちらは今回記事で行った設定です。
Save
最後はLDAP設定をPhoenix Contact FL MGUARD 1105に保存します。
Result
最後はPhoenix Contact FL MGUARD 1105のWeb serverにLoginしてみます。
Done!Phoenix Contact FL MGUARD 1105本体に登録されてないUserでも、LDAP Server経由でLoginできました!