LinuCレベル3 300試験の出題範囲「390.2 ディレクトリの保護」の技術的内容についての解説をまとめました。
重要度 3 説明 LDAPディレクトリに対する暗号化アクセスを設定し、ファイアウォールレベルでアクセスを制限できること。 主要な知識範囲 SSL/TLSを用いてLDAPディレクトリのセキュリティを保護
ファイアウォール設定の考慮事項
非認証バインド
ユーザ名/パスワード認証方式
SASLユーザデータベースの保守
クライアント/サーバ証明書重要なファイル、
用語、ユーティリティSSL / TLS
セキュリティ強度係数 (SSF)
SASL
プロキシ認証
StartTLS
iptables

OpenLDAPの認証方式
OpenLDAPの認証方式には、「簡易認証」と「SASL」認証があります。
簡易認証には以下の種類があります。
- 匿名バインド
- 非認証バインド
- ユーザ名(バインドDN)とパスワードによる認証
SASL認証はSimple Authentication and Security Layerの頭文字で、接続指向のプロトコルでの認証のためのフレームワークのことです。
LDAPの簡易認証
非認証バインドは、ユーザー名のみ要求される認証方式です。LDAPの簡易認証方式は非人称バインドのほかにも合わせて3つのモードがあります。以下のLinuC公式サイトで掲載されているLDAPの簡易認証を引用して紹介します。
DAPの簡易認証では、以下の3つのモードがあります。
匿名バインド : 名前もパスワードも要求されない認証方式 非認証バインド : ユーザ名のみ要求される認証方式 ユーザ名/パスワード認証方式 : ユーザ名・パスワードが要求される認証方式 それぞれ無効化や使用可能にする場合は、以下のように設定を行います。
- 匿名バインドを無効化する場合、slapd.confで”disallow bind_anon”を指定する
- 非認証バインドはデフォルトでは使用不可になっており、slapd.confに”allow bind_anon_cred”を指定することで使用可能となる
- ユーザー/パスワード認証バインドを無効にする場合、slapd.confに”disallow bind_simple”を設定する

iptables
iptablesはLinuxのファイヤーウォールです。通信の制御を行ってセキュリティを制御しているツールです。OpenLDAPでは、389/TCP、636/TCPをファイヤウォールの設定(iptables)で許可しておく必要があります。
OpenLDAPでは、ldapとして389/TCP・ldapsとして636/TCPが使用されます。また、StartTLSを設定した場合、389/TCPで暗号化通信が行われます。
そのため、iptablesなどファイアウォール機能では各ポートでの通信を許可する必要があります。

slappasswdコマンド
slappasswdコマンドはuserPassword値を生成するために使用します。
slappasswd は、 ldapmodify(1) あるいは slapd.conf(5) の rootpw 設定ディレクティブで使える userPassword 値を生成するために使われます。
OpenLDAPとSSL / TLS
OpenLDAPではSSL/TLSを使用して、通信の暗号化、サーバ証明書を利用したサーバの正当性の証明、クライアント証明書によるクライアントの確認を行うことができます。
SSL(Secure Sockets Layer)とTLS(Transport Layer Security)は、インターネット上でデータを暗号化するプロトコルです。
SSL/TLS関連の「slapd.conf」ファイルのディレクティブ
slapd.confファイルの以下のディレクティブをOpenLDAPのSSL/TLSで使用します。
- TLSCACertificateFile ⇒ CAの証明書を指定する
- TLSCertificateFile ⇒ サーバー証明書の指定
- TLSCertificateKeyFile ⇒ サーバー証明書に対応する秘密鍵を指定
- TLSCipherSuite ⇒ 暗号方式の指定
- TLSVerifyClient ⇒ クライアント証明書の処理方法の指定
以下は「ldap.conf」のSSLに関連するディレクティブの設定例です。
TLSCACertificateFile /etc/openldap/newcert.pem
TLSCertificateFile /etc/openldap/newcert.pem
TLSCertificateKeyFile /etc/openldap/newkey.pem
TLSCipherSuite HIGH
TLSVerifyClient try
