# 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