# 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
```
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
```
この設定を反映する。
```
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