能書き
自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。Hyper-Vに構築したクライアントマシンもどきも使用します。
前回は、サーバーマシンに OpenLDAP をインストールしました。今回はその続きです。
目標
前回掲げた作業の題目を再掲します。
- LDAPインストール。そしてログを rsyslog に出力する設定。 ←完了
- LDAP over TLS を設定。そしてサーバーマシンとは別のクライアントマシンから ldaps アクセス。 ←イマココ
- クライアントマシンに sssd をインストールしてログイン。LDAP でのアカウント管理を実現。
- SSH の公開鍵接続。公開鍵の LDAP 管理を実現。クライアントマシンから SSH 接続。
と言う訳で今回は LDAP の通信路を暗号化し、クライアントマシンから問い合わせを実施してみます。
参考文献
今回は、一発でコレ!という参考文献がありませんでした。幾つかの記事から使える手順を継ぎ接ぎした形になります。
- Ubuntu 22.04 LDAPクライアント - 手当たり次第に書くんだ
- Ubuntu 22.04 TLS 証明書の信頼設定 - 手当たり次第に書くんだ
- 使用する各端末にCAの公開鍵(ca.crt)をルート証明書としてインポート - easy-rsaでプライベートCA(認証局)を作ってオレオレ証明書ではないローカル用TLS証明書の管理をする - R O HEAD -yajiri-
- LDAP and Transport Layer Security (TLS) - ubuntu server
サーバー側操作
以前、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 の設定が終わりました。クライアントからの問合せと回答が暗号化されます。やったね