LoginSignup
0
1

More than 1 year has passed since last update.

自宅サーバー構築譚:LDAPサーバー OpenLDAP over TLS

Last updated at Posted at 2023-03-18

能書き

自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。Hyper-Vに構築したクライアントマシンもどきも使用します。

前回は、サーバーマシンに OpenLDAP をインストールしました。今回はその続きです。

目標

前回掲げた作業の題目を再掲します。

  1. LDAPインストール。そしてログを rsyslog に出力する設定。 ←完了
  2. LDAP over TLS を設定。そしてサーバーマシンとは別のクライアントマシンから ldaps アクセス。 ←イマココ
  3. クライアントマシンに sssd をインストールしてログイン。LDAP でのアカウント管理を実現。
  4. SSH の公開鍵接続。公開鍵の LDAP 管理を実現。クライアントマシンから SSH 接続。

と言う訳で今回は LDAP の通信路を暗号化し、クライアントマシンから問い合わせを実施してみます。

参考文献

今回は、一発でコレ!という参考文献がありませんでした。幾つかの記事から使える手順を継ぎ接ぎした形になります。

サーバー側操作

以前、rsyslog を設定・確認した際に、認証局と証明書を作成しています。そしてオレオレ認証局をクライアントマシンへ送付済です。それを再利用します。

スナップショット

スナップショットだいじ。超だいじ。

サーバー
sudo zfs snapshot tank/ROOT/ubuntu@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/apt@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/dpkg@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS

認証局と証明書の鍵を配置

認証局:

  • 秘密鍵 /opt/CA/demoCA/pki/private/ca.key
  • 公開鍵 /opt/CA/demoCA/pki/ca.crt

サーバーマシン secondary.home の証明書:

  • 秘密鍵 /opt/CA/demoCA/pki/private/secondary.home.key
  • 公開鍵 /opt/CA/demoCA/pki/issued/secondary.home.crt
サーバー
cd /etc/ldap/sasl2/
sudo cp -p /opt/CA/demoCA/pki/ca.crt demoCA.crt
sudo cp -p /opt/CA/demoCA/pki/private/secondary.home.key .
sudo cp -p /opt/CA/demoCA/pki/issued/secondary.home.crt .
sudo chown openldap demoCA.crt secondary.home.*

TLS 設定

サーバー
sudo -i
cat >/opt/ldap/mod_ssl.ldif <<___
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/sasl2/demoCA.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/sasl2/secondary.home.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/sasl2/secondary.home.key
___
ldapmodify -Y EXTERNAL -H ldapi:/// -f /opt/ldap/mod_ssl.ldif
exit

プロトコルも変更します。
ここでは ldap:// を停止して、ldaps:// と ldapi:// の2つを許可するようにしました。

サーバー
sudo sed -i -e'/^SLAPD_SERVICES=/c SLAPD_SERVICES="ldaps:/// ldapi:///"' /etc/default/slapd

LDAP を再起動します。

サーバー
sudo systemctl restart slapd

クライアント側でオレオレ認証局を信頼

スナップショット

スナップショットだいじ。超だいじ。

クライアント
sudo zfs snapshot tank/ROOT/ubuntu@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/apt@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/dpkg@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_TLS

LDAP クライアントをインストール

クライアント
sudo apt install -y ldap-utils

オレオレ認証局の受け取り

以前、rsyslog を設定・確認した際クライアントマシンへ送信したオレオレ認証局の公開鍵が、/etc/rsyslog.d/tls/demoCA.crtに存在します。これを再利用します。

オレオレ認証局を信頼

Ubuntuにおいて証明書の信頼とは、下記手順で操作する事、らしいです。

クライアント
sudo mkdir /usr/share/ca-certificates/demoCA
sudo cp -p /etc/rsyslog.d/tls/demoCA.crt /usr/share/ca-certificates/demoCA/
echo demoCA/demoCA.crt | sudo tee -a /etc/ca-certificates.conf
sudo update-ca-certificates

上記操作によって/etc/ssl/certsディレクトリに必要なファイルが設定されます。

クライアント
ls -l /etc/ssl/certs/ | grep demoCA
ls -l /etc/ssl/certs/ca-certificates.crt

Ubuntu では、信頼する認証局の一覧表は既に設定済のようです。

クライアント
grep TLS_CACERT /etc/ldap/ldap.conf

実行結果。

クライアント
$ grep TLS_CACERT /etc/ldap/ldap.conf
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

動作確認

クライアント側でコマンドを実行。ここでは「.home」は省略できません。FQDN をしっかり指定しましょう。

クライアント
ldapsearch -x -LLL -H ldaps://secondary.home -b dc=home

成功したら、何らかの結果が表示されます。

クライアント
$ ldapsearch -x -LLL -H ldaps://secondary.home -b dc=home
dn: dc=home
objectClass: top
objectClass: dcObject
objectClass: organization
o: infra
dc: home

なお TLS ではない ldap:// は禁止しました。指定すると通信に失敗します。

クライアント
$ ldapsearch -x -LLL -H ldap://secondary.home -b dc=home
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

仕舞い

成功したら/etcをコミットしましょう。

まずはサーバー側を確認。

サーバー
$ sudo svn st /etc
M       /etc/default/slapd
M       /etc/ldap/ldap.conf
?       /etc/ldap/sasl2/demoCA.crt
?       /etc/ldap/sasl2/secondary.home.crt
?       /etc/ldap/sasl2/secondary.home.key
M       /etc/ldap/slapd.d/cn=config.ldif

コミットします。

サーバー
sudo -i
svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"LDAP over TLS"
exit

次にクライアント側を確認。

クライアント
$ sudo svn st /etc
M       /etc/ca-certificates.conf
M       /etc/cups/subscriptions.conf
M       /etc/cups/subscriptions.conf.O
M       /etc/ldap/ldap.conf
?       /etc/ssl/certs/b4da1397.0
M       /etc/ssl/certs/ca-certificates.crt
?       /etc/ssl/certs/demoCA.pem
M       /etc/zfs/zpool.cache

なぜかzpool.cacheに差分が出ました。何だろう。まぁいいか。このままコミットします。

クライアント
sudo -i
svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"LDAP over TLS"
exit

これで OpenLDAP over TLS の設定が終わりました。クライアントからの問合せと回答が暗号化されます。やったね:thumbsup_tone1:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1