Samba ad dcを気軽に利用する。 https://rohhie.net/samba-ad-dc-with-docker/
 
 
Go to file
rohhie dc02aac067 Second version 2022-10-15 06:28:12 +00:00
baseimage Second version 2022-10-15 06:28:12 +00:00
packages Second version 2022-10-15 06:28:12 +00:00
.env Second version 2022-10-15 06:28:12 +00:00
.gitignore First version 2022-10-08 15:54:09 +09:00
Dockerfile First version 2022-10-08 15:54:09 +09:00
LICENSE First version 2022-10-08 15:54:09 +09:00
README.md Second version 2022-10-15 06:28:12 +00:00
docker-compose.yml.primary Second version 2022-10-15 06:28:12 +00:00
docker-compose.yml.restore Second version 2022-10-15 06:28:12 +00:00
docker-compose.yml.secondary Second version 2022-10-15 06:28:12 +00:00
entrypoint.sh First version 2022-10-08 15:54:09 +09:00
setufw.sh Second version 2022-10-15 06:28:12 +00:00

README.md

Samba-ad-dc-with-docker

概要

Samba ad dcをDockerで気軽に利用する。

構築方法

ダウンロード

このリポジトリからソースをダウンロードする。

git clone https://gitea.rohhie.net/rohhie/Samba-ad-dc-with-docker.git
mv Samba-ad-dc-with-docker samba
cd samba

phpLDAPadminを使用する場合は、バージョン1.2.3をダウンロードする。

wget https://github.com/leenooks/phpLDAPadmin/archive/refs/tags/1.2.3.tar.gz -O packages/phpLDAPadmin-1.2.3.tar.gz

ベースとなるイメージを作成する

Samba ad dcイメージのベースとなるイメージを作成する。
スクリプトの修正等でコンテナを作り直す際に、最低限のダウンロードで済ませるため。

sudo baseimage/mkbaseimage.sh

目的のdocker-compose.ymlを作成する

プライマリーDC、セカンダリーDC、リストアドDCの3種類を用意しているので、いずれかをコピーする。
ここではプライマリーDCについて説明する。

cp docker-compose.yml.primary docker-compose.yml

ホストのIPアドレスを設定する

.envにプライマリーDC、セカンダリーDC、リストアドDCのコンテナを動作させるホストのIPアドレスを設定する。
あわせて各DCのフォワード先IPアドレスを設定する。

ダウンロードした.envにはホームラボのホストが指定してあるので、環境に合わせて変更する。
セカンダリーDC、リストアドDCを使わない場合は、未設定で問題はない。

動作条件を設定する

docker-compose.ymlで動作条件を設定する。

environment:

変数名 設定内容
SMB_REALM 管理するレルムの名前
SMB_DOMAIN レルムのドメイン名
SMB_ADMINPASS administratorのパスワード
SMB_HOSTIP コンテナを動作させるホストのIPアドレス
SMB_FORWARD フォワード先となるDNSのIPアドレス
SMB_RPC_PORTS RPCで使用するポート範囲
SMB_WEB_PORTS Apacheが使用するポート
SMB_PURPOSE "primary"として、プライマリーDCとする
SMB_USEBIND9 DNSの選択 "false":内蔵 "true":BIND9
RSY_SECONDARY セカンダリーのIPアドレス
SMB_PURPOSEが"primary"の場合に有効
RSY_PASS セカンダリーからrsyncする際のパスワード

※SMB_PURPOSEは、"secondary"と"restore"を指定可能だが、それぞれ別にymlを用意してあるので、それを使うこと。

証明書類を準備する

ドメインで使用する証明書類をpackages/cert に配置する。
証明書の名前は以下の通り固定。変更する場合は、config-*.shを変更すること。

ファイル 内容
ca.crt 認証局の証明書。
server.crt Samba ad dcの証明書。ca.crtの認証局が署名したものを想定。
server.key Samba ad dcの秘密鍵。パスワードは外しておく。
ca.crl ca.crtの認証局が発行するcertificate revocation list(CRL)。

※ca.crlの設置は必須ではない。

これらのファイルを設置すれば、LDAPとLDAPSが使えるようになる。
なければ、LDAPが使える。

ファイアウォールの設定

ファイアウォールを設定するスクリプトを実行する。

sudo ./setufw.sh

このスクリプトはどこから接続されても良い、という設定をしているので、接続元を限定したい場合には、

ufw $1 allow to any port   53 proto any from any comment "DNS"

の from のところに限定したい範囲を書いておく。

何らかの理由で追加したファイアウォールの設定を解除するなら、以下を実行する。

sudo ./setufw.sh delete

コンテナを起動

コンテナを構築して起動する。

sudo docker compose up -d --build

Apacheの設定(必須ではない)

phpLDAPadminとLDAP Account Managerのポート8081にリバースプロキシ設定する設定の例。
コンテナを動かすホストにApacheをインストールしている。
証明書と秘密鍵は、環境にあったものを準備して設定。

/etc/apache2/sites-available/myservice.conf

<VirtualHost *:443>
    ServerAdmin webmaster@example.net
    ServerName addc.example.net
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyPass /phpldapadmin http://localhost:8081/phpldapadmin
    ProxyPassReverse /phpldapadmin http://localhost:8081/phpldapadmin
    ProxyPass /lam http://localhost:8081/lam
    ProxyPassReverse /lam http://localhost:8081/lam

    # SSL
    SSLEngine on
    SSLCertificateFile /etc/ssl/private/example.net.crt
    SSLCertificateKeyFile /etc/ssl/private/example.net.key
</VirtualHost>

この設定を反映する。

sudo a2ensite myservice
sudo a2enmod proxy_http ssl
sudo systemctl restart apache2

なお、リバースプロキシ設定せずに、8081ポートに直接アクセスすることもできる。
この場合にはファイアウォールで8081/tcpを解放する。

使用方法

コンテナの中で自由にコマンドが実行できる。

sudo docker exec -it samba bash --login

phpLDAPadminにはブラウザでアクセスできる。ドメイン部分は環境に合わせる。
https://addc.example.net/phpldapadmin

LDAP Account Managerも同様。
https://addc.example.net/lam

その他

細かな設定手順や使い方、セカンダリーDCやリストアドDCを動作させる手順は、メインサイト参照。
https://rohhie.net/samba-ad-dc-with-docker/

ライセンス

MIT