Linphoneのユーザ毎のコンタクトリストをデータベースとして保存し、デバイス間で共有するために必要なCardDAVサーバ、発信先を検索・リストアップするためのLDAPサーバを構築。
-
CardDAVサーバ:Baikal(sabre/dav)
-
LDAPサーバ:OpenLDAP + phpLDAPadmin
Linphoneのユーザ毎のコンタクトリストをデータベースとして保存し、デバイス間で共有するために必要なCardDAVサーバ、発信先を検索・リストアップするためのLDAPサーバを構築。
条件:Apacheでhttpsを有効にしていること。Debian12へインストール。
Baikal は SQLite を標準 DB として使うため、pdo_sqlite と sqlite3 の両方が必要です。
SQLiteのインストール(PHP のバージョンが 8.2の場合)
$ sudo apt install php-sqlite3 php8.2-sqlite3
ダウンロード
$ git clone https://github.com/sabre-io/Baikal.git -b 0.10.1
ディレクトリの移動・アクセス権変更
$ sudo mv Baikal /var/www/
$ sudo chown -R www-data:www-data /var/www/Baikal
ComposerでPHP関連パッケージのインストール
$ cd /var/www/Baikal
$ sudo -u www-data composer install
アパッチ設定ファイルの作成
$ sudo nano /etc/apache2/sites-available/dav.example.com.conf
<VirtualHost *:443>
DocumentRoot /var/www/Baikal/html
ServerName dav.example.com
RewriteEngine on
# Generally already set by global Apache configuration
# RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule /.well-known/carddav /dav.php [R=308,L]
RewriteRule /.well-known/caldav /dav.php [R=308,L]
<Directory "/var/www/Baikal/html">
Options None
# If you install cloning git repository, you may need the following
Options +FollowSymlinks
AllowOverride None
# Configuration for apache-2.4:
Require all granted
# Configuration for apache-2.2:
# Order allow,deny
# Allow from all
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/dav.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dav.example.com/privkey.pem
</VirtualHost>
上記設定の再読込
$ sudo a2ensite dav.example.com.conf
$ sudo systemctl reload apache2
アクセスURL
https://dav.example.com
各パッケージのインストール
$ sudo apt install slapd ldap-utils phpldapadmin -y
再設定
$ sudo dpkg-reconfigure slapd
| 質問 | 推奨回答例 |
|---|---|
| Omit OpenLDAP server configuration? | いいえ |
| DNS domain name | example.com |
| Organization name | Example Com |
| Administrator password | 任意の安全なパスワード |
| Database backend | MDB |
| Do you want the database to be removed when slapd is purged? | いいえ |
| Move old database? | はい |
ステータス確認
$ sudo systemctl status slapd
$ ldapsearch -x -LLL -H ldap://localhost -b dc=example,dc=com dn
TLS認証ファイルのコピー
$ sudo mkdir -p /etc/ssl/ldap
$ sudo cp /etc/letsencrypt/live/ldap.example.com/fullchain.pem /etc/ssl/ldap/
$ sudo cp /etc/letsencrypt/live/ldap.example.com/privkey.pem /etc/ssl/ldap/
$ sudo chown openldap:openldap /etc/ssl/ldap/*.pem
$ sudo chmod 400 /etc/ssl/ldap/*.pem
ldaps:/// を追加
$ sudo nano /etc/default/slapd
SLAPD_SERVICES=“ldap:/// ldaps:/// ldapi:///”
TLSファイル作成
$ nano ldap-tls.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/ldap/fullchain.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/ldap/privkey.pem
TLSファイル読込
$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f ./ldap-tls.ldif
LDAPサーバ再起動
$ sudo systemctl restart slapd
$ sudo ss -ltnp | grep slapd
LDAPS(636ポート)接続テスト:
$ ldapsearch -x -H ldaps://ldav.example.com -b dc=example,dc=com
StartTLS(389ポート)接続テスト:
$ ldapsearch -x -H ldap://ldap.example.com -ZZ -b dc=example,dc=com
phpLDAPadmin:ベースDNとバインドDNの設定
$ sudo nano /etc/phpldapadmin/config.php
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
注)Debianでは自動的にApache設定が追加されます
アクセス
https://ldap.example.com/phpldapadmin